Refactoring conditional method, separating into two properties

This commit is contained in:
rockstardev 2018-06-23 22:50:50 -05:00
parent 039303bfaa
commit d34ffc0d9a
5 changed files with 30 additions and 37 deletions

View file

@ -436,40 +436,40 @@ namespace BTCPayServer.Tests
Assert.True(LightningConnectionString.TryParse(lndUri, out conn)); 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.ToString());
Assert.Equal("http://lnd:lnd@127.0.0.1:53280/", conn.ToUri(true).AbsoluteUri); Assert.Equal("http://lnd:lnd@127.0.0.1:53280/", conn.UriWithCreds.AbsoluteUri);
Assert.Equal("http://127.0.0.1:53280/", conn.ToUri(false).AbsoluteUri); Assert.Equal("http://127.0.0.1:53280/", conn.UriPlain.AbsoluteUri);
Assert.Equal(LightningConnectionType.Lnd, conn.ConnectionType); Assert.Equal(LightningConnectionType.Lnd, conn.ConnectionType);
Assert.Equal(macaroon, conn.Macaroon); Assert.Equal(macaroon, conn.Macaroon);
Assert.Equal(tls, conn.Tls); Assert.Equal(tls, conn.Tls);
Assert.True(LightningConnectionString.TryParse("/test/a", out conn)); Assert.True(LightningConnectionString.TryParse("/test/a", out conn));
Assert.Equal("unix://test/a", conn.ToString()); Assert.Equal("unix://test/a", conn.ToString());
Assert.Equal("unix://test/a", conn.ToUri(true).AbsoluteUri); Assert.Equal("unix://test/a", conn.UriWithCreds.AbsoluteUri);
Assert.Equal("unix://test/a", conn.ToUri(false).AbsoluteUri); Assert.Equal("unix://test/a", conn.UriPlain.AbsoluteUri);
Assert.Equal(LightningConnectionType.CLightning, conn.ConnectionType); Assert.Equal(LightningConnectionType.CLightning, conn.ConnectionType);
Assert.True(LightningConnectionString.TryParse("unix://test/a", out conn)); Assert.True(LightningConnectionString.TryParse("unix://test/a", out conn));
Assert.Equal("unix://test/a", conn.ToString()); Assert.Equal("unix://test/a", conn.ToString());
Assert.Equal("unix://test/a", conn.ToUri(true).AbsoluteUri); Assert.Equal("unix://test/a", conn.UriWithCreds.AbsoluteUri);
Assert.Equal("unix://test/a", conn.ToUri(false).AbsoluteUri); Assert.Equal("unix://test/a", conn.UriPlain.AbsoluteUri);
Assert.Equal(LightningConnectionType.CLightning, conn.ConnectionType); Assert.Equal(LightningConnectionType.CLightning, conn.ConnectionType);
Assert.True(LightningConnectionString.TryParse("unix://test/a", out conn)); Assert.True(LightningConnectionString.TryParse("unix://test/a", out conn));
Assert.Equal("unix://test/a", conn.ToString()); Assert.Equal("unix://test/a", conn.ToString());
Assert.Equal("unix://test/a", conn.ToUri(true).AbsoluteUri); Assert.Equal("unix://test/a", conn.UriWithCreds.AbsoluteUri);
Assert.Equal("unix://test/a", conn.ToUri(false).AbsoluteUri); Assert.Equal("unix://test/a", conn.UriPlain.AbsoluteUri);
Assert.Equal(LightningConnectionType.CLightning, conn.ConnectionType); Assert.Equal(LightningConnectionType.CLightning, conn.ConnectionType);
Assert.True(LightningConnectionString.TryParse("tcp://test/a", out conn)); Assert.True(LightningConnectionString.TryParse("tcp://test/a", out conn));
Assert.Equal("tcp://test/a", conn.ToString()); Assert.Equal("tcp://test/a", conn.ToString());
Assert.Equal("tcp://test/a", conn.ToUri(true).AbsoluteUri); Assert.Equal("tcp://test/a", conn.UriWithCreds.AbsoluteUri);
Assert.Equal("tcp://test/a", conn.ToUri(false).AbsoluteUri); Assert.Equal("tcp://test/a", conn.UriPlain.AbsoluteUri);
Assert.Equal(LightningConnectionType.CLightning, conn.ConnectionType); Assert.Equal(LightningConnectionType.CLightning, conn.ConnectionType);
Assert.True(LightningConnectionString.TryParse("http://aaa:bbb@test/a", out conn)); 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.ToString());
Assert.Equal("http://aaa:bbb@test/a", conn.ToUri(true).AbsoluteUri); Assert.Equal("http://aaa:bbb@test/a", conn.UriWithCreds.AbsoluteUri);
Assert.Equal("http://test/a", conn.ToUri(false).AbsoluteUri); Assert.Equal("http://test/a", conn.UriPlain.AbsoluteUri);
Assert.Equal(LightningConnectionType.Charge, conn.ConnectionType); Assert.Equal(LightningConnectionType.Charge, conn.ConnectionType);
Assert.Equal("aaa", conn.Username); Assert.Equal("aaa", conn.Username);
Assert.Equal("bbb", conn.Password); Assert.Equal("bbb", conn.Password);

View file

@ -26,16 +26,11 @@ namespace BTCPayServer.Controllers
return NotFound(); return NotFound();
LightningNodeViewModel vm = new LightningNodeViewModel(); LightningNodeViewModel vm = new LightningNodeViewModel();
vm.CryptoCode = cryptoCode; vm.CryptoCode = cryptoCode;
vm.InternalLightningNode = GetInternalLighningNode(cryptoCode)?.ToUri(true)?.AbsoluteUri; vm.InternalLightningNode = GetInternalLighningNode(cryptoCode)?.UriWithCreds?.AbsoluteUri;
SetExistingValues(store, vm); vm.Url = GetExistingLightningSupportedPaymentMethod(vm.CryptoCode, store)?.GetLightningUrl()?.UriWithCreds.AbsoluteUri;
return View(vm); 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) private LightningSupportedPaymentMethod GetExistingLightningSupportedPaymentMethod(string cryptoCode, StoreData store)
{ {
var id = new PaymentMethodId(cryptoCode, PaymentTypes.LightningLike); 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 network = vm.CryptoCode == null ? null : _ExplorerProvider.GetNetwork(vm.CryptoCode);
var internalLightning = GetInternalLighningNode(network.CryptoCode); var internalLightning = GetInternalLighningNode(network.CryptoCode);
vm.InternalLightningNode = internalLightning?.ToUri(true)?.AbsoluteUri; vm.InternalLightningNode = internalLightning?.UriWithCreds?.AbsoluteUri;
if (network == null) if (network == null)
{ {
ModelState.AddModelError(nameof(vm.CryptoCode), "Invalid network"); ModelState.AddModelError(nameof(vm.CryptoCode), "Invalid network");
@ -82,7 +77,7 @@ namespace BTCPayServer.Controllers
return View(vm); return View(vm);
} }
var internalDomain = internalLightning?.ToUri(false)?.DnsSafeHost; var internalDomain = internalLightning?.UriPlain?.DnsSafeHost;
bool isLocal = (internalDomain == "127.0.0.1" || internalDomain == "localhost"); bool isLocal = (internalDomain == "127.0.0.1" || internalDomain == "localhost");
bool isInternalNode = connectionString.ConnectionType == LightningConnectionType.CLightning || bool isInternalNode = connectionString.ConnectionType == LightningConnectionType.CLightning ||

View file

@ -461,7 +461,7 @@ namespace BTCPayServer.Controllers
vm.LightningNodes.Add(new StoreViewModel.LightningNode() vm.LightningNodes.Add(new StoreViewModel.LightningNode()
{ {
CryptoCode = network.CryptoCode, CryptoCode = network.CryptoCode,
Address = lightning?.GetLightningUrl()?.BaseUri.AbsoluteUri ?? string.Empty Address = lightning?.GetLightningUrl()?.UriPlain.AbsoluteUri ?? string.Empty
}); });
} }
} }

View file

@ -15,11 +15,11 @@ namespace BTCPayServer.Payments.Lightning
var connString = supportedPaymentMethod.GetLightningUrl(); var connString = supportedPaymentMethod.GetLightningUrl();
if (connString.ConnectionType == LightningConnectionType.Charge) 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) 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) else if (connString.ConnectionType == LightningConnectionType.Lnd)
{ {
@ -33,7 +33,7 @@ namespace BTCPayServer.Payments.Lightning
if (!String.IsNullOrEmpty(connString.Tls)) if (!String.IsNullOrEmpty(connString.Tls))
tls = hex.DecodeData(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); return new LndInvoiceClient(swagger);
} }
else else

View file

@ -20,7 +20,7 @@ namespace BTCPayServer.Payments.Lightning
public string Username { get; set; } public string Username { get; set; }
public string Password { 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; } public LightningConnectionType ConnectionType { get; private set; }
@ -29,21 +29,19 @@ namespace BTCPayServer.Payments.Lightning
public string Macaroon { get; set; } public string Macaroon { get; set; }
// //
public Uri ToUri(bool withCredentials) public Uri UriWithCreds
{ {
if (withCredentials) get { return new UriBuilder(BaseUri) { UserName = Username ?? "", Password = Password ?? "" }.Uri; }
{ }
return new UriBuilder(BaseUri) { UserName = Username ?? "", Password = Password ?? "" }.Uri;
} public Uri UriPlain
else {
{ get { return BaseUri; }
return BaseUri;
}
} }
public override string ToString() 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" ? result.ConnectionType = uri.Scheme == "http" || uri.Scheme == "https" ?
LightningConnectionType.Charge : LightningConnectionType.Charge :
LightningConnectionType.CLightning; LightningConnectionType.CLightning;
// TODO: We need to redo the way Lightning connection strings are detected // TODO: We need to redo the way Lightning connection strings are detected
// now that we have Lnd and we can't depend on // now that we have Lnd and we can't depend on
// http => Charge // http => Charge