diff --git a/LANCommander.SDK/Providers/SettingsProvider.cs b/LANCommander.SDK/Providers/SettingsProvider.cs index bbf07ef1..f57476d3 100644 --- a/LANCommander.SDK/Providers/SettingsProvider.cs +++ b/LANCommander.SDK/Providers/SettingsProvider.cs @@ -15,6 +15,8 @@ using Settings = LANCommander.SDK.Models.Settings; public class SettingsProvider : ISettingsProvider where TSettings : Settings, new() { + public const string FileName = "Settings.yaml"; + private readonly string _filePath; private readonly IOptionsMonitor _optionsMonitor; diff --git a/LANCommander.Server.Data.SQLite/Migrations/20231103052501_RemoveGameIconProperty.cs b/LANCommander.Server.Data.SQLite/Migrations/20231103052501_RemoveGameIconProperty.cs index ccf6dc12..8cea6ed8 100644 --- a/LANCommander.Server.Data.SQLite/Migrations/20231103052501_RemoveGameIconProperty.cs +++ b/LANCommander.Server.Data.SQLite/Migrations/20231103052501_RemoveGameIconProperty.cs @@ -12,8 +12,6 @@ namespace LANCommander.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { - var settings = SettingService.GetSettings(); - // Migrate any old icons from the filesystem if (Directory.Exists("Icon")) foreach (var file in Directory.EnumerateFiles("Icon")) diff --git a/LANCommander.Server.Data.SQLite/Migrations/20240220154307_CalculateMediaChecksum.cs b/LANCommander.Server.Data.SQLite/Migrations/20240220154307_CalculateMediaChecksum.cs index d6c2a409..7202588c 100644 --- a/LANCommander.Server.Data.SQLite/Migrations/20240220154307_CalculateMediaChecksum.cs +++ b/LANCommander.Server.Data.SQLite/Migrations/20240220154307_CalculateMediaChecksum.cs @@ -12,8 +12,6 @@ namespace LANCommander.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { - var settings = SettingService.GetSettings(); - if (Directory.Exists("Media")) { var files = Directory.EnumerateFiles("Media"); diff --git a/LANCommander.Server.Data.SQLite/Migrations/20241011014752_AddStorageLocations.cs b/LANCommander.Server.Data.SQLite/Migrations/20241011014752_AddStorageLocations.cs index 56e01d0a..bce688ab 100644 --- a/LANCommander.Server.Data.SQLite/Migrations/20241011014752_AddStorageLocations.cs +++ b/LANCommander.Server.Data.SQLite/Migrations/20241011014752_AddStorageLocations.cs @@ -13,8 +13,6 @@ namespace LANCommander.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { - var settings = SettingService.GetSettings(); - migrationBuilder.AddColumn( name: "StorageLocationId", table: "Media", diff --git a/LANCommander.Server.Data/DatabaseContext.cs b/LANCommander.Server.Data/DatabaseContext.cs index 75264aea..2c21c84c 100644 --- a/LANCommander.Server.Data/DatabaseContext.cs +++ b/LANCommander.Server.Data/DatabaseContext.cs @@ -1,7 +1,7 @@ using LANCommander.Server.Data.Enums; using LANCommander.Server.Data.Interceptors; using LANCommander.Server.Data.Models; -using Microsoft.AspNetCore.Identity; +using LANCommander.Server.Settings.Enums; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; diff --git a/LANCommander.Server.Data/Enums/DatabaseProvider.cs b/LANCommander.Server.Data/Enums/DatabaseProvider.cs deleted file mode 100644 index 2dfb4a99..00000000 --- a/LANCommander.Server.Data/Enums/DatabaseProvider.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace LANCommander.Server.Data.Enums -{ - public enum DatabaseProvider - { - Unknown, - SQLite, - MySQL, - PostgreSQL - } -} diff --git a/LANCommander.Server.Data/Enums/ServerEngine.cs b/LANCommander.Server.Data/Enums/ServerEngine.cs deleted file mode 100644 index e0ad64c4..00000000 --- a/LANCommander.Server.Data/Enums/ServerEngine.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace LANCommander.Server.Data.Enums; - -public enum ServerEngine -{ - Local, - Docker -} \ No newline at end of file diff --git a/LANCommander.Server.Data/LANCommander.Server.Data.csproj b/LANCommander.Server.Data/LANCommander.Server.Data.csproj index c0a5ad69..268cb67f 100644 --- a/LANCommander.Server.Data/LANCommander.Server.Data.csproj +++ b/LANCommander.Server.Data/LANCommander.Server.Data.csproj @@ -18,6 +18,7 @@ + diff --git a/LANCommander.Server.Data/Models/Server.cs b/LANCommander.Server.Data/Models/Server.cs index d1eff347..b0666212 100644 --- a/LANCommander.Server.Data/Models/Server.cs +++ b/LANCommander.Server.Data/Models/Server.cs @@ -2,7 +2,7 @@ using LANCommander.SDK.Enums; using System.ComponentModel.DataAnnotations.Schema; using System.Text.Json.Serialization; -using LANCommander.Server.Data.Enums; +using LANCommander.Server.Settings.Enums; namespace LANCommander.Server.Data.Models { diff --git a/LANCommander.Server.Services/Abstractions/IGitHubService.cs b/LANCommander.Server.Services/Abstractions/IGitHubService.cs index f88c5da1..eb076271 100644 --- a/LANCommander.Server.Services/Abstractions/IGitHubService.cs +++ b/LANCommander.Server.Services/Abstractions/IGitHubService.cs @@ -1,4 +1,5 @@ using LANCommander.Server.Services.Models; +using LANCommander.Server.Settings.Enums; using Octokit; using Semver; diff --git a/LANCommander.Server.Services/Abstractions/IVersionProvider.cs b/LANCommander.Server.Services/Abstractions/IVersionProvider.cs index c48a8971..a8e1938b 100644 --- a/LANCommander.Server.Services/Abstractions/IVersionProvider.cs +++ b/LANCommander.Server.Services/Abstractions/IVersionProvider.cs @@ -1,4 +1,5 @@ using LANCommander.Server.Services.Models; +using LANCommander.Server.Settings.Enums; using Semver; namespace LANCommander.Server.Services.Abstractions; diff --git a/LANCommander.Server.Services/ActionService.cs b/LANCommander.Server.Services/ActionService.cs index 8b0dccd5..755ef339 100644 --- a/LANCommander.Server.Services/ActionService.cs +++ b/LANCommander.Server.Services/ActionService.cs @@ -11,10 +11,11 @@ namespace LANCommander.Server.Services { public sealed class ActionService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + IDbContextFactory contextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(Action entity) { diff --git a/LANCommander.Server.Services/ArchiveClient.cs b/LANCommander.Server.Services/ArchiveClient.cs index 29f77ee0..d300e321 100644 --- a/LANCommander.Server.Services/ArchiveClient.cs +++ b/LANCommander.Server.Services/ArchiveClient.cs @@ -21,11 +21,12 @@ namespace LANCommander.Server.Services { public sealed class ArchiveClient( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, IDbContextFactory dbContextFactory, - StorageLocationService storageLocationService) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, dbContextFactory), IArchiveClient + StorageLocationService storageLocationService) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, dbContextFactory), IArchiveClient { public async Task GetLatestArchive(Expression> predicate) { diff --git a/LANCommander.Server.Services/AuthenticationService.cs b/LANCommander.Server.Services/AuthenticationService.cs index f95ad63a..3b5bb6a2 100644 --- a/LANCommander.Server.Services/AuthenticationService.cs +++ b/LANCommander.Server.Services/AuthenticationService.cs @@ -17,11 +17,12 @@ namespace LANCommander.Server.Services public class AuthenticationService( ILogger logger, IMapper mapper, + SettingsProvider settingsProvider, UserService userService, RoleService roleService, ScriptService scriptService, ITokenProvider tokenProvider, - SDK.Services.ScriptClient scriptClient) : BaseService(logger) + SDK.Services.ScriptClient scriptClient) : BaseService(logger, settingsProvider) { public async Task LoginAsync(string userName, string password) { @@ -62,7 +63,7 @@ namespace LANCommander.Server.Services _logger?.LogDebug("Password check for user {UserName} was successful", user.UserName); - if (_settings.Authentication.RequireApproval && !user.Approved && !await userService.IsInRoleAsync(user, RoleService.AdministratorRoleName)) + if (_settingsProvider.CurrentValue.Server.Authentication.RequireApproval && !user.Approved && !await userService.IsInRoleAsync(user, RoleService.AdministratorRoleName)) throw new UserAuthenticationException("Account must be approved by an administrator"); var userRoles = await userService.GetRolesAsync(user); @@ -85,7 +86,7 @@ namespace LANCommander.Server.Services var refreshToken = GenerateRefreshToken(); user.RefreshToken = refreshToken; - user.RefreshTokenExpiration = DateTime.UtcNow.AddDays(_settings.Authentication.TokenLifetime); + user.RefreshTokenExpiration = DateTime.UtcNow.AddDays(_settingsProvider.CurrentValue.Server.Authentication.TokenLifetime); await userService.UpdateAsync(user); @@ -171,9 +172,9 @@ namespace LANCommander.Server.Services try { - if (_settings.Roles.DefaultRoleId == Guid.Empty) + if (_settingsProvider.CurrentValue.Server.Roles.DefaultRoleId == Guid.Empty) { - var defaultRole = await roleService.GetAsync(_settings.Roles.DefaultRoleId); + var defaultRole = await roleService.GetAsync(_settingsProvider.CurrentValue.Server.Roles.DefaultRoleId); if (defaultRole != null) await userService.AddToRoleAsync(user.UserName, defaultRole.Name); @@ -221,7 +222,7 @@ namespace LANCommander.Server.Services ValidateAudience = false, ValidateIssuer = false, ValidateIssuerSigningKey = true, - IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_settings.Authentication.TokenSecret)), + IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_settingsProvider.CurrentValue.Server.Authentication.TokenSecret)), ValidateLifetime = false }; @@ -247,10 +248,10 @@ namespace LANCommander.Server.Services private JwtSecurityToken GetToken(List authClaims) { - var authSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_settings.Authentication.TokenSecret)); + var authSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_settingsProvider.CurrentValue.Server.Authentication.TokenSecret)); var token = new JwtSecurityToken( - expires: DateTime.UtcNow.AddDays(_settings.Authentication.TokenLifetime), + expires: DateTime.UtcNow.AddDays(_settingsProvider.CurrentValue.Server.Authentication.TokenLifetime), claims: authClaims, signingCredentials: new SigningCredentials(authSigningKey, SecurityAlgorithms.HmacSha256) ); @@ -258,11 +259,11 @@ namespace LANCommander.Server.Services return token; } - public static async Task> GetAuthenticationProviderTemplatesAsync() + public static async Task> GetAuthenticationProviderTemplatesAsync() { var files = Directory.GetFiles(@"Templates/AuthenticationProviders", "*.yml", SearchOption.AllDirectories); - var externalProviders = new List(); + var externalProviders = new List(); var deserializer = new DeserializerBuilder() @@ -275,7 +276,7 @@ namespace LANCommander.Server.Services { var contents = await File.ReadAllTextAsync(file); - externalProviders.Add(deserializer.Deserialize(contents)); + externalProviders.Add(deserializer.Deserialize(contents)); } catch { } } diff --git a/LANCommander.Server.Services/CategoryService.cs b/LANCommander.Server.Services/CategoryService.cs index 740203e1..e54d4581 100644 --- a/LANCommander.Server.Services/CategoryService.cs +++ b/LANCommander.Server.Services/CategoryService.cs @@ -10,10 +10,11 @@ namespace LANCommander.Server.Services { public sealed class CategoryService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory context) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, context) + IDbContextFactory context) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, context) { public override async Task AddAsync(Category entity) { diff --git a/LANCommander.Server.Services/ChatMessageService.cs b/LANCommander.Server.Services/ChatMessageService.cs index ab1a26b8..2f155db5 100644 --- a/LANCommander.Server.Services/ChatMessageService.cs +++ b/LANCommander.Server.Services/ChatMessageService.cs @@ -10,10 +10,11 @@ namespace LANCommander.Server.Services { public sealed class ChatMessageService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory context) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, context) + IDbContextFactory context) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, context) { public override async Task AddAsync(ChatMessage entity) { diff --git a/LANCommander.Server.Services/ChatService.cs b/LANCommander.Server.Services/ChatService.cs index 304a802f..1ce4cb51 100644 --- a/LANCommander.Server.Services/ChatService.cs +++ b/LANCommander.Server.Services/ChatService.cs @@ -8,11 +8,12 @@ namespace LANCommander.Server.Services { public sealed class ChatService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, ChatMessageService chatMessageService, ChatThreadService chatThreadService, ChatThreadReadStatusService chatThreadReadStatusService, - UserService userService) : BaseService(logger) + UserService userService) : BaseService(logger, settingsProvider) { private readonly ConcurrentDictionary _locks = new(); private readonly int _maxCachedMessages = 200; diff --git a/LANCommander.Server.Services/ChatThreadReadStatusService.cs b/LANCommander.Server.Services/ChatThreadReadStatusService.cs index 533f4828..67082457 100644 --- a/LANCommander.Server.Services/ChatThreadReadStatusService.cs +++ b/LANCommander.Server.Services/ChatThreadReadStatusService.cs @@ -1,11 +1,6 @@ -using AutoMapper; -using LANCommander.Server.Data; +using LANCommander.Server.Data; using LANCommander.Server.Data.Models; -using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.ChangeTracking; -using Microsoft.Extensions.Logging; -using ZiggyCreatures.Caching.Fusion; namespace LANCommander.Server.Services { diff --git a/LANCommander.Server.Services/ChatThreadService.cs b/LANCommander.Server.Services/ChatThreadService.cs index 61402137..dcda4a4a 100644 --- a/LANCommander.Server.Services/ChatThreadService.cs +++ b/LANCommander.Server.Services/ChatThreadService.cs @@ -10,10 +10,11 @@ namespace LANCommander.Server.Services { public sealed class ChatThreadService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory context) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, context) + IDbContextFactory context) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, context) { public override async Task AddAsync(ChatThread entity) { diff --git a/LANCommander.Server.Services/CollectionService.cs b/LANCommander.Server.Services/CollectionService.cs index b97023de..93d93d81 100644 --- a/LANCommander.Server.Services/CollectionService.cs +++ b/LANCommander.Server.Services/CollectionService.cs @@ -10,10 +10,11 @@ namespace LANCommander.Server.Services { public sealed class CollectionService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + IDbContextFactory contextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(Collection entity) { diff --git a/LANCommander.Server.Services/CompanyService.cs b/LANCommander.Server.Services/CompanyService.cs index afbc3257..cf2b54ea 100644 --- a/LANCommander.Server.Services/CompanyService.cs +++ b/LANCommander.Server.Services/CompanyService.cs @@ -10,10 +10,11 @@ namespace LANCommander.Server.Services { public sealed class CompanyService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + IDbContextFactory contextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(Company entity) { diff --git a/LANCommander.Server.Services/EngineService.cs b/LANCommander.Server.Services/EngineService.cs index 6ebb1163..8bee6063 100644 --- a/LANCommander.Server.Services/EngineService.cs +++ b/LANCommander.Server.Services/EngineService.cs @@ -10,10 +10,11 @@ namespace LANCommander.Server.Services { public sealed class EngineService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + IDbContextFactory contextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(Engine entity) { diff --git a/LANCommander.Server.Services/Extensions/IServiceCollectionExtensions.cs b/LANCommander.Server.Services/Extensions/IServiceCollectionExtensions.cs index 9e1a0b72..6f0f4bbc 100644 --- a/LANCommander.Server.Services/Extensions/IServiceCollectionExtensions.cs +++ b/LANCommander.Server.Services/Extensions/IServiceCollectionExtensions.cs @@ -1,21 +1,21 @@ using LANCommander.SDK; +using LANCommander.SDK.Interceptors; using LANCommander.SDK.Models; using LANCommander.Server.Services.Abstractions; using LANCommander.Server.Services.Factories; +using LANCommander.Server.Services.Interceptors; using LANCommander.Server.Services.MediaGrabbers; using LANCommander.Server.Services.ServerEngines; using Microsoft.Extensions.DependencyInjection; -using Settings = LANCommander.Server.Services.Models.Settings; namespace LANCommander.Server.Services.Extensions; public static class IServiceCollectionExtensions { - public static IServiceCollection AddLANCommanderServer(this IServiceCollection services, Settings settings) + public static IServiceCollection AddLANCommanderServer(this IServiceCollection services) { services.AddScoped(); services.AddScoped(); - services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); @@ -63,6 +63,7 @@ public static class IServiceCollectionExtensions services.AddSingleton(provider => provider.GetService()); services.AddSingleton(); + services.AddSingleton(); services.AddAutoMapper(cfg => { }, typeof(MappingProfile)); services.AddFusionCache(); diff --git a/LANCommander.Server.Services/GameCustomFieldService.cs b/LANCommander.Server.Services/GameCustomFieldService.cs index 7052bfce..6d38b357 100644 --- a/LANCommander.Server.Services/GameCustomFieldService.cs +++ b/LANCommander.Server.Services/GameCustomFieldService.cs @@ -2,8 +2,6 @@ using LANCommander.Server.Data; using LANCommander.Server.Data.Models; using LANCommander.Server.Services.Extensions; -using LANCommander.SDK; -using LANCommander.SDK.Enums; using System.Linq.Expressions; using ZiggyCreatures.Caching.Fusion; using LANCommander.Server.Services.Models; @@ -15,10 +13,11 @@ namespace LANCommander.Server.Services { public class GameCustomFieldService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + IDbContextFactory contextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(GameCustomField entity) { diff --git a/LANCommander.Server.Services/GameSaveService.cs b/LANCommander.Server.Services/GameSaveService.cs index 05c051a9..684ddc7a 100644 --- a/LANCommander.Server.Services/GameSaveService.cs +++ b/LANCommander.Server.Services/GameSaveService.cs @@ -3,7 +3,6 @@ using LANCommander.Server.Data; using LANCommander.Server.Data.Models; using LANCommander.Helpers; using LANCommander.SDK.Enums; -using LANCommander.Server.Models; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; @@ -13,11 +12,12 @@ namespace LANCommander.Server.Services { public sealed class GameSaveService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, IDbContextFactory contextFactory, - StorageLocationService storageLocationService) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + StorageLocationService storageLocationService) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(GameSave entity) { diff --git a/LANCommander.Server.Services/GameService.cs b/LANCommander.Server.Services/GameService.cs index ee95a578..f304e3f3 100644 --- a/LANCommander.Server.Services/GameService.cs +++ b/LANCommander.Server.Services/GameService.cs @@ -6,7 +6,6 @@ using LANCommander.Server.Services.Extensions; using LANCommander.SDK; using LANCommander.SDK.Enums; using System.Linq.Expressions; -using LANCommander.SDK.Services; using ZiggyCreatures.Caching.Fusion; using LANCommander.Server.Services.Models; using Microsoft.Extensions.Logging; @@ -17,13 +16,14 @@ namespace LANCommander.Server.Services { public class GameService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, IDbContextFactory contextFactory, ArchiveClient archiveClient, MediaService mediaService, - SDK.Services.ScriptClient scriptClient) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + SDK.Services.ScriptClient scriptClient) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(Game entity) { diff --git a/LANCommander.Server.Services/GenreService.cs b/LANCommander.Server.Services/GenreService.cs index 9dc00716..7753ddc9 100644 --- a/LANCommander.Server.Services/GenreService.cs +++ b/LANCommander.Server.Services/GenreService.cs @@ -10,10 +10,11 @@ namespace LANCommander.Server.Services { public sealed class GenreService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + IDbContextFactory contextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(Genre entity) { diff --git a/LANCommander.Server.Services/GitHubService.cs b/LANCommander.Server.Services/GitHubService.cs index cd0ac0e5..43d26a37 100644 --- a/LANCommander.Server.Services/GitHubService.cs +++ b/LANCommander.Server.Services/GitHubService.cs @@ -1,5 +1,6 @@ using LANCommander.Server.Services.Abstractions; using LANCommander.Server.Services.Models; +using LANCommander.Server.Settings.Enums; using Microsoft.Extensions.Logging; using Octokit; using Semver; diff --git a/LANCommander.Server.Services/IGDBService.cs b/LANCommander.Server.Services/IGDBService.cs index 3a81dd2d..ea90acb1 100644 --- a/LANCommander.Server.Services/IGDBService.cs +++ b/LANCommander.Server.Services/IGDBService.cs @@ -11,11 +11,12 @@ namespace LANCommander.Server.Services { public class IGDBService( ILogger logger, + SettingsProvider settingsProvider, GameService gameService, EngineService engineService, CompanyService companyService, GenreService genreService, - TagService tagService) : BaseService(logger), IDisposable + TagService tagService) : BaseService(logger, settingsProvider), IDisposable { private const string DefaultFields = "*"; private IGDBClient Client; @@ -32,8 +33,8 @@ namespace LANCommander.Server.Services public void Authenticate() { - ClientId = _settings.IGDBClientId; - ClientSecret = _settings.IGDBClientSecret; + ClientId = _settingsProvider.CurrentValue.Server.IGDB.ClientId; + ClientSecret = _settingsProvider.CurrentValue.Server.IGDB.ClientSecret; try { diff --git a/LANCommander.Server.Services/IPXRelayService.cs b/LANCommander.Server.Services/IPXRelayService.cs index 7c2be849..a0df7d67 100644 --- a/LANCommander.Server.Services/IPXRelayService.cs +++ b/LANCommander.Server.Services/IPXRelayService.cs @@ -9,23 +9,21 @@ namespace LANCommander.Server.Services private Task? _relayTask; private IPXRelay? _relay; - public IPXRelayService(ILogger logger) : base(logger) + public IPXRelayService(ILogger logger, SettingsProvider settingsProvider) : base(logger, settingsProvider) { Init(logger); } public void Init(ILogger logger) { - var settings = SettingService.GetSettings(); - StopAsync().Wait(); - _relay = new IPXRelay(settings.IPXRelay.Port, logger); + _relay = new IPXRelay(_settingsProvider.CurrentValue.Server.IPXRelay.Port, logger); - if (!settings.IPXRelay.Logging) + if (!_settingsProvider.CurrentValue.Server.IPXRelay.Logging) _relay.DisableLogging(); - if (settings.IPXRelay.Enabled) + if (_settingsProvider.CurrentValue.Server.IPXRelay.Enabled) { _relayCts = new CancellationTokenSource(); _relayTask = Task.Run(async () => diff --git a/LANCommander.Server/Interceptors/BeaconMessageInterceptor.cs b/LANCommander.Server.Services/Interceptors/BeaconMessageInterceptor.cs similarity index 54% rename from LANCommander.Server/Interceptors/BeaconMessageInterceptor.cs rename to LANCommander.Server.Services/Interceptors/BeaconMessageInterceptor.cs index 37187354..b3ccecd1 100644 --- a/LANCommander.Server/Interceptors/BeaconMessageInterceptor.cs +++ b/LANCommander.Server.Services/Interceptors/BeaconMessageInterceptor.cs @@ -1,22 +1,19 @@ using System.Net; using LANCommander.SDK.Interceptors; using LANCommander.SDK.Models; -using LANCommander.Server.Services; -namespace LANCommander.Server.Interceptors; +namespace LANCommander.Server.Services.Interceptors; -public class BeaconMessageInterceptor : IBeaconMessageInterceptor +public class BeaconMessageInterceptor(SettingsProvider settingsProvider) : IBeaconMessageInterceptor { public async Task ExecuteAsync(BeaconMessage message, IPEndPoint interfaceEndPoint) { if (String.IsNullOrWhiteSpace(message.Address)) { - var settings = SettingService.GetSettings(); - - if (settings.UseSSL) - message.Address = $"https://{interfaceEndPoint.Address.ToString()}:{settings.SSLPort}"; + if (settingsProvider.CurrentValue.Server.Http.UseSSL) + message.Address = $"https://{interfaceEndPoint.Address.ToString()}:{settingsProvider.CurrentValue.Server.Http.SSLPort}"; else - message.Address = $"http://{interfaceEndPoint.Address.ToString()}:{settings.Port}"; + message.Address = $"http://{interfaceEndPoint.Address.ToString()}:{settingsProvider.CurrentValue.Server.Http.Port}"; } return message; diff --git a/LANCommander.Server.Services/IssueService.cs b/LANCommander.Server.Services/IssueService.cs index 53d1e865..a032119e 100644 --- a/LANCommander.Server.Services/IssueService.cs +++ b/LANCommander.Server.Services/IssueService.cs @@ -1,4 +1,5 @@ -using LANCommander.Server.Data; +using System.Configuration; +using LANCommander.Server.Data; using LANCommander.Server.Data.Models; using AutoMapper; using Microsoft.AspNetCore.Http; @@ -10,10 +11,11 @@ namespace LANCommander.Server.Services { public sealed class IssueService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + IDbContextFactory contextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(Issue entity) { diff --git a/LANCommander.Server.Services/KeyService.cs b/LANCommander.Server.Services/KeyService.cs index df36018c..4df16807 100644 --- a/LANCommander.Server.Services/KeyService.cs +++ b/LANCommander.Server.Services/KeyService.cs @@ -11,10 +11,11 @@ namespace LANCommander.Server.Services { public sealed class KeyService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + IDbContextFactory contextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(Key entity) { diff --git a/LANCommander.Server.Services/LANCommander.Server.Services.csproj b/LANCommander.Server.Services/LANCommander.Server.Services.csproj index 7781d811..4cd6a32e 100644 --- a/LANCommander.Server.Services/LANCommander.Server.Services.csproj +++ b/LANCommander.Server.Services/LANCommander.Server.Services.csproj @@ -29,6 +29,7 @@ + diff --git a/LANCommander.Server.Services/LibraryService.cs b/LANCommander.Server.Services/LibraryService.cs index f436a70e..e2248732 100644 --- a/LANCommander.Server.Services/LibraryService.cs +++ b/LANCommander.Server.Services/LibraryService.cs @@ -1,4 +1,5 @@ -using LANCommander.Server.Data; +using System.Configuration; +using LANCommander.Server.Data; using LANCommander.Server.Data.Models; using Microsoft.Extensions.Logging; using AutoMapper; @@ -11,12 +12,13 @@ namespace LANCommander.Server.Services { public sealed class LibraryService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, IDbContextFactory contextFactory, GameService gameService, - UserService userService) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + UserService userService) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(Library entity) { diff --git a/LANCommander.Server.Services/Mappers/MappingProfile.cs b/LANCommander.Server.Services/Mappers/MappingProfile.cs index 72306f71..17c92d60 100644 --- a/LANCommander.Server.Services/Mappers/MappingProfile.cs +++ b/LANCommander.Server.Services/Mappers/MappingProfile.cs @@ -53,7 +53,7 @@ namespace LANCommander.Server dest.Cover, opt => opt.MapFrom(src => src.Media.Where(m => m.Type == SDK.Enums.MediaType.Cover).FirstOrDefault())); - CreateMap(); + CreateMap(); CreateMap() .ForMember(dest => dest.Name, diff --git a/LANCommander.Server.Services/MediaGrabbers/SteamGridDBMediaGrabber.cs b/LANCommander.Server.Services/MediaGrabbers/SteamGridDBMediaGrabber.cs index 82788610..9d2fc82c 100644 --- a/LANCommander.Server.Services/MediaGrabbers/SteamGridDBMediaGrabber.cs +++ b/LANCommander.Server.Services/MediaGrabbers/SteamGridDBMediaGrabber.cs @@ -20,11 +20,9 @@ namespace LANCommander.Server.Services.MediaGrabbers SteamGridDbFormats.Webp }; - public SteamGridDBMediaGrabber() + public SteamGridDBMediaGrabber(SettingsProvider settingsProvider) { - var settings = SettingService.GetSettings(); - - SteamGridDb = new SteamGridDb(settings.Media.SteamGridDbApiKey); + SteamGridDb = new SteamGridDb(settingsProvider.CurrentValue.Server.Media.SteamGridDbApiKey); SteamClient = new SteamClient(); } diff --git a/LANCommander.Server.Services/MediaService.cs b/LANCommander.Server.Services/MediaService.cs index bcace099..2c4f0362 100644 --- a/LANCommander.Server.Services/MediaService.cs +++ b/LANCommander.Server.Services/MediaService.cs @@ -1,4 +1,5 @@ -using LANCommander.Server.Data; +using System.Configuration; +using LANCommander.Server.Data; using LANCommander.Server.Data.Models; using LANCommander.Helpers; using Syncfusion.PdfToImageConverter; @@ -20,11 +21,12 @@ namespace LANCommander.Server.Services { public sealed class MediaService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, IDbContextFactory contextFactory, - StorageLocationService storageLocationService) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + StorageLocationService storageLocationService) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(Media entity) { @@ -118,7 +120,7 @@ namespace LANCommander.Server.Services public string GetThumbnailPath(Media media) { - var config = _settings.Media.GetMediaTypeConfig(media.Type); + var config = _settingsProvider.CurrentValue.Server.Media.GetMediaTypeConfig(media.Type); if (config != null && config.Thumbnails.Enabled) return $"{GetMediaPath(media)}.Thumb"; @@ -175,7 +177,7 @@ namespace LANCommander.Server.Services if (!File.Exists(source)) return String.Empty; - var config = _settings.Media.GetMediaTypeConfig(media.Type); + var config = _settingsProvider.CurrentValue.Server.Media.GetMediaTypeConfig(media.Type); Stream stream = null; diff --git a/LANCommander.Server.Services/MultiplayerModeService.cs b/LANCommander.Server.Services/MultiplayerModeService.cs index 40605461..c8552b6c 100644 --- a/LANCommander.Server.Services/MultiplayerModeService.cs +++ b/LANCommander.Server.Services/MultiplayerModeService.cs @@ -10,10 +10,11 @@ namespace LANCommander.Server.Services { public sealed class MultiplayerModeService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + IDbContextFactory contextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(MultiplayerMode entity) { diff --git a/LANCommander.Server.Services/PageService.cs b/LANCommander.Server.Services/PageService.cs index a2745c93..206bd417 100644 --- a/LANCommander.Server.Services/PageService.cs +++ b/LANCommander.Server.Services/PageService.cs @@ -15,10 +15,11 @@ namespace LANCommander.Server.Services { public sealed class PageService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + IDbContextFactory contextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(Page entity) { diff --git a/LANCommander.Server.Services/PlatformService.cs b/LANCommander.Server.Services/PlatformService.cs index da7c4d45..6e7e90c3 100644 --- a/LANCommander.Server.Services/PlatformService.cs +++ b/LANCommander.Server.Services/PlatformService.cs @@ -10,10 +10,11 @@ namespace LANCommander.Server.Services { public sealed class PlatformService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + IDbContextFactory contextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(Platform entity) { diff --git a/LANCommander.Server.Services/PlaySessionService.cs b/LANCommander.Server.Services/PlaySessionService.cs index 4229eceb..4cabeee6 100644 --- a/LANCommander.Server.Services/PlaySessionService.cs +++ b/LANCommander.Server.Services/PlaySessionService.cs @@ -11,11 +11,12 @@ namespace LANCommander.Server.Services { public sealed class PlaySessionService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, IDbContextFactory contextFactory, - ServerService serverService) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + ServerService serverService) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(PlaySession entity) { diff --git a/LANCommander.Server.Services/RedistributableService.cs b/LANCommander.Server.Services/RedistributableService.cs index 810d11c3..7c94f237 100644 --- a/LANCommander.Server.Services/RedistributableService.cs +++ b/LANCommander.Server.Services/RedistributableService.cs @@ -11,10 +11,11 @@ namespace LANCommander.Server.Services { public sealed class RedistributableService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + IDbContextFactory contextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(Redistributable entity) { diff --git a/LANCommander.Server.Services/RoleService.cs b/LANCommander.Server.Services/RoleService.cs index 8f36f666..b824d9c2 100644 --- a/LANCommander.Server.Services/RoleService.cs +++ b/LANCommander.Server.Services/RoleService.cs @@ -14,13 +14,14 @@ namespace LANCommander.Server.Services { public sealed class RoleService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, IDbContextFactory contextFactory, CollectionService collectionService, IdentityContextFactory identityContextFactory, - RoleManager roleManager) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + RoleManager roleManager) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public const string AdministratorRoleName = "Administrator"; diff --git a/LANCommander.Server.Services/SavePathService.cs b/LANCommander.Server.Services/SavePathService.cs index 33069b57..7d9f652b 100644 --- a/LANCommander.Server.Services/SavePathService.cs +++ b/LANCommander.Server.Services/SavePathService.cs @@ -10,10 +10,11 @@ namespace LANCommander.Server.Services { public sealed class SavePathService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService(logger, cache, mapper, httpContextAccessor, contextFactory) + IDbContextFactory contextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public override async Task AddAsync(SavePath entity) { diff --git a/LANCommander.Server.Services/ScriptService.cs b/LANCommander.Server.Services/ScriptService.cs index 59abfdfc..99272d3c 100644 --- a/LANCommander.Server.Services/ScriptService.cs +++ b/LANCommander.Server.Services/ScriptService.cs @@ -13,10 +13,11 @@ namespace LANCommander.Server.Services { public sealed class ScriptService( ILogger logger, + SettingsProvider settingsProvider, IFusionCache cache, IMapper mapper, IHttpContextAccessor httpContextAccessor, - IDbContextFactory contextFactory) : BaseDatabaseService @@ -77,7 +61,7 @@ @code { protected override async Task OnInitializedAsync() { - if (DatabaseContext.Provider == Data.Enums.DatabaseProvider.Unknown && !NavigationManager.Uri.Contains("/FirstTimeSetup")) + if (DatabaseContext.Provider == DatabaseProvider.Unknown && !NavigationManager.Uri.Contains("/FirstTimeSetup")) { NavigationManager.NavigateTo("/FirstTimeSetup", true); } diff --git a/LANCommander.Server/UI/Components/ArchiveUploader.razor b/LANCommander.Server/UI/Components/ArchiveUploader.razor index e882c4af..734d7d1e 100644 --- a/LANCommander.Server/UI/Components/ArchiveUploader.razor +++ b/LANCommander.Server/UI/Components/ArchiveUploader.razor @@ -2,8 +2,7 @@ @using LANCommander.SDK.Enums @using LANCommander.Server.Jobs.Background; @inject ArchiveClient ArchiveClient -@inject HttpClient HttpClient -@inject NavigationManager Navigator +@inject SettingsProvider SettingsProvider @inject IMessageService MessageService @inject IJSRuntime JS @inject ILogger Logger @@ -134,16 +133,14 @@ Archive? lastArchive = null; - var settings = SettingService.GetSettings(); - - if (settings.Archives.EnablePatching) + if (SettingsProvider.CurrentValue.Server.Archives.EnablePatching) { if (Archive.GameId != Guid.Empty) lastArchive = await ArchiveClient.GetLatestArchive(a => a.Id != Archive.Id && a.GameId == Archive.GameId); else if (Archive.RedistributableId != Guid.Empty) lastArchive = await ArchiveClient.GetLatestArchive(a => a.Id != Archive.Id && a.RedistributableId == Archive.RedistributableId); - if (lastArchive != null && settings.Archives.EnablePatching) + if (lastArchive != null && SettingsProvider.CurrentValue.Server.Archives.EnablePatching) BackgroundJob.Enqueue(x => x.Execute(lastArchive.Id, Archive.Id)); } diff --git a/LANCommander.Server/UI/Components/AvatarUploader.razor b/LANCommander.Server/UI/Components/AvatarUploader.razor index fce0ea2a..36c4116e 100644 --- a/LANCommander.Server/UI/Components/AvatarUploader.razor +++ b/LANCommander.Server/UI/Components/AvatarUploader.razor @@ -2,6 +2,7 @@ @inherits OwningComponentBase @inject UserService UserService @inject MediaService MediaService +@inject SettingsProvider SettingsProvider @inject IMessageService MessageService