mirror of
https://github.com/aljazceru/BTCPayServerPlugins.git
synced 2025-12-17 07:34:24 +01:00
micronode
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
using System;
|
||||
using BTCPayServer.Lightning;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using NBitcoin;
|
||||
|
||||
namespace BTCPayServer.Plugins.MicroNode;
|
||||
|
||||
public class MicroLightningConnectionStringHandler : ILightningConnectionStringHandler
|
||||
{
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
private readonly BTCPayNetworkProvider _networkProvider;
|
||||
|
||||
public MicroLightningConnectionStringHandler(
|
||||
IServiceProvider serviceProvider,
|
||||
BTCPayNetworkProvider networkProvider)
|
||||
{
|
||||
_serviceProvider = serviceProvider;
|
||||
_networkProvider = networkProvider;
|
||||
}
|
||||
|
||||
public ILightningClient Create(string connectionString, Network network, out string error)
|
||||
{
|
||||
var kv = LightningConnectionStringHelper.ExtractValues(connectionString, out var type);
|
||||
if (type != "micro" || kv is null)
|
||||
{
|
||||
error = null;
|
||||
return null;
|
||||
}
|
||||
|
||||
if (_networkProvider.BTC.NBitcoinNetwork != network)
|
||||
{
|
||||
error = "Invalid network";
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!kv.TryGetValue("key", out var key))
|
||||
{
|
||||
error = "key is missing";
|
||||
return null;
|
||||
}
|
||||
var microNodeService = _serviceProvider.GetService<MicroNodeService>();
|
||||
|
||||
var settings = microNodeService.GetMasterSettingsFromKey(key).GetAwaiter().GetResult();
|
||||
|
||||
if (settings is null)
|
||||
{
|
||||
error = "key is invalid";
|
||||
return null;
|
||||
}
|
||||
|
||||
if (settings.Value.Item1.Enabled is not true)
|
||||
{
|
||||
error = "MicroBank is not enabled";
|
||||
return null;
|
||||
}
|
||||
|
||||
var lightningClient = microNodeService.GetMasterLightningClient(settings.Value.Item2).GetAwaiter().GetResult();
|
||||
if (lightningClient is null)
|
||||
{
|
||||
error = "Lightning node not available";
|
||||
return null;
|
||||
}
|
||||
|
||||
error = null;
|
||||
return new MicroLightningClient(lightningClient, microNodeService, network, key);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user