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.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);

View file

@ -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 ||

View file

@ -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
});
}
}

View file

@ -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

View file

@ -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