mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-03-01 00:59:15 +01:00
* Disable shapeshift and use changelly * UI to manage changelly payment method * wip on changelly api * Add in Vue component for changelly and remove target currency from payment method * add changelly merhcant id * Small fixes to get Conversion to load * wip fixing the component * fix merge conflict * fixes to UI * remove debug, fix fee calc and move changelly to own partials * Update ChangellyController.cs * move original vue setup back to checkout * Update core.js * Extracting Changelly component to js file * Proposal for loading spinner * remove zone * imrpove changelly ui * add in changelly config checks * try new method to calculate amount + remove to currency from list * abstract changelly lofgic to provider and reduce dependency on js component * Add UTs for Changelly * refactor changelly backend * fix failing UT * add shitcoin tax * pr changes * pr changes * WIP: getting rid of changelly dependency * client caching, compiling code, cleaner code * Cleaner changelly * fiat! * updat i18n, css and error styler * default keys * pr changes part 1 * part2 * fix tests * fix loader alignment and retry button responsiveness * final pr change
75 lines
2.2 KiB
C#
75 lines
2.2 KiB
C#
using System.Collections.Concurrent;
|
|
using System.Collections.Generic;
|
|
using System.Net.Http;
|
|
using BTCPayServer.Services.Stores;
|
|
using NBitcoin;
|
|
|
|
namespace BTCPayServer.Payments.Changelly
|
|
{
|
|
public class ChangellyClientProvider
|
|
{
|
|
private readonly StoreRepository _storeRepository;
|
|
private readonly IHttpClientFactory _httpClientFactory;
|
|
|
|
private readonly ConcurrentDictionary<string, Changelly> _clientCache =
|
|
new ConcurrentDictionary<string, Changelly>();
|
|
|
|
public ChangellyClientProvider(StoreRepository storeRepository, IHttpClientFactory httpClientFactory)
|
|
{
|
|
_storeRepository = storeRepository;
|
|
_httpClientFactory = httpClientFactory;
|
|
}
|
|
|
|
public void InvalidateClient(string storeId)
|
|
{
|
|
if (_clientCache.ContainsKey(storeId))
|
|
{
|
|
_clientCache.Remove(storeId, out var value);
|
|
}
|
|
}
|
|
|
|
|
|
public virtual bool TryGetChangellyClient(string storeId, out string error,
|
|
out Changelly changelly)
|
|
{
|
|
if (_clientCache.ContainsKey(storeId))
|
|
{
|
|
changelly = _clientCache[storeId];
|
|
error = null;
|
|
return true;
|
|
}
|
|
|
|
changelly = null;
|
|
|
|
|
|
var store = _storeRepository.FindStore(storeId).Result;
|
|
if (store == null)
|
|
{
|
|
error = "Store not found";
|
|
return false;
|
|
}
|
|
|
|
var blob = store.GetStoreBlob();
|
|
var changellySettings = blob.ChangellySettings;
|
|
|
|
|
|
if (changellySettings == null || !changellySettings.IsConfigured())
|
|
{
|
|
error = "Changelly not configured for this store";
|
|
return false;
|
|
}
|
|
|
|
if (!changellySettings.Enabled)
|
|
{
|
|
error = "Changelly not enabled for this store";
|
|
return false;
|
|
}
|
|
|
|
changelly = new Changelly(_httpClientFactory, changellySettings.ApiKey, changellySettings.ApiSecret,
|
|
changellySettings.ApiUrl, changellySettings.ShowFiat);
|
|
_clientCache.AddOrReplace(storeId, changelly);
|
|
error = null;
|
|
return true;
|
|
}
|
|
}
|
|
}
|