Fix setting up DNS name

This commit is contained in:
nicolas.dorier
2018-08-13 16:48:10 +09:00
parent ed1827ff28
commit 522abcfdfd
2 changed files with 10 additions and 9 deletions

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework> <TargetFramework>netcoreapp2.1</TargetFramework>
<Version>1.0.2.91</Version> <Version>1.0.2.92</Version>
<NoWarn>NU1701,CA1816,CA1308,CA1810,CA2208</NoWarn> <NoWarn>NU1701,CA1816,CA1308,CA1810,CA2208</NoWarn>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@@ -180,6 +180,8 @@ namespace BTCPayServer.Controllers
return View(vm); return View(vm);
} }
vm.DNSDomain = vm.DNSDomain.Trim().ToLowerInvariant(); vm.DNSDomain = vm.DNSDomain.Trim().ToLowerInvariant();
if (vm.DNSDomain.Equals(this.Request.Host.Host, StringComparison.OrdinalIgnoreCase))
return View(vm);
if (IPAddress.TryParse(vm.DNSDomain, out var unused)) if (IPAddress.TryParse(vm.DNSDomain, out var unused))
{ {
ModelState.AddModelError(nameof(vm.DNSDomain), $"This should be a domain name"); ModelState.AddModelError(nameof(vm.DNSDomain), $"This should be a domain name");
@@ -198,14 +200,13 @@ namespace BTCPayServer.Controllers
{ {
try try
{ {
builder.Scheme = this.Request.Scheme; var addresses1 = Dns.GetHostAddressesAsync(this.Request.Host.Host);
builder.Host = vm.DNSDomain; var addresses2 = Dns.GetHostAddressesAsync(vm.DNSDomain);
if (this.Request.Host.Port != null) await Task.WhenAll(addresses1, addresses2);
builder.Port = this.Request.Host.Port.Value;
builder.Path = "runid"; var addressesSet = addresses1.GetAwaiter().GetResult().Select(c => c.ToString()).ToHashSet();
builder.Query = $"expected={RunId}"; var hasCommonAddress = addresses2.GetAwaiter().GetResult().Select(c => c.ToString()).Any(s => addressesSet.Contains(s));
var response = await client.GetAsync(builder.Uri); if (!hasCommonAddress)
if (!response.IsSuccessStatusCode)
{ {
ModelState.AddModelError(nameof(vm.DNSDomain), $"Invalid host ({vm.DNSDomain} is not pointing to this BTCPay instance)"); ModelState.AddModelError(nameof(vm.DNSDomain), $"Invalid host ({vm.DNSDomain} is not pointing to this BTCPay instance)");
return View(vm); return View(vm);