diff --git a/BTCPayServer/Controllers/ServerController.cs b/BTCPayServer/Controllers/ServerController.cs index 8b129d164..e0a8c8cc1 100644 --- a/BTCPayServer/Controllers/ServerController.cs +++ b/BTCPayServer/Controllers/ServerController.cs @@ -680,7 +680,7 @@ namespace BTCPayServer.Controllers return File(System.IO.File.ReadAllBytes(settings.KeyFile), "application/octet-stream", "id_rsa"); } - var server = IsLocalNetwork(settings.Server) ? this.Request.Host.Host: settings.Server; + var server = Extensions.IsLocalNetwork(settings.Server) ? this.Request.Host.Host: settings.Server; SSHServiceViewModel vm = new SSHServiceViewModel(); string port = settings.Port == 22 ? "" : $" -p {settings.Port}"; vm.CommandLine = $"ssh {settings.Username}@{server}{port}"; @@ -690,14 +690,6 @@ namespace BTCPayServer.Controllers return View(vm); } - private static bool IsLocalNetwork(string server) - { - return server.EndsWith(".internal", StringComparison.OrdinalIgnoreCase) || - server.EndsWith(".local", StringComparison.OrdinalIgnoreCase) || - server.Equals("127.0.0.1", StringComparison.OrdinalIgnoreCase) || - server.Equals("localhost", StringComparison.OrdinalIgnoreCase); - } - [Route("server/theme")] public async Task Theme() { diff --git a/BTCPayServer/Extensions.cs b/BTCPayServer/Extensions.cs index 4500286ae..91168c85f 100644 --- a/BTCPayServer/Extensions.cs +++ b/BTCPayServer/Extensions.cs @@ -166,6 +166,24 @@ namespace BTCPayServer (derivationStrategyBase is DirectDerivationStrategy direct) && direct.Segwit; } + public static bool IsLocalNetwork(string server) + { + if (server == null) + throw new ArgumentNullException(nameof(server)); + if (Uri.CheckHostName(server) == UriHostNameType.Dns) + { + return server.EndsWith(".internal", StringComparison.OrdinalIgnoreCase) || + server.EndsWith(".local", StringComparison.OrdinalIgnoreCase) || + server.EndsWith(".lan", StringComparison.OrdinalIgnoreCase) || + server.IndexOf('.', StringComparison.OrdinalIgnoreCase) == -1; + } + if(IPAddress.TryParse(server, out var ip)) + { + return ip.IsLocal(); + } + return false; + } + public static bool IsOnion(this HttpRequest request) { if (request?.Host.Host == null) diff --git a/BTCPayServer/Services/BTCPayServerEnvironment.cs b/BTCPayServer/Services/BTCPayServerEnvironment.cs index c2cd18390..df68506bf 100644 --- a/BTCPayServer/Services/BTCPayServerEnvironment.cs +++ b/BTCPayServer/Services/BTCPayServerEnvironment.cs @@ -56,6 +56,18 @@ namespace BTCPayServer.Services return NetworkType == NetworkType.Regtest && Environment.IsDevelopment(); } } + + public bool IsSecure + { + get + { + return NetworkType != NetworkType.Mainnet || + httpContext.HttpContext.Request.Scheme == "https" || + httpContext.HttpContext.Request.Host.Host.EndsWith(".onion", StringComparison.OrdinalIgnoreCase) || + Extensions.IsLocalNetwork(httpContext.HttpContext.Request.Host.Host); + } + } + public override string ToString() { StringBuilder txt = new StringBuilder(); diff --git a/BTCPayServer/Services/Rates/ExchangeSharpRateProvider.cs b/BTCPayServer/Services/Rates/ExchangeSharpRateProvider.cs index ae40e8ec9..fe96643fb 100644 --- a/BTCPayServer/Services/Rates/ExchangeSharpRateProvider.cs +++ b/BTCPayServer/Services/Rates/ExchangeSharpRateProvider.cs @@ -39,7 +39,9 @@ namespace BTCPayServer.Services.Rates lock (notFoundSymbols) { var exchangeRates = - rates.Select(t => CreateExchangeRate(t)) + rates + .Where(t => t.Value.Ask != 0m && t.Value.Bid != 0m) + .Select(t => CreateExchangeRate(t)) .Where(t => t != null) .ToArray(); return new ExchangeRates(exchangeRates); diff --git a/BTCPayServer/Services/Rates/KrakenExchangeRateProvider.cs b/BTCPayServer/Services/Rates/KrakenExchangeRateProvider.cs index 33aab5573..ac111b689 100644 --- a/BTCPayServer/Services/Rates/KrakenExchangeRateProvider.cs +++ b/BTCPayServer/Services/Rates/KrakenExchangeRateProvider.cs @@ -39,7 +39,37 @@ namespace BTCPayServer.Services.Rates static HttpClient _Client = new HttpClient(); // ExchangeSymbolToGlobalSymbol throws exception which would kill perf - ConcurrentDictionary notFoundSymbols = new ConcurrentDictionary(); + ConcurrentDictionary notFoundSymbols = new ConcurrentDictionary(new Dictionary() + { + {"ADAXBT","ADAXBT"}, + { "BSVUSD","BSVUSD"}, + { "QTUMEUR","QTUMEUR"}, + { "QTUMXBT","QTUMXBT"}, + { "EOSUSD","EOSUSD"}, + { "XTZUSD","XTZUSD"}, + { "XREPZUSD","XREPZUSD"}, + { "ADAEUR","ADAEUR"}, + { "ADAUSD","ADAUSD"}, + { "GNOEUR","GNOEUR"}, + { "XTZETH","XTZETH"}, + { "XXRPZJPY","XXRPZJPY"}, + { "XXRPZCAD","XXRPZCAD"}, + { "XTZEUR","XTZEUR"}, + { "QTUMETH","QTUMETH"}, + { "XXLMZUSD","XXLMZUSD"}, + { "QTUMCAD","QTUMCAD"}, + { "QTUMUSD","QTUMUSD"}, + { "XTZXBT","XTZXBT"}, + { "GNOUSD","GNOUSD"}, + { "ADAETH","ADAETH"}, + { "ADACAD","ADACAD"}, + { "XTZCAD","XTZCAD"}, + { "BSVEUR","BSVEUR"}, + { "XZECZJPY","XZECZJPY"}, + { "XXLMZEUR","XXLMZEUR"}, + {"EOSEUR","EOSEUR"}, + {"BSVXBT","BSVXBT"} + }); string[] _Symbols = Array.Empty(); DateTimeOffset? _LastSymbolUpdate = null; diff --git a/BTCPayServer/Views/AppsPublic/ViewPointOfSale.cshtml b/BTCPayServer/Views/AppsPublic/ViewPointOfSale.cshtml index da9a2e675..9b3fa5f29 100644 --- a/BTCPayServer/Views/AppsPublic/ViewPointOfSale.cshtml +++ b/BTCPayServer/Views/AppsPublic/ViewPointOfSale.cshtml @@ -1,4 +1,4 @@ -@addTagHelper *, BundlerMinifier.TagHelpers +@addTagHelper *, BundlerMinifier.TagHelpers @inject BTCPayServer.HostedServices.CssThemeManager themeManager @model BTCPayServer.Models.AppViewModels.ViewPointOfSaleViewModel @@ -251,7 +251,7 @@ var image = item.Image; var description = item.Description; -
+
@if (!String.IsNullOrWhiteSpace(image)) { @:Card image cap diff --git a/BTCPayServer/Views/Shared/SyncModal.cshtml b/BTCPayServer/Views/Shared/SyncModal.cshtml index dfc710b08..53973f0da 100644 --- a/BTCPayServer/Views/Shared/SyncModal.cshtml +++ b/BTCPayServer/Views/Shared/SyncModal.cshtml @@ -10,8 +10,7 @@
+
diff --git a/BTCPayServer/Views/Shared/_Layout.cshtml b/BTCPayServer/Views/Shared/_Layout.cshtml index eabe0b988..d2b23f017 100644 --- a/BTCPayServer/Views/Shared/_Layout.cshtml +++ b/BTCPayServer/Views/Shared/_Layout.cshtml @@ -85,13 +85,14 @@ } - else + else if (env.IsSecure) { if (themeManager.ShowRegister) { } - } + + } @@ -99,6 +100,14 @@ BTCPay is expecting you to access this website from @(env.ExpectedProtocol)://@(env.ExpectedHost)/. If you use a reverse proxy, please set the X-Forwarded-Proto header to @(env.ExpectedProtocol) (More information) + @if (!env.IsSecure) + { + + } diff --git a/BTCPayServer/wwwroot/cart/js/cart.jquery.js b/BTCPayServer/wwwroot/cart/js/cart.jquery.js index ed9f8705f..0eeeb6411 100644 --- a/BTCPayServer/wwwroot/cart/js/cart.jquery.js +++ b/BTCPayServer/wwwroot/cart/js/cart.jquery.js @@ -94,7 +94,7 @@ $(document).ready(function(){ $('#js-pos-list').find(".card-wrapper").show(); if (str.length > 1) { - var $list = $('#js-pos-list').find(".card-title:not(:icontains('" + str + "'))"); + var $list = $('#js-pos-list').find(".card-title:not(:icontains('" + $.escapeSelector(str) + "'))"); $list.parents('.card-wrapper').hide(); $('.js-search-reset').show(); } @@ -133,4 +133,4 @@ $(document).ready(function(){ $tip.trigger('input'); }); }); -}); \ No newline at end of file +});