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