diff --git a/BTCPayServer/Controllers/ServerController.cs b/BTCPayServer/Controllers/ServerController.cs index 649e8fd2c..ab7860078 100644 --- a/BTCPayServer/Controllers/ServerController.cs +++ b/BTCPayServer/Controllers/ServerController.cs @@ -1,4 +1,5 @@ -using BTCPayServer.Models; +using BTCPayServer.HostedServices; +using BTCPayServer.Models; using BTCPayServer.Models.ServerViewModels; using BTCPayServer.Services; using BTCPayServer.Services.Mails; @@ -21,11 +22,13 @@ namespace BTCPayServer.Controllers { private UserManager _UserManager; SettingsRepository _SettingsRepository; + private CssThemeManager _CssThemeManager; - public ServerController(UserManager userManager, SettingsRepository settingsRepository) + public ServerController(UserManager userManager, SettingsRepository settingsRepository, CssThemeManager cssThemeManager) { _UserManager = userManager; _SettingsRepository = settingsRepository; + _CssThemeManager = cssThemeManager; } [Route("server/users")] @@ -138,6 +141,9 @@ namespace BTCPayServer.Controllers public async Task Policies(PoliciesSettings settings) { await _SettingsRepository.UpdateSetting(settings); + // TODO: remove controller/class-level property and have only reference to + // CssThemeManager here in this method + _CssThemeManager.Update(settings.CustomBootstrapThemeCssUri); TempData["StatusMessage"] = "Policies upadated successfully"; return View(settings); } diff --git a/BTCPayServer/HostedServices/CssThemeManager.cs b/BTCPayServer/HostedServices/CssThemeManager.cs new file mode 100644 index 000000000..570d5aea3 --- /dev/null +++ b/BTCPayServer/HostedServices/CssThemeManager.cs @@ -0,0 +1,44 @@ +using System; +using Microsoft.Extensions.Logging; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using BTCPayServer.Logging; +using Microsoft.Extensions.Hosting; +using NBXplorer; +using NBXplorer.Models; +using System.Collections.Concurrent; +using BTCPayServer.Events; +using BTCPayServer.Services; + +namespace BTCPayServer.HostedServices +{ + public class CssThemeManager + { + public CssThemeManager(SettingsRepository settingsRepository) + { + Update(settingsRepository); + } + + private string _bootstrapThemeUri; + public string BootstrapThemeUri + { + get { return _bootstrapThemeUri; } + } + + private async void Update(SettingsRepository settingsRepository) + { + var data = (await settingsRepository.GetSettingAsync()) ?? new PoliciesSettings(); + Update(data.CustomBootstrapThemeCssUri); + } + + public void Update(string newUri) + { + if (String.IsNullOrWhiteSpace(newUri)) + _bootstrapThemeUri = "/vendor/bootstrap4/css/bootstrap.css"; + else + _bootstrapThemeUri = newUri; + } + } +} diff --git a/BTCPayServer/Hosting/BTCPayServerServices.cs b/BTCPayServer/Hosting/BTCPayServerServices.cs index 8441f9562..633a2935e 100644 --- a/BTCPayServer/Hosting/BTCPayServerServices.cs +++ b/BTCPayServer/Hosting/BTCPayServerServices.cs @@ -136,6 +136,7 @@ namespace BTCPayServer.Hosting services.TryAddSingleton(); services.TryAddSingleton(); + services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); diff --git a/BTCPayServer/Views/Shared/_Layout.cshtml b/BTCPayServer/Views/Shared/_Layout.cshtml index eae6d48cc..8e3daba74 100644 --- a/BTCPayServer/Views/Shared/_Layout.cshtml +++ b/BTCPayServer/Views/Shared/_Layout.cshtml @@ -3,6 +3,7 @@ @inject RoleManager RoleManager @inject BTCPayServer.Services.BTCPayServerEnvironment env @inject BTCPayServer.HostedServices.NBXplorerDashboard dashboard +@inject BTCPayServer.HostedServices.CssThemeManager themeManager @addTagHelper *, Meziantou.AspNetCore.BundleTagHelpers @@ -17,10 +18,9 @@ BTCPay Server @* CSS *@ + - - @* JS *@ @@ -50,25 +50,25 @@ diff --git a/BTCPayServer/bundleconfig.json b/BTCPayServer/bundleconfig.json index ed1df25a9..8e45601a3 100644 --- a/BTCPayServer/bundleconfig.json +++ b/BTCPayServer/bundleconfig.json @@ -2,7 +2,6 @@ { "outputFileName": "wwwroot/bundles/main-bundle.min.css", "inputFiles": [ - "wwwroot/vendor/bootstrap4/css/bootstrap.css", "wwwroot/vendor/magnific-popup/magnific-popup.css", "wwwroot/vendor/font-awesome/css/font-awesome.css", "wwwroot/main/**/*.css",