diff --git a/BTCPayServer.Tests/UnitTest1.cs b/BTCPayServer.Tests/UnitTest1.cs index 5af1e4ca1..c2970273b 100644 --- a/BTCPayServer.Tests/UnitTest1.cs +++ b/BTCPayServer.Tests/UnitTest1.cs @@ -436,40 +436,40 @@ namespace BTCPayServer.Tests Assert.True(LightningConnectionString.TryParse(lndUri, out conn)); Assert.Equal("http://lnd:lnd@127.0.0.1:53280/", conn.ToString()); - Assert.Equal("http://lnd:lnd@127.0.0.1:53280/", conn.ToUri(true).AbsoluteUri); - Assert.Equal("http://127.0.0.1:53280/", conn.ToUri(false).AbsoluteUri); + Assert.Equal("http://lnd:lnd@127.0.0.1:53280/", conn.UriWithCreds.AbsoluteUri); + Assert.Equal("http://127.0.0.1:53280/", conn.UriPlain.AbsoluteUri); Assert.Equal(LightningConnectionType.Lnd, conn.ConnectionType); Assert.Equal(macaroon, conn.Macaroon); Assert.Equal(tls, conn.Tls); Assert.True(LightningConnectionString.TryParse("/test/a", out conn)); Assert.Equal("unix://test/a", conn.ToString()); - Assert.Equal("unix://test/a", conn.ToUri(true).AbsoluteUri); - Assert.Equal("unix://test/a", conn.ToUri(false).AbsoluteUri); + Assert.Equal("unix://test/a", conn.UriWithCreds.AbsoluteUri); + Assert.Equal("unix://test/a", conn.UriPlain.AbsoluteUri); Assert.Equal(LightningConnectionType.CLightning, conn.ConnectionType); Assert.True(LightningConnectionString.TryParse("unix://test/a", out conn)); Assert.Equal("unix://test/a", conn.ToString()); - Assert.Equal("unix://test/a", conn.ToUri(true).AbsoluteUri); - Assert.Equal("unix://test/a", conn.ToUri(false).AbsoluteUri); + Assert.Equal("unix://test/a", conn.UriWithCreds.AbsoluteUri); + Assert.Equal("unix://test/a", conn.UriPlain.AbsoluteUri); Assert.Equal(LightningConnectionType.CLightning, conn.ConnectionType); Assert.True(LightningConnectionString.TryParse("unix://test/a", out conn)); Assert.Equal("unix://test/a", conn.ToString()); - Assert.Equal("unix://test/a", conn.ToUri(true).AbsoluteUri); - Assert.Equal("unix://test/a", conn.ToUri(false).AbsoluteUri); + Assert.Equal("unix://test/a", conn.UriWithCreds.AbsoluteUri); + Assert.Equal("unix://test/a", conn.UriPlain.AbsoluteUri); Assert.Equal(LightningConnectionType.CLightning, conn.ConnectionType); Assert.True(LightningConnectionString.TryParse("tcp://test/a", out conn)); Assert.Equal("tcp://test/a", conn.ToString()); - Assert.Equal("tcp://test/a", conn.ToUri(true).AbsoluteUri); - Assert.Equal("tcp://test/a", conn.ToUri(false).AbsoluteUri); + Assert.Equal("tcp://test/a", conn.UriWithCreds.AbsoluteUri); + Assert.Equal("tcp://test/a", conn.UriPlain.AbsoluteUri); Assert.Equal(LightningConnectionType.CLightning, conn.ConnectionType); Assert.True(LightningConnectionString.TryParse("http://aaa:bbb@test/a", out conn)); Assert.Equal("http://aaa:bbb@test/a", conn.ToString()); - Assert.Equal("http://aaa:bbb@test/a", conn.ToUri(true).AbsoluteUri); - Assert.Equal("http://test/a", conn.ToUri(false).AbsoluteUri); + Assert.Equal("http://aaa:bbb@test/a", conn.UriWithCreds.AbsoluteUri); + Assert.Equal("http://test/a", conn.UriPlain.AbsoluteUri); Assert.Equal(LightningConnectionType.Charge, conn.ConnectionType); Assert.Equal("aaa", conn.Username); Assert.Equal("bbb", conn.Password); diff --git a/BTCPayServer/Controllers/StoresController.LightningLike.cs b/BTCPayServer/Controllers/StoresController.LightningLike.cs index fdfef2acb..9fdd24ec9 100644 --- a/BTCPayServer/Controllers/StoresController.LightningLike.cs +++ b/BTCPayServer/Controllers/StoresController.LightningLike.cs @@ -26,16 +26,11 @@ namespace BTCPayServer.Controllers return NotFound(); LightningNodeViewModel vm = new LightningNodeViewModel(); vm.CryptoCode = cryptoCode; - vm.InternalLightningNode = GetInternalLighningNode(cryptoCode)?.ToUri(true)?.AbsoluteUri; - SetExistingValues(store, vm); + vm.InternalLightningNode = GetInternalLighningNode(cryptoCode)?.UriWithCreds?.AbsoluteUri; + vm.Url = GetExistingLightningSupportedPaymentMethod(vm.CryptoCode, store)?.GetLightningUrl()?.UriWithCreds.AbsoluteUri; return View(vm); } - private void SetExistingValues(StoreData store, LightningNodeViewModel vm) - { - vm.Url = GetExistingLightningSupportedPaymentMethod(vm.CryptoCode, store)?.GetLightningUrl()?.ToString(); - } - private LightningSupportedPaymentMethod GetExistingLightningSupportedPaymentMethod(string cryptoCode, StoreData store) { var id = new PaymentMethodId(cryptoCode, PaymentTypes.LightningLike); @@ -65,7 +60,7 @@ namespace BTCPayServer.Controllers var network = vm.CryptoCode == null ? null : _ExplorerProvider.GetNetwork(vm.CryptoCode); var internalLightning = GetInternalLighningNode(network.CryptoCode); - vm.InternalLightningNode = internalLightning?.ToUri(true)?.AbsoluteUri; + vm.InternalLightningNode = internalLightning?.UriWithCreds?.AbsoluteUri; if (network == null) { ModelState.AddModelError(nameof(vm.CryptoCode), "Invalid network"); @@ -82,7 +77,7 @@ namespace BTCPayServer.Controllers return View(vm); } - var internalDomain = internalLightning?.ToUri(false)?.DnsSafeHost; + var internalDomain = internalLightning?.UriPlain?.DnsSafeHost; bool isLocal = (internalDomain == "127.0.0.1" || internalDomain == "localhost"); bool isInternalNode = connectionString.ConnectionType == LightningConnectionType.CLightning || diff --git a/BTCPayServer/Controllers/StoresController.cs b/BTCPayServer/Controllers/StoresController.cs index 12b7cf005..9bd1cb218 100644 --- a/BTCPayServer/Controllers/StoresController.cs +++ b/BTCPayServer/Controllers/StoresController.cs @@ -461,7 +461,7 @@ namespace BTCPayServer.Controllers vm.LightningNodes.Add(new StoreViewModel.LightningNode() { CryptoCode = network.CryptoCode, - Address = lightning?.GetLightningUrl()?.BaseUri.AbsoluteUri ?? string.Empty + Address = lightning?.GetLightningUrl()?.UriPlain.AbsoluteUri ?? string.Empty }); } } diff --git a/BTCPayServer/Payments/Lightning/LightningClientFactory.cs b/BTCPayServer/Payments/Lightning/LightningClientFactory.cs index db8d8fa2b..d6cbf3d4b 100644 --- a/BTCPayServer/Payments/Lightning/LightningClientFactory.cs +++ b/BTCPayServer/Payments/Lightning/LightningClientFactory.cs @@ -15,11 +15,11 @@ namespace BTCPayServer.Payments.Lightning var connString = supportedPaymentMethod.GetLightningUrl(); if (connString.ConnectionType == LightningConnectionType.Charge) { - return new ChargeClient(connString.ToUri(true), network.NBitcoinNetwork); + return new ChargeClient(connString.UriWithCreds, network.NBitcoinNetwork); } else if (connString.ConnectionType == LightningConnectionType.CLightning) { - return new CLightningRPCClient(connString.ToUri(false), network.NBitcoinNetwork); + return new CLightningRPCClient(connString.UriPlain, network.NBitcoinNetwork); } else if (connString.ConnectionType == LightningConnectionType.Lnd) { @@ -33,7 +33,7 @@ namespace BTCPayServer.Payments.Lightning if (!String.IsNullOrEmpty(connString.Tls)) tls = hex.DecodeData(connString.Tls); - var swagger = LndSwaggerClientCustomHttp.Create(connString.ToUri(false), network.NBitcoinNetwork, tls, macaroon); + var swagger = LndSwaggerClientCustomHttp.Create(connString.UriPlain, network.NBitcoinNetwork, tls, macaroon); return new LndInvoiceClient(swagger); } else diff --git a/BTCPayServer/Payments/Lightning/LightningConnectionString.cs b/BTCPayServer/Payments/Lightning/LightningConnectionString.cs index 334194c61..13c5ac210 100644 --- a/BTCPayServer/Payments/Lightning/LightningConnectionString.cs +++ b/BTCPayServer/Payments/Lightning/LightningConnectionString.cs @@ -20,7 +20,7 @@ namespace BTCPayServer.Payments.Lightning public string Username { get; set; } public string Password { get; set; } - public Uri BaseUri { get; set; } + public Uri BaseUri { get; set; } // has no user and password public LightningConnectionType ConnectionType { get; private set; } @@ -29,21 +29,19 @@ namespace BTCPayServer.Payments.Lightning public string Macaroon { get; set; } // - public Uri ToUri(bool withCredentials) + public Uri UriWithCreds { - if (withCredentials) - { - return new UriBuilder(BaseUri) { UserName = Username ?? "", Password = Password ?? "" }.Uri; - } - else - { - return BaseUri; - } + get { return new UriBuilder(BaseUri) { UserName = Username ?? "", Password = Password ?? "" }.Uri; } + } + + public Uri UriPlain + { + get { return BaseUri; } } public override string ToString() { - return ToUri(true).AbsoluteUri; + return UriWithCreds.AbsoluteUri; } // @@ -89,7 +87,7 @@ namespace BTCPayServer.Payments.Lightning result.ConnectionType = uri.Scheme == "http" || uri.Scheme == "https" ? LightningConnectionType.Charge : LightningConnectionType.CLightning; - + // TODO: We need to redo the way Lightning connection strings are detected // now that we have Lnd and we can't depend on // http => Charge