diff --git a/Akari.Prototype.Server/Cli/Commands/FingerprintCommands.cs b/Akari.Prototype.Server/Cli/Commands/FingerprintCommands.cs index 69f0478..6ef6100 100644 --- a/Akari.Prototype.Server/Cli/Commands/FingerprintCommands.cs +++ b/Akari.Prototype.Server/Cli/Commands/FingerprintCommands.cs @@ -35,6 +35,32 @@ namespace Akari.Prototype.Server.Cli.Commands } } + [Command("fp r", Description = "Remove a fingerprint")] + public class RemoveFingerprintCommand : ICommand + { + [CommandParameter(0, Description = "The fingerprint name")] + public string Name { get; init; } + + private readonly IFingerprintManager _fingerprintManager; + + public RemoveFingerprintCommand(IFingerprintManager fingerprintManager) + { + _fingerprintManager = fingerprintManager; + } + + public ValueTask ExecuteAsync(IConsole console) + { + if (!_fingerprintManager.Remove(Name)) + { + throw new CommandException($"The fingerprint {Name} doesn't exist"); + } + + console.AsAnsiConsole().Markup($"[green]Successfully deleted {Name}[/]"); + + return default; + } + } + public FingerprintCommands(IFingerprintManager fingerprintManager) { _fingerprintManager = fingerprintManager; diff --git a/Akari.Prototype.Server/Program.cs b/Akari.Prototype.Server/Program.cs index 282aadb..f935346 100644 --- a/Akari.Prototype.Server/Program.cs +++ b/Akari.Prototype.Server/Program.cs @@ -75,6 +75,7 @@ namespace Akari.Prototype.Server Startup.ConfigureStandardServices(hostContext.Configuration, services); services.AddTransient(); + services.AddTransient(); }); public static IHostBuilder CreateWebHostBuilder(string[] args) => diff --git a/Akari.Prototype.Server/Services/FingerprintManager.cs b/Akari.Prototype.Server/Services/FingerprintManager.cs index cfc7c2a..69777d8 100644 --- a/Akari.Prototype.Server/Services/FingerprintManager.cs +++ b/Akari.Prototype.Server/Services/FingerprintManager.cs @@ -53,6 +53,22 @@ namespace Akari.Prototype.Server.Services } } + private void SaveFingerprints() + { + var path = _akariPath.GetPath(FingerprintsPath); + + File.WriteAllText(path, JsonSerializer.Serialize(_fingerprintsHash)); + } + + public bool Remove(string name) + { + var result = _fingerprintsHash.Remove(name); + + SaveFingerprints(); + + return result; + } + public void VerifyFingerprint(string name, string token) { _logger.LogDebug($"Verifying hash for {name}"); diff --git a/Akari.Prototype.Server/Services/IFingerprintManager.cs b/Akari.Prototype.Server/Services/IFingerprintManager.cs index 484a04f..bd30188 100644 --- a/Akari.Prototype.Server/Services/IFingerprintManager.cs +++ b/Akari.Prototype.Server/Services/IFingerprintManager.cs @@ -10,6 +10,8 @@ namespace Akari.Prototype.Server.Services { IEnumerable> FingerprintsHash { get; } + bool Remove(string name); + void VerifyFingerprint(string name, string token); } }