diff --git a/BTCPayServer/Controllers/InvoiceController.UI.cs b/BTCPayServer/Controllers/InvoiceController.UI.cs index 369165e01..4fb199d07 100644 --- a/BTCPayServer/Controllers/InvoiceController.UI.cs +++ b/BTCPayServer/Controllers/InvoiceController.UI.cs @@ -374,7 +374,7 @@ namespace BTCPayServer.Controllers model.Invoices.Add(new InvoiceModel() { Status = invoice.Status, - Date = Prettify(invoice.InvoiceTime), + Date = (DateTimeOffset.UtcNow - invoice.InvoiceTime).Prettify() + " ago", InvoiceId = invoice.Id, OrderId = invoice.OrderId ?? string.Empty, RedirectUrl = invoice.RedirectURL ?? string.Empty, @@ -387,30 +387,6 @@ namespace BTCPayServer.Controllers return View(model); } - private string Prettify(DateTimeOffset invoiceTime) - { - var ago = DateTime.UtcNow - invoiceTime; - - if (ago.TotalMinutes < 1) - { - return $"{(int)ago.TotalSeconds} second{Plural((int)ago.TotalSeconds)} ago"; - } - if (ago.TotalHours < 1) - { - return $"{(int)ago.TotalMinutes} minute{Plural((int)ago.TotalMinutes)} ago"; - } - if (ago.Days < 1) - { - return $"{(int)ago.TotalHours} hour{Plural((int)ago.TotalHours)} ago"; - } - return $"{(int)ago.TotalDays} day{Plural((int)ago.TotalDays)} ago"; - } - - private string Plural(int totalDays) - { - return totalDays > 1 ? "s" : string.Empty; - } - [HttpGet] [Route("invoices/create")] [Authorize(AuthenticationSchemes = "Identity.Application")] diff --git a/BTCPayServer/Controllers/ServerController.cs b/BTCPayServer/Controllers/ServerController.cs index 8a3214f05..b13839ab7 100644 --- a/BTCPayServer/Controllers/ServerController.cs +++ b/BTCPayServer/Controllers/ServerController.cs @@ -132,6 +132,7 @@ namespace BTCPayServer.Controllers var roles = await _UserManager.GetRolesAsync(user); var userVM = new UserViewModel(); userVM.Id = user.Id; + userVM.Email = user.Email; userVM.IsAdmin = IsAdmin(roles); return View(userVM); } @@ -216,12 +217,27 @@ namespace BTCPayServer.Controllers [Route("server/policies")] [HttpPost] public async Task Policies(PoliciesSettings settings) + { + await _SettingsRepository.UpdateSetting(settings); + TempData["StatusMessage"] = "Policies updated successfully"; + return View(settings); + } + + [Route("server/theme")] + public async Task Theme() + { + var data = (await _SettingsRepository.GetSettingAsync()) ?? new ThemeSettings(); + return View(data); + } + [Route("server/theme")] + [HttpPost] + public async Task Theme(ThemeSettings settings) { await _SettingsRepository.UpdateSetting(settings); // TODO: remove controller/class-level property and have only reference to // CssThemeManager here in this method _CssThemeManager.Update(settings); - TempData["StatusMessage"] = "Policies upadated successfully"; + TempData["StatusMessage"] = "Theme settings updated successfully"; return View(settings); } diff --git a/BTCPayServer/Extensions.cs b/BTCPayServer/Extensions.cs index 40fe847e5..1746562ea 100644 --- a/BTCPayServer/Extensions.cs +++ b/BTCPayServer/Extensions.cs @@ -34,6 +34,28 @@ namespace BTCPayServer { public static class Extensions { + public static string Prettify(this TimeSpan timeSpan) + { + if (timeSpan.TotalMinutes < 1) + { + return $"{(int)timeSpan.TotalSeconds} second{Plural((int)timeSpan.TotalSeconds)}"; + } + if (timeSpan.TotalHours < 1) + { + return $"{(int)timeSpan.TotalMinutes} minute{Plural((int)timeSpan.TotalMinutes)}"; + } + if (timeSpan.Days < 1) + { + return $"{(int)timeSpan.TotalHours} hour{Plural((int)timeSpan.TotalHours)}"; + } + return $"{(int)timeSpan.TotalDays} day{Plural((int)timeSpan.TotalDays)}"; + } + + private static string Plural(int totalDays) + { + return totalDays > 1 ? "s" : string.Empty; + } + public static string PrettyPrint(this TimeSpan expiration) { StringBuilder builder = new StringBuilder(); diff --git a/BTCPayServer/HostedServices/CssThemeManager.cs b/BTCPayServer/HostedServices/CssThemeManager.cs index bb873f174..09f733d44 100644 --- a/BTCPayServer/HostedServices/CssThemeManager.cs +++ b/BTCPayServer/HostedServices/CssThemeManager.cs @@ -23,17 +23,17 @@ namespace BTCPayServer.HostedServices private async void Update(SettingsRepository settingsRepository) { - var data = (await settingsRepository.GetSettingAsync()) ?? new PoliciesSettings(); + var data = (await settingsRepository.GetSettingAsync()) ?? new ThemeSettings(); Update(data); } - public void Update(PoliciesSettings data) + public void Update(ThemeSettings data) { UpdateBootstrap(data.BootstrapCssUri); UpdateCreativeStart(data.CreativeStartCssUri); } - private string _bootstrapUri; + private string _bootstrapUri = "/vendor/bootstrap4/css/bootstrap.css?v=" + DateTime.Now.Ticks; public string BootstrapUri { get { return _bootstrapUri; } @@ -41,12 +41,12 @@ namespace BTCPayServer.HostedServices public void UpdateBootstrap(string newUri) { if (String.IsNullOrWhiteSpace(newUri)) - _bootstrapUri = "/vendor/bootstrap4/css/bootstrap.css"; + _bootstrapUri = "/vendor/bootstrap4/css/bootstrap.css?v="+ DateTime.Now.Ticks; else _bootstrapUri = newUri; } - private string _creativeStartUri; + private string _creativeStartUri = "/vendor/bootstrap4-creativestart/creative.css?v=" + DateTime.Now.Ticks; public string CreativeStartUri { get { return _creativeStartUri; } @@ -54,7 +54,7 @@ namespace BTCPayServer.HostedServices public void UpdateCreativeStart(string newUri) { if (String.IsNullOrWhiteSpace(newUri)) - _creativeStartUri = "/vendor/bootstrap4-creativestart/creative.css"; + _creativeStartUri = "/vendor/bootstrap4-creativestart/creative.css?v=" + DateTime.Now.Ticks; else _creativeStartUri = newUri; } diff --git a/BTCPayServer/Services/PoliciesSettings.cs b/BTCPayServer/Services/PoliciesSettings.cs index 9073e3d26..431e902eb 100644 --- a/BTCPayServer/Services/PoliciesSettings.cs +++ b/BTCPayServer/Services/PoliciesSettings.cs @@ -15,11 +15,5 @@ namespace BTCPayServer.Services [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)] public bool LockSubscription { get; set; } - - [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)] - public string BootstrapCssUri { get; set; } - - [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)] - public string CreativeStartCssUri { get; set; } } } diff --git a/BTCPayServer/Services/Rates/CoinAverageRateProvider.cs b/BTCPayServer/Services/Rates/CoinAverageRateProvider.cs index ebaa5bde0..6ec20b634 100644 --- a/BTCPayServer/Services/Rates/CoinAverageRateProvider.cs +++ b/BTCPayServer/Services/Rates/CoinAverageRateProvider.cs @@ -183,7 +183,21 @@ namespace BTCPayServer.Services.Rates var jobj = JObject.Parse(await resp.Content.ReadAsStringAsync()); var response = new GetRateLimitsResponse(); response.CounterReset = TimeSpan.FromSeconds(jobj["counter_reset"].Value()); + var totalPeriod = jobj["total_period"].Value(); + if (totalPeriod == "24h") + { + response.TotalPeriod = TimeSpan.FromHours(24); + } + else if (totalPeriod == "30d") + { + response.TotalPeriod = TimeSpan.FromDays(30); + } + else + { + response.TotalPeriod = TimeSpan.FromSeconds(jobj["total_period"].Value()); + } response.RequestsLeft = jobj["requests_left"].Value(); + response.RequestsPerPeriod = jobj["requests_per_period"].Value(); return response; } @@ -213,5 +227,7 @@ namespace BTCPayServer.Services.Rates { public TimeSpan CounterReset { get; set; } public int RequestsLeft { get; set; } + public int RequestsPerPeriod { get; set; } + public TimeSpan TotalPeriod { get; set; } } } diff --git a/BTCPayServer/Services/ThemesSettings.cs b/BTCPayServer/Services/ThemesSettings.cs new file mode 100644 index 000000000..a13787e71 --- /dev/null +++ b/BTCPayServer/Services/ThemesSettings.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Newtonsoft.Json; + +namespace BTCPayServer.Services +{ + public class ThemeSettings + { + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)] + public string BootstrapCssUri { get; set; } + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)] + public string CreativeStartCssUri { get; set; } + } +} diff --git a/BTCPayServer/Views/Invoice/Invoice.cshtml b/BTCPayServer/Views/Invoice/Invoice.cshtml index 25e52b522..1fecc4b14 100644 --- a/BTCPayServer/Views/Invoice/Invoice.cshtml +++ b/BTCPayServer/Views/Invoice/Invoice.cshtml @@ -22,7 +22,6 @@

@ViewData["Title"]


-

Invoice details

diff --git a/BTCPayServer/Views/Manage/ChangePassword.cshtml b/BTCPayServer/Views/Manage/ChangePassword.cshtml index 4cb15dbda..8c3a4dcef 100644 --- a/BTCPayServer/Views/Manage/ChangePassword.cshtml +++ b/BTCPayServer/Views/Manage/ChangePassword.cshtml @@ -1,7 +1,6 @@ @model ChangePasswordViewModel @{ - ViewData["Title"] = "Change password"; - ViewData.AddActivePage(ManageNavPages.ChangePassword); + ViewData.SetActivePageAndTitle(ManageNavPages.ChangePassword, "Change password"); }

@ViewData["Title"]

diff --git a/BTCPayServer/Views/Manage/Disable2fa.cshtml b/BTCPayServer/Views/Manage/Disable2fa.cshtml index 5c6d4e240..52963342d 100644 --- a/BTCPayServer/Views/Manage/Disable2fa.cshtml +++ b/BTCPayServer/Views/Manage/Disable2fa.cshtml @@ -1,6 +1,5 @@ @{ - ViewData["Title"] = "Disable two-factor authentication (2FA)"; - ViewData.AddActivePage(ManageNavPages.TwoFactorAuthentication); + ViewData.SetActivePageAndTitle(ManageNavPages.TwoFactorAuthentication, "Disable two-factor authentication (2FA)"); }

@ViewData["Title"]

diff --git a/BTCPayServer/Views/Manage/EnableAuthenticator.cshtml b/BTCPayServer/Views/Manage/EnableAuthenticator.cshtml index 3da7075ba..ab0187380 100644 --- a/BTCPayServer/Views/Manage/EnableAuthenticator.cshtml +++ b/BTCPayServer/Views/Manage/EnableAuthenticator.cshtml @@ -1,7 +1,6 @@ @model EnableAuthenticatorViewModel @{ - ViewData["Title"] = "Enable authenticator"; - ViewData.AddActivePage(ManageNavPages.TwoFactorAuthentication); + ViewData.SetActivePageAndTitle(ManageNavPages.TwoFactorAuthentication, "Enable authenticator"); }

@ViewData["Title"]

diff --git a/BTCPayServer/Views/Manage/ExternalLogins.cshtml b/BTCPayServer/Views/Manage/ExternalLogins.cshtml index 39fc54b9c..488f7542f 100644 --- a/BTCPayServer/Views/Manage/ExternalLogins.cshtml +++ b/BTCPayServer/Views/Manage/ExternalLogins.cshtml @@ -1,7 +1,6 @@ @model ExternalLoginsViewModel @{ - ViewData["Title"] = "Manage your external logins"; - ViewData.AddActivePage(ManageNavPages.ExternalLogins); + ViewData.SetActivePageAndTitle(ManageNavPages.ExternalLogins, "Manage your external logins"); } @Html.Partial("_StatusMessage", Model.StatusMessage) diff --git a/BTCPayServer/Views/Manage/GenerateRecoveryCodes.cshtml b/BTCPayServer/Views/Manage/GenerateRecoveryCodes.cshtml index 534fef4f7..7041dca04 100644 --- a/BTCPayServer/Views/Manage/GenerateRecoveryCodes.cshtml +++ b/BTCPayServer/Views/Manage/GenerateRecoveryCodes.cshtml @@ -1,7 +1,6 @@ @model GenerateRecoveryCodesViewModel @{ - ViewData["Title"] = "Recovery codes"; - ViewData.AddActivePage(ManageNavPages.TwoFactorAuthentication); + ViewData.SetActivePageAndTitle(ManageNavPages.TwoFactorAuthentication, "Recovery codes"); }

@ViewData["Title"]

diff --git a/BTCPayServer/Views/Manage/Index.cshtml b/BTCPayServer/Views/Manage/Index.cshtml index 62a46c999..c94ed5b22 100644 --- a/BTCPayServer/Views/Manage/Index.cshtml +++ b/BTCPayServer/Views/Manage/Index.cshtml @@ -1,7 +1,6 @@ @model IndexViewModel @{ - ViewData["Title"] = "Profile"; - ViewData.AddActivePage(ManageNavPages.Index); + ViewData.SetActivePageAndTitle(ManageNavPages.Index, "Profile"); }

@ViewData["Title"]

diff --git a/BTCPayServer/Views/Manage/ManageNavPages.cs b/BTCPayServer/Views/Manage/ManageNavPages.cs index ce3bf2a39..b1fd60d2f 100644 --- a/BTCPayServer/Views/Manage/ManageNavPages.cs +++ b/BTCPayServer/Views/Manage/ManageNavPages.cs @@ -2,41 +2,11 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc.Rendering; -using Microsoft.AspNetCore.Mvc.ViewFeatures; namespace BTCPayServer.Views.Manage { - public static class ManageNavPages + public enum ManageNavPages { - public static string ActivePageKey => "ActivePage"; - - public static string Index => "Index"; - - public static string ChangePassword => "ChangePassword"; - - public static string ExternalLogins => "ExternalLogins"; - - public static string TwoFactorAuthentication => "TwoFactorAuthentication"; - - public static string Tokens => "Tokens"; - - public static string TokensNavClass(ViewContext viewContext) => PageNavClass(viewContext, Tokens); - - public static string IndexNavClass(ViewContext viewContext) => PageNavClass(viewContext, Index); - - public static string ChangePasswordNavClass(ViewContext viewContext) => PageNavClass(viewContext, ChangePassword); - - public static string ExternalLoginsNavClass(ViewContext viewContext) => PageNavClass(viewContext, ExternalLogins); - - public static string TwoFactorAuthenticationNavClass(ViewContext viewContext) => PageNavClass(viewContext, TwoFactorAuthentication); - - public static string PageNavClass(ViewContext viewContext, string page) - { - var activePage = viewContext.ViewData["ActivePage"] as string; - return string.Equals(activePage, page, StringComparison.OrdinalIgnoreCase) ? "active" : null; - } - - public static void AddActivePage(this ViewDataDictionary viewData, string activePage) => viewData[ActivePageKey] = activePage; + Index, ChangePassword, ExternalLogins, TwoFactorAuthentication, Tokens } } diff --git a/BTCPayServer/Views/Manage/ResetAuthenticator.cshtml b/BTCPayServer/Views/Manage/ResetAuthenticator.cshtml index 8518a1ca2..fd0fd5e01 100644 --- a/BTCPayServer/Views/Manage/ResetAuthenticator.cshtml +++ b/BTCPayServer/Views/Manage/ResetAuthenticator.cshtml @@ -1,6 +1,5 @@ @{ - ViewData["Title"] = "Reset authenticator key"; - ViewData.AddActivePage(ManageNavPages.TwoFactorAuthentication); + ViewData.SetActivePageAndTitle(ManageNavPages.TwoFactorAuthentication, "Reset authenticator key"); }

@ViewData["Title"]

diff --git a/BTCPayServer/Views/Manage/SetPassword.cshtml b/BTCPayServer/Views/Manage/SetPassword.cshtml index 02f99df15..6cd28ef16 100644 --- a/BTCPayServer/Views/Manage/SetPassword.cshtml +++ b/BTCPayServer/Views/Manage/SetPassword.cshtml @@ -1,7 +1,6 @@ @model SetPasswordViewModel @{ - ViewData["Title"] = "Set password"; - ViewData.AddActivePage(ManageNavPages.ChangePassword); + ViewData.SetActivePageAndTitle(ManageNavPages.ChangePassword, "Set password"); }

Set your password

diff --git a/BTCPayServer/Views/Manage/TwoFactorAuthentication.cshtml b/BTCPayServer/Views/Manage/TwoFactorAuthentication.cshtml index 767da9e24..f36cbfbee 100644 --- a/BTCPayServer/Views/Manage/TwoFactorAuthentication.cshtml +++ b/BTCPayServer/Views/Manage/TwoFactorAuthentication.cshtml @@ -1,7 +1,6 @@ @model TwoFactorAuthenticationViewModel @{ - ViewData["Title"] = "Two-factor authentication"; - ViewData.AddActivePage(ManageNavPages.TwoFactorAuthentication); + ViewData.SetActivePageAndTitle(ManageNavPages.TwoFactorAuthentication, "Two-factor authentication"); }

@ViewData["Title"]

diff --git a/BTCPayServer/Views/Manage/_Nav.cshtml b/BTCPayServer/Views/Manage/_Nav.cshtml index 32c0774a1..556d9fe57 100644 --- a/BTCPayServer/Views/Manage/_Nav.cshtml +++ b/BTCPayServer/Views/Manage/_Nav.cshtml @@ -1,16 +1,15 @@ -@using BTCPayServer.Views.Manage -@inject SignInManager SignInManager +@inject SignInManager SignInManager @{ var hasExternalLogins = (await SignInManager.GetExternalAuthenticationSchemesAsync()).Any(); } diff --git a/BTCPayServer/Views/Server/Emails.cshtml b/BTCPayServer/Views/Server/Emails.cshtml index 04694abd1..f52bda25c 100644 --- a/BTCPayServer/Views/Server/Emails.cshtml +++ b/BTCPayServer/Views/Server/Emails.cshtml @@ -1,7 +1,6 @@ @model EmailsViewModel @{ - ViewData["Title"] = ServerNavPages.Emails; - ViewData.AddActivePage(ServerNavPages.Emails); + ViewData.SetActivePageAndTitle(ServerNavPages.Emails); } diff --git a/BTCPayServer/Views/Server/ListUsers.cshtml b/BTCPayServer/Views/Server/ListUsers.cshtml index 5a6fc702a..5326eefff 100644 --- a/BTCPayServer/Views/Server/ListUsers.cshtml +++ b/BTCPayServer/Views/Server/ListUsers.cshtml @@ -1,7 +1,6 @@ @model UsersViewModel @{ - ViewData["Title"] = "Users"; - ViewData.AddActivePage(ServerNavPages.Users); + ViewData.SetActivePageAndTitle(ServerNavPages.Users); } diff --git a/BTCPayServer/Views/Server/Policies.cshtml b/BTCPayServer/Views/Server/Policies.cshtml index 4c66ed20a..69767f659 100644 --- a/BTCPayServer/Views/Server/Policies.cshtml +++ b/BTCPayServer/Views/Server/Policies.cshtml @@ -1,7 +1,6 @@ @model BTCPayServer.Services.PoliciesSettings @{ - ViewData["Title"] = ServerNavPages.Policies; - ViewData.AddActivePage(ServerNavPages.Policies); + ViewData.SetActivePageAndTitle(ServerNavPages.Policies); } @@ -15,24 +14,6 @@
- -
- - - -

- Creative Start theme - is used on top of Bootstrap -

-
diff --git a/BTCPayServer/Views/Server/Rates.cshtml b/BTCPayServer/Views/Server/Rates.cshtml index 89e145778..61641a7c4 100644 --- a/BTCPayServer/Views/Server/Rates.cshtml +++ b/BTCPayServer/Views/Server/Rates.cshtml @@ -1,7 +1,6 @@ @model RatesViewModel @{ - ViewData["Title"] = ServerNavPages.Rates; - ViewData.AddActivePage(ServerNavPages.Rates); + ViewData.SetActivePageAndTitle(ServerNavPages.Rates); } @@ -40,12 +39,16 @@
Current Bitcoin Average Quotas:
- - + + + + + + - +
Requests left@Model.RateLimits.RequestsLeftQuota period@Model.RateLimits.TotalPeriod.Prettify()
Requests quota@Model.RateLimits.RequestsLeft/@Model.RateLimits.RequestsPerPeriod
Quota reset in@Model.RateLimits.CounterReset@Model.RateLimits.CounterReset.Prettify()
} diff --git a/BTCPayServer/Views/Server/ServerNavPages.cs b/BTCPayServer/Views/Server/ServerNavPages.cs index 45dfe7887..2f266c383 100644 --- a/BTCPayServer/Views/Server/ServerNavPages.cs +++ b/BTCPayServer/Views/Server/ServerNavPages.cs @@ -2,37 +2,11 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc.Rendering; -using Microsoft.AspNetCore.Mvc.ViewFeatures; namespace BTCPayServer.Views.Server { - public static class ServerNavPages + public enum ServerNavPages { - public static string ActivePageKey => "ActivePage"; - public static string Index => "Index"; - - - public static string Users => "Users"; - public static string Rates => "Rates"; - public static string Emails => "Email server"; - public static string Policies => "Policies"; - public static string Hangfire => "Hangfire"; - - public static string UsersNavClass(ViewContext viewContext) => PageNavClass(viewContext, Users); - public static string EmailsNavClass(ViewContext viewContext) => PageNavClass(viewContext, Emails); - public static string RatesNavClass(ViewContext viewContext) => PageNavClass(viewContext, Rates); - public static string PoliciesNavClass(ViewContext viewContext) => PageNavClass(viewContext, Policies); - public static string HangfireNavClass(ViewContext viewContext) => PageNavClass(viewContext, Hangfire); - - public static string IndexNavClass(ViewContext viewContext) => PageNavClass(viewContext, Index); - - public static string PageNavClass(ViewContext viewContext, string page) - { - var activePage = viewContext.ViewData["ActivePage"] as string; - return string.Equals(activePage, page, StringComparison.OrdinalIgnoreCase) ? "active" : null; - } - - public static void AddActivePage(this ViewDataDictionary viewData, string activePage) => viewData[ActivePageKey] = activePage; + Index, Users, Rates, Emails, Policies, Theme, Hangfire } } diff --git a/BTCPayServer/Views/Server/Theme.cshtml b/BTCPayServer/Views/Server/Theme.cshtml new file mode 100644 index 000000000..b9f71fae4 --- /dev/null +++ b/BTCPayServer/Views/Server/Theme.cshtml @@ -0,0 +1,43 @@ +@model BTCPayServer.Services.ThemeSettings +@{ + ViewData.SetActivePageAndTitle(ServerNavPages.Theme); +} + + +

@ViewData["Title"]

+@Html.Partial("_StatusMessage", TempData["StatusMessage"]) +
+
+
+
+
+
+
+ + +
+ + + +

+ Creative Start theme + is used on top of Bootstrap +

+
+ + + +
+
+ +@section Scripts { + @await Html.PartialAsync("_ValidationScriptsPartial") +} diff --git a/BTCPayServer/Views/Server/User.cshtml b/BTCPayServer/Views/Server/User.cshtml index 8cf3b44d4..47f4225ac 100644 --- a/BTCPayServer/Views/Server/User.cshtml +++ b/BTCPayServer/Views/Server/User.cshtml @@ -1,11 +1,10 @@ @model UserViewModel @{ - ViewData["Title"] = Model.Email; - ViewData.AddActivePage(ServerNavPages.Users); + ViewData.SetActivePageAndTitle(ServerNavPages.Users); } -

@ViewData["Title"]

+

Modify User - @Model.Email

@Html.Partial("_StatusMessage", Model.StatusMessage) diff --git a/BTCPayServer/Views/Server/_Nav.cshtml b/BTCPayServer/Views/Server/_Nav.cshtml index ed3bf77cc..6d4de07fb 100644 --- a/BTCPayServer/Views/Server/_Nav.cshtml +++ b/BTCPayServer/Views/Server/_Nav.cshtml @@ -1,10 +1,9 @@ -@using BTCPayServer.Views.Server - -