From f2e728a97ef67924972c25ee7f2b5fcc94683c9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Antonio=20Maz=C3=B3n=20San=20Bartolom=C3=A9?= Date: Sun, 27 Feb 2022 03:51:31 +0100 Subject: [PATCH] #115 chore: added very simple mechanism for saving interfaces and clients --- Linguard/Core/Models/Wireguard/Client.cs | 6 +++++- Linguard/Core/Models/Wireguard/Interface.cs | 8 ++++++-- Linguard/Web/Pages/EditClient.razor | 13 ++++++++++--- Linguard/Web/Pages/EditInterface.razor | 5 +++-- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/Linguard/Core/Models/Wireguard/Client.cs b/Linguard/Core/Models/Wireguard/Client.cs index e61a604..9283cad 100644 --- a/Linguard/Core/Models/Wireguard/Client.cs +++ b/Linguard/Core/Models/Wireguard/Client.cs @@ -1,6 +1,6 @@ namespace Linguard.Core.Models.Wireguard; -public class Client : WireguardPeerBase { +public class Client : WireguardPeerBase, ICloneable { public ICollection AllowedIPs { get; set; } = new List(); public bool Nat { get; set; } public Uri PrimaryDns { get; set; } @@ -42,4 +42,8 @@ public override string ToString() { $"Public key: {PublicKey}{Environment.NewLine}" + $"AllowedIPs: {string.Join(", ", AllowedIPs.Select(ip => ip.ToString()))}"; } + + public object Clone() { + return MemberwiseClone(); + } } diff --git a/Linguard/Core/Models/Wireguard/Interface.cs b/Linguard/Core/Models/Wireguard/Interface.cs index 3380114..0add215 100644 --- a/Linguard/Core/Models/Wireguard/Interface.cs +++ b/Linguard/Core/Models/Wireguard/Interface.cs @@ -2,7 +2,7 @@ namespace Linguard.Core.Models.Wireguard; -public class Interface : WireguardPeerBase { +public class Interface : WireguardPeerBase, ICloneable { public NetworkInterface Gateway { get; set; } public int Port { get; set; } public bool Auto { get; set; } @@ -53,7 +53,11 @@ public override string ToString() { $"Primary DNS: {PrimaryDns}{Environment.NewLine}" + $"Secondary DNS: {SecondaryDns}"; } - + + public object Clone() { + return MemberwiseClone(); + } + public override string Brief() { return $"Name: {Name}, " + $"Port: {Port}, " + diff --git a/Linguard/Web/Pages/EditClient.razor b/Linguard/Web/Pages/EditClient.razor index d07feca..00bb48c 100644 --- a/Linguard/Web/Pages/EditClient.razor +++ b/Linguard/Web/Pages/EditClient.razor @@ -4,6 +4,7 @@ @using Linguard.Core.Models.Wireguard @using Linguard.Core.Services @using Linguard.Core.Configuration +@using FluentValidation @inject IConfigurationManager _configurationManager @inject IWireguardService _wireguardService @@ -11,7 +12,7 @@ @inject DialogService _dialogService @inject NavigationManager _navigationManager @inject IJSRuntime _js - +@inject AbstractValidator _validator @code { const string Title = "Client"; @@ -21,7 +22,7 @@ IConfiguration Configuration => _configurationManager.Configuration; Client? Client => Configuration.Wireguard.Interfaces .SelectMany(i => i.Clients) - .SingleOrDefault(i => i.Id == Id); + .SingleOrDefault(i => i.Id == Id)?.Clone() as Client; } @($"{AssemblyInfo.Product} | {Title}") @@ -56,6 +57,12 @@ @code { private void Submit(Client args) { - throw new NotImplementedException(); + var result = _validator.Validate(args); + if (result.IsValid) { + _configurationManager.Save(); + _notificationService.Notify(NotificationSeverity.Success, "Client saved!"); + return; + } + _notificationService.Notify(NotificationSeverity.Error, "Unable to save client."); } } diff --git a/Linguard/Web/Pages/EditInterface.razor b/Linguard/Web/Pages/EditInterface.razor index 7ae0a32..12b60e5 100644 --- a/Linguard/Web/Pages/EditInterface.razor +++ b/Linguard/Web/Pages/EditInterface.razor @@ -24,7 +24,7 @@ public Guid Id { get; set; } IConfiguration Configuration => _configurationManager.Configuration; - Interface? Iface => Configuration.Wireguard.Interfaces.SingleOrDefault(i => i.Id == Id); + Interface? Iface => Configuration.Wireguard.Interfaces.SingleOrDefault(i => i.Id == Id)?.Clone() as Interface; } @($"{AssemblyInfo.Product} | {Title}") @@ -117,9 +117,10 @@ var result = _validator.Validate(args); if (result.IsValid) { _configurationManager.Save(); - _navigationManager.NavigateTo("wireguard"); + _notificationService.Notify(NotificationSeverity.Success, "Interface saved!"); return; } + _notificationService.Notify(NotificationSeverity.Error, "Unable to save interface."); } void EditWireguardClient(Client client) {