upd bl and add libs on build

This commit is contained in:
Kukks
2023-12-11 08:41:39 +01:00
parent a8e43e9350
commit c841c5e86b
20 changed files with 122 additions and 30 deletions

View File

@@ -8,19 +8,19 @@ using Network = NBitcoin.Network;
namespace BTCPayServer.Plugins.Blink;
public class BlinkLightningConnectionStringHandler : ILightningConnectionStringHandler
{
private readonly IHttpClientFactory _httpClientFactory;
private readonly NBXplorerDashboard _nbXplorerDashboard;
public BlinkLightningConnectionStringHandler(IHttpClientFactory httpClientFactory, NBXplorerDashboard nbXplorerDashboard)
public BlinkLightningConnectionStringHandler(IHttpClientFactory httpClientFactory,
NBXplorerDashboard nbXplorerDashboard)
{
_httpClientFactory = httpClientFactory;
_nbXplorerDashboard = nbXplorerDashboard;
}
public ILightningClient? Create(string connectionString, Network network, out string? error)
{
var kv = LightningConnectionStringHelper.ExtractValues(connectionString, out var type);
@@ -29,17 +29,20 @@ public class BlinkLightningConnectionStringHandler : ILightningConnectionStringH
error = null;
return null;
}
if (!kv.TryGetValue("server", out var server))
{
error = $"The key 'server' is mandatory for blink connection strings";
return null;
}
if (!Uri.TryCreate(server, UriKind.Absolute, out var uri)
|| uri.Scheme != "http" && uri.Scheme != "https")
{
error = "The key 'server' should be an URI starting by http:// or https://";
return null;
}
bool allowInsecure = false;
if (kv.TryGetValue("allowinsecure", out var allowinsecureStr))
{
@@ -52,40 +55,69 @@ public class BlinkLightningConnectionStringHandler : ILightningConnectionStringH
allowInsecure = allowinsecureStr.Equals("true", StringComparison.OrdinalIgnoreCase);
}
if (!LightningConnectionStringHelper.VerifySecureEndpoint(uri, allowInsecure))
{
error = "The key 'allowinsecure' is false, but server's Uri is not using https";
return null;
}
if (!kv.TryGetValue("api-key", out var apiKey))
{
error = "The key 'api-key' is not found";
return null;
}
if (!kv.TryGetValue("wallet-id", out var walletId))
{
error = "The key 'wallet-id' is not found";
return null;
}
error = null;
var client = _httpClientFactory.CreateClient();
client.DefaultRequestHeaders.Add("X-Api-Key", apiKey);
client.BaseAddress = uri;
network = Network.Main;
var bclient = new BlinkLightningClient( apiKey, uri, walletId, network, _nbXplorerDashboard, client);
var result = bclient.GetBalance().GetAwaiter().GetResult();
if (result is null)
kv.TryGetValue("wallet-id", out var walletId);
var bclient = new BlinkLightningClient(apiKey, uri, walletId, network, _nbXplorerDashboard, client);
(Network Network, string DefaultWalletId) res;
try
{
error = "Invalid credentials";
res = bclient.GetNetworkAndDefaultWallet().GetAwaiter().GetResult();
if (res.Network != network)
{
error = $"The wallet is not on the right network ({res.Network.Name} instead of {network.Name})";
return null;
}
if (walletId is null && string.IsNullOrEmpty(res.DefaultWalletId))
{
error = $"The wallet-id is not set and no default wallet is set";
return null;
}
}
catch (Exception e)
{
error = $"Invalid server or api key";
return null;
}
return bclient;
if (walletId is null)
{
bclient.WalletId = res.DefaultWalletId;
}
else
{
try
{
bclient.GetBalance().GetAwaiter().GetResult();
}
catch (Exception e)
{
error = "Invalid wallet id";
return null;
}
}
return bclient;
}
}