From 9c165d84ef0eaaf1d8cf17c2cea7bf67440ca7c0 Mon Sep 17 00:00:00 2001 From: rockstardev Date: Thu, 7 Nov 2019 17:06:16 -0600 Subject: [PATCH] Removing LND seed information from walletunlock.json --- BTCPayServer/Controllers/ServerController.cs | 32 +++++++++++++++++++ .../LndSeedBackupViewModel.cs | 25 +++++++++++++++ .../Views/Server/LndSeedBackup.cshtml | 11 +++++-- 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/BTCPayServer/Controllers/ServerController.cs b/BTCPayServer/Controllers/ServerController.cs index cdb58fd23..3cf5ac098 100644 --- a/BTCPayServer/Controllers/ServerController.cs +++ b/BTCPayServer/Controllers/ServerController.cs @@ -666,6 +666,38 @@ namespace BTCPayServer.Controllers } } + [HttpPost] + [Route("server/services/{serviceName}/{cryptoCode}/removelndseed")] + public async Task RemoveLndSeed(string serviceName, string cryptoCode) + { + var service = GetService(serviceName, cryptoCode); + if (service == null) + return NotFound(); + + var model = LndSeedBackupViewModel.Parse(service.ConnectionString.CookieFilePath); + if (!model.IsWalletUnlockPresent) + { + TempData[WellKnownTempData.ErrorMessage] = $"File with wallet password and seed info not present"; + return RedirectToAction(nameof(Services)); + } + + if (model.Seed == null || model.Seed.Count <= 1) + { + TempData[WellKnownTempData.ErrorMessage] = $"Seed information was already removed"; + return RedirectToAction(nameof(Services)); + } + + if (await model.RemoveSeedAndWrite(service.ConnectionString.CookieFilePath)) + { + return RedirectToAction(nameof(Service), new { serviceName, cryptoCode }); + } + else + { + TempData[WellKnownTempData.ErrorMessage] = $"Seed removal failed"; + return RedirectToAction(nameof(Services)); + } + } + private IActionResult LightningChargeServices(ExternalService service, ExternalConnectionString connectionString, bool showQR = false) { ChargeServiceViewModel vm = new ChargeServiceViewModel(); diff --git a/BTCPayServer/Models/ServerViewModels/LndSeedBackupViewModel.cs b/BTCPayServer/Models/ServerViewModels/LndSeedBackupViewModel.cs index 97885f68f..0c8d18b88 100644 --- a/BTCPayServer/Models/ServerViewModels/LndSeedBackupViewModel.cs +++ b/BTCPayServer/Models/ServerViewModels/LndSeedBackupViewModel.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; +using System.Globalization; using System.IO; +using System.Threading.Tasks; using Newtonsoft.Json; namespace BTCPayServer.Models.ServerViewModels @@ -14,6 +16,29 @@ namespace BTCPayServer.Models.ServerViewModels public List Seed { get; set; } + + public async Task RemoveSeedAndWrite(string lndSeedFilePath) + { + var removedDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ssZ", CultureInfo.InvariantCulture); + var seedFile = new LndSeedFile + { + wallet_password = WalletPassword, + cipher_seed_mnemonic = new List { $"Seed removed on {removedDate}" } + }; + var json = JsonConvert.SerializeObject(seedFile); + try + { + await File.WriteAllTextAsync(lndSeedFilePath, json); + return true; + } + catch + { + // file access exception and such + return false; + } + } + + public static LndSeedBackupViewModel Parse(string lndSeedFilePath) { try diff --git a/BTCPayServer/Views/Server/LndSeedBackup.cshtml b/BTCPayServer/Views/Server/LndSeedBackup.cshtml index 52ad20f0f..87f104b75 100644 --- a/BTCPayServer/Views/Server/LndSeedBackup.cshtml +++ b/BTCPayServer/Views/Server/LndSeedBackup.cshtml @@ -24,13 +24,20 @@

- @String.Join(", ", Model.Seed) + @foreach (var item in Model.Seed) + { + @item + } +

+
+ +

} else { -

Seed information was deleted on @Model.Seed.First()

+

@Model.Seed.First()

} } else