From 5e018358269e913601239bda3aec00d7c0afb2cc Mon Sep 17 00:00:00 2001 From: Pat Hartl Date: Wed, 20 Mar 2024 19:19:59 -0500 Subject: [PATCH] Added configuration page in settings --- LANCommander/Models/Settings.cs | 12 ++- .../Pages/Settings/VPN/Forms/ZeroTier.razor | 27 ++++++ .../UI/Pages/Settings/VPN/Index.razor | 95 +++++++++++++++++++ 3 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 LANCommander/UI/Pages/Settings/VPN/Forms/ZeroTier.razor create mode 100644 LANCommander/UI/Pages/Settings/VPN/Index.razor diff --git a/LANCommander/Models/Settings.cs b/LANCommander/Models/Settings.cs index 2253d419..d6d5b0b5 100644 --- a/LANCommander/Models/Settings.cs +++ b/LANCommander/Models/Settings.cs @@ -1,4 +1,5 @@ -using NLog.Targets; +using LANCommander.SDK.Enums; +using NLog.Targets; namespace LANCommander.Models { @@ -23,6 +24,7 @@ namespace LANCommander.Models public LANCommanderArchiveSettings Archives { get; set; } = new LANCommanderArchiveSettings(); public LANCommanderMediaSettings Media { get; set; } = new LANCommanderMediaSettings(); public LANCommanderIPXRelaySettings IPXRelay { get; set; } = new LANCommanderIPXRelaySettings(); + public LANCommanderVPNSettings VPN { get; set; } = new LANCommanderVPNSettings(); public LANCommanderWikiSettings Wiki { get; set; } = new LANCommanderWikiSettings(); public LANCommanderUpdateSettings Update { get; set; } = new LANCommanderUpdateSettings(); public LANCommanderLogSettings Logs { get; set; } = new LANCommanderLogSettings(); @@ -90,6 +92,14 @@ namespace LANCommander.Models public bool Logging { get; set; } = false; } + public class LANCommanderVPNSettings + { + public bool Enabled { get; set; } = false; + public IEnumerable AllowedRoles { get; set; } + public VPNType Type { get; set; } = VPNType.ZeroTier; + public object Configuration { get; set; } + } + public class LANCommanderWikiSettings { public bool Enabled { get; set; } = false; diff --git a/LANCommander/UI/Pages/Settings/VPN/Forms/ZeroTier.razor b/LANCommander/UI/Pages/Settings/VPN/Forms/ZeroTier.razor new file mode 100644 index 00000000..9b77cd50 --- /dev/null +++ b/LANCommander/UI/Pages/Settings/VPN/Forms/ZeroTier.razor @@ -0,0 +1,27 @@ +@using LANCommander.SDK.VPN.Configurations + + + + + +@code { + [Parameter] public string Value { get; set; } = ""; + [Parameter] public EventCallback ValueChanged { get; set; } + + [Parameter] public ZeroTierConfiguration Configuration { get; set; } = new ZeroTierConfiguration(); + [Parameter] public EventCallback ConfigurationChanged { get; set; } + + protected override async Task OnInitializedAsync() + { + if (Configuration == null) + { + Configuration = new ZeroTierConfiguration(); + await ConfigurationChanged.InvokeAsync(Configuration); + } + } + + async Task Changed() + { + await ConfigurationChanged.InvokeAsync(Configuration); + } +} diff --git a/LANCommander/UI/Pages/Settings/VPN/Index.razor b/LANCommander/UI/Pages/Settings/VPN/Index.razor new file mode 100644 index 00000000..875d6b5c --- /dev/null +++ b/LANCommander/UI/Pages/Settings/VPN/Index.razor @@ -0,0 +1,95 @@ +@page "/Settings/VPN" +@using LANCommander.SDK.VPN.Configurations +@using Microsoft.EntityFrameworkCore +@using LANCommander.Models; +@using LANCommander.Extensions +@using LANCommander.SDK.Enums +@layout SettingsLayout +@inject SettingService SettingService +@inject IMessageService MessageService +@inject RoleManager RoleManager +@attribute [Authorize(Roles = "Administrator")] + + + +
+
+ + + + + + + + + + + + + @switch (context.VPN.Type) + { + case VPNType.ZeroTier: + + break; + } + + + + + +
+ +@code { + LANCommanderSettings Settings; + + ICollection Roles = new List(); + IEnumerable AllowedRolesTransferItems { get; set; } = new List(); + List AllowedRolesTargetKeys { get; set; } = new List(); + ICollection SelectedAllowedRoles = new List(); + + protected override async Task OnInitializedAsync() + { + Settings = SettingService.GetSettings(); + Roles = await RoleManager.Roles.ToListAsync(); + + SelectedAllowedRoles = Roles.Where(r => Settings.VPN.AllowedRoles.Contains(r.Id)).ToList(); + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + AllowedRolesTransferItems = Roles.Select(r => new TransferItem() + { + Key = r.Id.ToString(), + Title = r.Name + }); + + if (SelectedAllowedRoles != null) + AllowedRolesTargetKeys = SelectedAllowedRoles.Select(i => i.Id.ToString()).ToList(); + } + } + + async Task OnChangeAllowedRoles(TransferChangeArgs e) + { + SelectedAllowedRoles = Roles.Where(r => e.TargetKeys.Contains(r.Id.ToString())).ToList(); + + Settings.VPN.AllowedRoles = SelectedAllowedRoles.Select(r => r.Id); + } + + private void Save() + { + try + { + SettingService.SaveSettings(Settings); + MessageService.Success("Settings saved!"); + } + catch + { + MessageService.Error("An unknown error occurred."); + } + } +}