From 12dbb1578eff2763dadcf91ecbbc392addf1650f Mon Sep 17 00:00:00 2001 From: ebolo Date: Fri, 24 Jan 2025 13:01:09 +0700 Subject: [PATCH] feat: support delete selected configurations --- .../ReverseProxies/ReverseProxiesPage.razor | 3 +- .../ReverseProxiesPage.razor.cs | 20 ++++++++++ CaddyManager/Contracts/Caddy/ICaddyService.cs | 7 ++++ .../Caddy/CaddyDeleteOperationResponse.cs | 12 ++++++ CaddyManager/Services/CaddyService.cs | 38 +++++++++++++++++++ 5 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 CaddyManager/Models/Caddy/CaddyDeleteOperationResponse.cs diff --git a/CaddyManager/Components/Pages/ReverseProxies/ReverseProxiesPage.razor b/CaddyManager/Components/Pages/ReverseProxies/ReverseProxiesPage.razor index 876aa9a..398c0d6 100644 --- a/CaddyManager/Components/Pages/ReverseProxies/ReverseProxiesPage.razor +++ b/CaddyManager/Components/Pages/ReverseProxies/ReverseProxiesPage.razor @@ -8,7 +8,8 @@ OnClick="NewReverseProxy">New... Delete + Disabled="@(_selectedCaddyConfigurations.Count <= 0)" + OnClick="Delete">Delete /// CaddyOperationResponse SaveCaddyGlobalConfiguration(string content); + + /// + /// Method to delete the given Caddy configurations by name + /// + /// + /// + CaddyDeleteOperationResponse DeleteCaddyConfigurations(List configurationNames); } \ No newline at end of file diff --git a/CaddyManager/Models/Caddy/CaddyDeleteOperationResponse.cs b/CaddyManager/Models/Caddy/CaddyDeleteOperationResponse.cs new file mode 100644 index 0000000..8a0239f --- /dev/null +++ b/CaddyManager/Models/Caddy/CaddyDeleteOperationResponse.cs @@ -0,0 +1,12 @@ +namespace CaddyManager.Models.Caddy; + +/// +/// Class to wrap the response of a Caddy delete operation +/// +public class CaddyDeleteOperationResponse : CaddyOperationResponse +{ + /// + /// List of configurations that were successfully deleted + /// + public List DeletedConfigurations { get; set; } = []; +} \ No newline at end of file diff --git a/CaddyManager/Services/CaddyService.cs b/CaddyManager/Services/CaddyService.cs index 4ac9b99..7d85d30 100644 --- a/CaddyManager/Services/CaddyService.cs +++ b/CaddyManager/Services/CaddyService.cs @@ -21,6 +21,7 @@ public class CaddyService(IConfigurationsService configurationsService) : ICaddy return Directory.GetFiles(Configurations.ConfigDir) .Where(filePath => Path.GetFileName(filePath) != CaddyGlobalConfigName) .Select(Path.GetFileNameWithoutExtension) + .Order() .ToList()!; } @@ -92,4 +93,41 @@ public class CaddyService(IConfigurationsService configurationsService) : ICaddy FileName = CaddyGlobalConfigName, Content = content }); + + /// + public CaddyDeleteOperationResponse DeleteCaddyConfigurations(List configurationNames) + { + var failed = new List(); + + foreach (var configurationName in configurationNames) + { + var filePath = Path.Combine(Configurations.ConfigDir, + configurationName == CaddyGlobalConfigName ? CaddyGlobalConfigName : $"{configurationName}.caddy"); + + if (File.Exists(filePath)) + { + try + { + File.Delete(filePath); + } + catch + { + failed.Add(configurationName); + } + } + else + { + failed.Add(configurationName); + } + } + + return new CaddyDeleteOperationResponse + { + Success = failed.Count == 0, + Message = failed.Count == 0 + ? "Configuration(s) deleted successfully" + : $"Failed to delete the following configuration(s): {string.Join(", ", failed)}", + DeletedConfigurations = configurationNames.Except(failed).ToList() + }; + } } \ No newline at end of file