btcpayserver/BTCPayServer/Services/Altcoins/Monero/MoneroLikeExtensions.cs

73 lines
3.3 KiB
C#
Raw Normal View History

#if ALTCOINS
2019-09-30 10:32:43 +02:00
using System;
using System.Linq;
using BTCPayServer.Configuration;
using BTCPayServer.Contracts;
2020-06-28 17:55:27 +09:00
using BTCPayServer.Payments;
using BTCPayServer.Services.Altcoins.Monero.Configuration;
using BTCPayServer.Services.Altcoins.Monero.Payments;
using BTCPayServer.Services.Altcoins.Monero.Services;
2019-09-30 10:32:43 +02:00
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace BTCPayServer.Services.Altcoins.Monero
2019-09-30 10:32:43 +02:00
{
public static class MoneroLikeExtensions
{
public static IServiceCollection AddMoneroLike(this IServiceCollection serviceCollection)
{
serviceCollection.AddSingleton(provider =>
provider.ConfigureMoneroLikeConfiguration());
serviceCollection.AddSingleton<MoneroRPCProvider>();
serviceCollection.AddHostedService<MoneroLikeSummaryUpdaterHostedService>();
serviceCollection.AddHostedService<MoneroListener>();
serviceCollection.AddSingleton<MoneroLikePaymentMethodHandler>();
serviceCollection.AddSingleton<IPaymentMethodHandler>(provider => provider.GetService<MoneroLikePaymentMethodHandler>());
serviceCollection.AddSingleton<INavExtension, MoneroNavExtension>();
2020-07-28 22:48:51 +02:00
serviceCollection.AddSingleton<ISyncSummaryProvider, MoneroSyncSummaryProvider>();
2020-06-28 17:55:27 +09:00
2019-09-30 10:32:43 +02:00
return serviceCollection;
}
2020-06-28 17:55:27 +09:00
private static MoneroLikeConfiguration ConfigureMoneroLikeConfiguration(this IServiceProvider serviceProvider)
2019-09-30 10:32:43 +02:00
{
var configuration = serviceProvider.GetService<IConfiguration>();
var btcPayNetworkProvider = serviceProvider.GetService<BTCPayNetworkProvider>();
var result = new MoneroLikeConfiguration();
var supportedChains = configuration.GetOrDefault<string>("chains", string.Empty)
.Split(',', StringSplitOptions.RemoveEmptyEntries)
.Select(t => t.ToUpperInvariant());
var supportedNetworks = btcPayNetworkProvider.Filter(supportedChains.ToArray()).GetAll()
.OfType<MoneroLikeSpecificBtcPayNetwork>();
foreach (var moneroLikeSpecificBtcPayNetwork in supportedNetworks)
{
var daemonUri =
configuration.GetOrDefault<Uri>($"{moneroLikeSpecificBtcPayNetwork.CryptoCode}_daemon_uri",
null);
var walletDaemonUri =
configuration.GetOrDefault<Uri>(
$"{moneroLikeSpecificBtcPayNetwork.CryptoCode}_wallet_daemon_uri", null);
var walletDaemonWalletDirectory =
configuration.GetOrDefault<string>(
$"{moneroLikeSpecificBtcPayNetwork.CryptoCode}_wallet_daemon_walletdir", null);
2020-06-28 17:55:27 +09:00
if (daemonUri == null || walletDaemonUri == null)
2019-09-30 10:32:43 +02:00
{
throw new ConfigException($"{moneroLikeSpecificBtcPayNetwork.CryptoCode} is misconfigured");
}
2020-06-28 17:55:27 +09:00
2019-09-30 10:32:43 +02:00
result.MoneroLikeConfigurationItems.Add(moneroLikeSpecificBtcPayNetwork.CryptoCode, new MoneroLikeConfigurationItem()
{
DaemonRpcUri = daemonUri,
InternalWalletRpcUri = walletDaemonUri,
WalletDirectory = walletDaemonWalletDirectory
});
}
return result;
}
}
}
2020-07-28 22:48:51 +02:00
#endif