Can remove dyndns services

This commit is contained in:
nicolas.dorier 2019-07-25 19:07:56 +09:00
parent 63472d54d7
commit 233bce578b
No known key found for this signature in database
GPG key ID: 6618763EF09186FE
4 changed files with 85 additions and 3 deletions

View file

@ -94,6 +94,55 @@ namespace BTCPayServer.Tests
s.Driver.FindElement(By.Id("LoginButton")).Click(); s.Driver.FindElement(By.Id("LoginButton")).Click();
s.Driver.AssertNoError(); s.Driver.AssertNoError();
} }
[Fact]
public void CanUseDynamicDns()
{
using (var s = SeleniumTester.Create())
{
s.Start();
var alice = s.RegisterNewUser(isAdmin: true);
s.Driver.Navigate().GoToUrl(s.Link("/server/services"));
Assert.Contains("Dynamic DNS", s.Driver.PageSource);
s.Driver.Navigate().GoToUrl(s.Link("/server/services/dynamic-dns"));
s.Driver.AssertNoError();
if (s.Driver.PageSource.Contains("CanUseDynamicDns.hello.com"))
{
// Cleanup old test run
s.Driver.Navigate().GoToUrl(s.Link("/server/services/dynamic-dns/CanUseDynamicDns.hello.com/delete"));
s.Driver.FindElement(By.Id("continue")).Click();
}
s.Driver.FindElement(By.Id("AddDynamicDNS")).Click();
s.Driver.AssertNoError();
// We will just cheat for test purposes by only querying the server
s.Driver.FindElement(By.Id("ServiceUrl")).SendKeys(s.Link("/"));
s.Driver.FindElement(By.Id("Settings_Hostname")).SendKeys("CanUseDynamicDns.hello.com");
s.Driver.FindElement(By.Id("Settings_Login")).SendKeys("MyLog");
s.Driver.FindElement(By.Id("Settings_Password")).SendKeys("MyLog" + Keys.Enter);
s.Driver.AssertNoError();
Assert.Contains("The Dynamic DNS has been successfully queried", s.Driver.PageSource);
Assert.EndsWith("/server/services/dynamic-dns", s.Driver.Url);
// Try to do the same thing should fail (hostname already exists)
s.Driver.FindElement(By.Id("AddDynamicDNS")).Click();
s.Driver.AssertNoError();
s.Driver.FindElement(By.Id("ServiceUrl")).SendKeys(s.Link("/"));
s.Driver.FindElement(By.Id("Settings_Hostname")).SendKeys("CanUseDynamicDns.hello.com");
s.Driver.FindElement(By.Id("Settings_Login")).SendKeys("MyLog");
s.Driver.FindElement(By.Id("Settings_Password")).SendKeys("MyLog" + Keys.Enter);
s.Driver.AssertNoError();
Assert.Contains("This hostname already exists", s.Driver.PageSource);
// Delete it
s.Driver.Navigate().GoToUrl(s.Link("/server/services/dynamic-dns"));
Assert.Contains("/server/services/dynamic-dns/CanUseDynamicDns.hello.com/delete", s.Driver.PageSource);
s.Driver.Navigate().GoToUrl(s.Link("/server/services/dynamic-dns/CanUseDynamicDns.hello.com/delete"));
s.Driver.FindElement(By.Id("continue")).Click();
s.Driver.AssertNoError();
Assert.DoesNotContain("/server/services/dynamic-dns/CanUseDynamicDns.hello.com/delete", s.Driver.PageSource);
}
}
[Fact] [Fact]
public void CanCreateStores() public void CanCreateStores()

View file

@ -845,6 +845,8 @@ namespace BTCPayServer.Controllers
ModelState.AddModelError(nameof(viewModel.Settings.Hostname), "This hostname already exists"); ModelState.AddModelError(nameof(viewModel.Settings.Hostname), "This hostname already exists");
return View(viewModel); return View(viewModel);
} }
if (viewModel.Settings.Hostname != null)
viewModel.Settings.Hostname = viewModel.Settings.Hostname.Trim().ToLowerInvariant();
string errorMessage = await viewModel.Settings.SendUpdateRequest(HttpClientFactory.CreateClient()); string errorMessage = await viewModel.Settings.SendUpdateRequest(HttpClientFactory.CreateClient());
if (errorMessage == null) if (errorMessage == null)
{ {
@ -876,6 +878,8 @@ namespace BTCPayServer.Controllers
return NotFound(); return NotFound();
if (viewModel.Settings.Password == null) if (viewModel.Settings.Password == null)
viewModel.Settings.Password = settings.Services[i].Password; viewModel.Settings.Password = settings.Services[i].Password;
if (viewModel.Settings.Hostname != null)
viewModel.Settings.Hostname = viewModel.Settings.Hostname.Trim().ToLowerInvariant();
if (!viewModel.Settings.Enabled) if (!viewModel.Settings.Enabled)
{ {
StatusMessage = $"The Dynamic DNS service has been disabled"; StatusMessage = $"The Dynamic DNS service has been disabled";
@ -900,6 +904,35 @@ namespace BTCPayServer.Controllers
this.RouteData.Values.Remove(nameof(hostname)); this.RouteData.Values.Remove(nameof(hostname));
return RedirectToAction(nameof(DynamicDnsServices)); return RedirectToAction(nameof(DynamicDnsServices));
} }
[HttpGet]
[Route("server/services/dynamic-dns/{hostname}/delete")]
public async Task<IActionResult> DeleteDynamicDnsService(string hostname)
{
var settings = (await _SettingsRepository.GetSettingAsync<DynamicDnsSettings>()) ?? new DynamicDnsSettings();
var i = settings.Services.FindIndex(d => d.Hostname.Equals(hostname, StringComparison.OrdinalIgnoreCase));
if (i == -1)
return NotFound();
return View("Confirm", new ConfirmModel()
{
Title = "Delete the dynamic dns service for " + hostname,
Description = "BTCPayServer will stop updating this DNS record periodically",
Action = "Delete"
});
}
[HttpPost]
[Route("server/services/dynamic-dns/{hostname}/delete")]
public async Task<IActionResult> DeleteDynamicDnsServicePost(string hostname)
{
var settings = (await _SettingsRepository.GetSettingAsync<DynamicDnsSettings>()) ?? new DynamicDnsSettings();
var i = settings.Services.FindIndex(d => d.Hostname.Equals(hostname, StringComparison.OrdinalIgnoreCase));
if (i == -1)
return NotFound();
settings.Services.RemoveAt(i);
await _SettingsRepository.UpdateSetting(settings);
StatusMessage = "Dynamic DNS service successfully removed";
this.RouteData.Values.Remove(nameof(hostname));
return RedirectToAction(nameof(DynamicDnsServices));
}
[Route("server/services/ssh")] [Route("server/services/ssh")]
public IActionResult SSHService(bool downloadKeyFile = false) public IActionResult SSHService(bool downloadKeyFile = false)

View file

@ -19,7 +19,7 @@
<p>Note that you need to properly configure your NAT and BTCPayServer install to get HTTPS certificate.</p> <p>Note that you need to properly configure your NAT and BTCPayServer install to get HTTPS certificate.</p>
</div> </div>
<form method="post" asp-action="DynamicDnsService"> <form method="post" asp-action="DynamicDnsService">
<button class="btn btn-primary" type="submit"><span class="fa fa-plus"></span> Add Dynamic DNS</button> <button id="AddDynamicDNS" class="btn btn-primary" type="submit"><span class="fa fa-plus"></span> Add Dynamic DNS</button>
</form> </form>
<table class="table table-sm table-responsive-md"> <table class="table table-sm table-responsive-md">
<thead> <thead>
@ -46,7 +46,7 @@
<span class="fa fa-times"></span> <span class="fa fa-times"></span>
} }
</td> </td>
<td><a asp-action="DynamicDnsService" asp-route-hostname="@service.Settings.Hostname">Edit</a> <span> - </span> <a asp-action="DynamicDnsServiceDelete" asp-route-hostname="@service.Settings.Hostname">Remove</a></td> <td><a asp-action="DynamicDnsService" asp-route-hostname="@service.Settings.Hostname">Edit</a> <span> - </span> <a asp-action="DeleteDynamicDnsService" asp-route-hostname="@service.Settings.Hostname">Remove</a></td>
</tr> </tr>
} }
</tbody> </tbody>

View file

@ -17,7 +17,7 @@
<div class="row"> <div class="row">
<div class="col-lg-12 text-center"> <div class="col-lg-12 text-center">
<form method="post"> <form method="post">
<button type="submit" class="btn btn-secondary @Model.ButtonClass" title="Continue">@Model.Action</button> <button id="continue" type="submit" class="btn btn-secondary @Model.ButtonClass" title="Continue">@Model.Action</button>
</form> </form>
</div> </div>
</div> </div>