mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-19 06:54:19 +01:00
Fix other DDOS related to GetRate
This commit is contained in:
@@ -46,21 +46,13 @@ namespace BTCPayServer.Controllers
|
|||||||
err.StatusCode = 404;
|
err.StatusCode = 404;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
var currencypairs = "";
|
|
||||||
var supportedMethods = store.GetSupportedPaymentMethods(_NetworkProvider);
|
var supportedMethods = store.GetSupportedPaymentMethods(_NetworkProvider);
|
||||||
|
|
||||||
var currencyCodes = supportedMethods.Where(method => !string.IsNullOrEmpty(method.PaymentId.CryptoCode))
|
var currencyCodes = supportedMethods.Where(method => !string.IsNullOrEmpty(method.PaymentId.CryptoCode))
|
||||||
.Select(method => method.PaymentId.CryptoCode).Distinct();
|
.Select(method => method.PaymentId.CryptoCode).Distinct();
|
||||||
|
|
||||||
|
var currencypairs = BuildCurrencyPairs(currencyCodes, baseCurrency);
|
||||||
foreach (var currencyCode in currencyCodes)
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrEmpty(currencypairs))
|
|
||||||
{
|
|
||||||
currencypairs += ",";
|
|
||||||
}
|
|
||||||
currencypairs += baseCurrency + "_ " + currencyCode;
|
|
||||||
}
|
|
||||||
var result = await GetRates2(currencypairs, store.Id);
|
var result = await GetRates2(currencypairs, store.Id);
|
||||||
var rates = (result as JsonResult)?.Value as Rate[];
|
var rates = (result as JsonResult)?.Value as Rate[];
|
||||||
if (rates == null)
|
if (rates == null)
|
||||||
@@ -118,21 +110,11 @@ namespace BTCPayServer.Controllers
|
|||||||
|
|
||||||
if (currencyPairs == null)
|
if (currencyPairs == null)
|
||||||
{
|
{
|
||||||
currencyPairs = "";
|
|
||||||
var supportedMethods = store.GetSupportedPaymentMethods(_NetworkProvider);
|
var supportedMethods = store.GetSupportedPaymentMethods(_NetworkProvider);
|
||||||
var currencyCodes = supportedMethods.Select(method => method.PaymentId.CryptoCode).Distinct();
|
var currencyCodes = supportedMethods.Select(method => method.PaymentId.CryptoCode).Distinct();
|
||||||
var defaultCrypto = store.GetDefaultCrypto(_NetworkProvider);
|
var defaultCrypto = store.GetDefaultCrypto(_NetworkProvider);
|
||||||
|
|
||||||
StringBuilder currencyPairsBuilder = new StringBuilder();
|
currencyPairs = BuildCurrencyPairs(currencyCodes, defaultCrypto);
|
||||||
foreach (var currencyCode in currencyCodes)
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrEmpty(currencyPairs))
|
|
||||||
{
|
|
||||||
currencyPairsBuilder.Append(",");
|
|
||||||
}
|
|
||||||
currencyPairsBuilder.Append($"{defaultCrypto}_{currencyCode}");
|
|
||||||
}
|
|
||||||
currencyPairs = currencyPairsBuilder.ToString();
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(currencyPairs))
|
if (string.IsNullOrEmpty(currencyPairs))
|
||||||
{
|
{
|
||||||
@@ -174,6 +156,19 @@ namespace BTCPayServer.Controllers
|
|||||||
}).Where(n => n.Name != null).ToArray());
|
}).Where(n => n.Name != null).ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string BuildCurrencyPairs(IEnumerable<string> currencyCodes, string baseCrypto)
|
||||||
|
{
|
||||||
|
StringBuilder currencyPairsBuilder = new StringBuilder();
|
||||||
|
bool first = true;
|
||||||
|
foreach (var currencyCode in currencyCodes)
|
||||||
|
{
|
||||||
|
if(!first)
|
||||||
|
currencyPairsBuilder.Append(",");
|
||||||
|
currencyPairsBuilder.Append($"{baseCrypto}_{currencyCode}");
|
||||||
|
}
|
||||||
|
return currencyPairsBuilder.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
public class Rate
|
public class Rate
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user