From 9d3ef58005abe89c73b2b538b6044061f03ac4fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Antonio=20Maz=C3=B3n=20San=20Bartolom=C3=A9?= Date: Sun, 13 Mar 2022 13:22:28 +0100 Subject: [PATCH] #115 chore: added first setup page and enabled settings edition --- .../Core/Managers/ConfigurationManagerBase.cs | 9 ++- .../Core/Managers/FileConfigurationManager.cs | 3 +- .../Core/Managers/IConfigurationManager.cs | 1 + Linguard/Web/NLog.config | 15 ----- Linguard/Web/Pages/Setup.razor | 67 +++++++++++++++++++ Linguard/Web/Pages/_Host.cshtml | 8 ++- Linguard/Web/Program.cs | 4 ++ Linguard/Web/Services/LifetimeService.cs | 2 +- Linguard/Web/Shared/MainLayout.razor | 21 ++++-- Linguard/Web/Shared/ProfileMenu.razor | 4 +- Linguard/Web/Shared/SetupLayout.razor | 51 ++++++++++++++ Linguard/Web/Shared/WebSettings.razor | 2 +- Linguard/Web/Shared/WireguardSettings.razor | 21 ++++-- Linguard/Web/Web.csproj | 6 -- 14 files changed, 176 insertions(+), 38 deletions(-) delete mode 100644 Linguard/Web/NLog.config create mode 100644 Linguard/Web/Pages/Setup.razor create mode 100644 Linguard/Web/Shared/SetupLayout.razor diff --git a/Linguard/Core/Managers/ConfigurationManagerBase.cs b/Linguard/Core/Managers/ConfigurationManagerBase.cs index bc24966..cb2fb7a 100644 --- a/Linguard/Core/Managers/ConfigurationManagerBase.cs +++ b/Linguard/Core/Managers/ConfigurationManagerBase.cs @@ -23,6 +23,7 @@ protected ConfigurationManagerBase(IConfiguration configuration, IWorkingDirecto public IWorkingDirectory WorkingDirectory { get; set; } public ILogTarget LoggingTarget { get; set; } + public bool IsSetupNeeded { get; set; } = true; public void LoadDefaults() { LoadWebDefaults(); @@ -64,6 +65,12 @@ private void LoadWireguardDefaults() { } public abstract void Load(); - public abstract void Save(); + + public void Save() { + IsSetupNeeded = false; + DoSave(); + } + + protected abstract void DoSave(); public abstract string Export(); } \ No newline at end of file diff --git a/Linguard/Core/Managers/FileConfigurationManager.cs b/Linguard/Core/Managers/FileConfigurationManager.cs index 4a05028..0b367ca 100644 --- a/Linguard/Core/Managers/FileConfigurationManager.cs +++ b/Linguard/Core/Managers/FileConfigurationManager.cs @@ -34,7 +34,8 @@ public override void Load() { ); } } - public override void Save() { + + protected override void DoSave() { try { File.WriteAllText(ConfigurationFile.FullName, Export()); } diff --git a/Linguard/Core/Managers/IConfigurationManager.cs b/Linguard/Core/Managers/IConfigurationManager.cs index 8e460d2..137c4b4 100644 --- a/Linguard/Core/Managers/IConfigurationManager.cs +++ b/Linguard/Core/Managers/IConfigurationManager.cs @@ -18,6 +18,7 @@ public interface IConfigurationManager { /// Logging target of the application. /// ILogTarget LoggingTarget { get; set; } + bool IsSetupNeeded { get; set; } /// /// Load default options. /// diff --git a/Linguard/Web/NLog.config b/Linguard/Web/NLog.config deleted file mode 100644 index 3975d5d..0000000 --- a/Linguard/Web/NLog.config +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/Linguard/Web/Pages/Setup.razor b/Linguard/Web/Pages/Setup.razor new file mode 100644 index 0000000..5cffb2e --- /dev/null +++ b/Linguard/Web/Pages/Setup.razor @@ -0,0 +1,67 @@ +@page "/setup" +@layout SetupLayout +@using Linguard.Core.Utils +@using Linguard.Core.Managers +@using Linguard.Core.Configuration +@using Linguard.Log +@using Linguard.Web.Services + +@($"{AssemblyInfo.Product} | {Title}") + + + + + + +

Web

+ +
+ +

Wireguard

+ +
+ +

Logging

+ +
+
+
+ +
+
+
+
+ +@inject IConfigurationManager _configurationManager +@inject NotificationService _notificationService +@inject IWebService _webService +@inject ILinguardLogger _logger +@inject NavigationManager _navigationManager + +@code { + const string Title = "Setup"; + IConfiguration _configuration; + + protected override void OnInitialized() { + _configuration = (IConfiguration) _configurationManager.Configuration.Clone(); + } + + private void Save(IConfiguration configuration) { + try { + _logger.LogDebug("Saving configuration..."); + _configurationManager.Configuration = (IConfiguration)configuration.Clone(); + _configurationManager.Save(); + _logger.LogInformation("Setup completed. Redirecting..."); + _navigationManager.NavigateTo("/"); + } + catch (Exception e) { + _logger.LogError(e, "Setup failed: unable to save configuration."); + _notificationService.Notify(new NotificationMessage { + Severity = NotificationSeverity.Error, + Summary = "Failed to save configuration", + Detail = e.Message + }); + } + } +} diff --git a/Linguard/Web/Pages/_Host.cshtml b/Linguard/Web/Pages/_Host.cshtml index 950eacb..9f407f2 100644 --- a/Linguard/Web/Pages/_Host.cshtml +++ b/Linguard/Web/Pages/_Host.cshtml @@ -5,7 +5,13 @@ @{ Layout = "_Layout"; } - + + + + + + + @section styles { diff --git a/Linguard/Web/Program.cs b/Linguard/Web/Program.cs index 5505962..bc4a376 100644 --- a/Linguard/Web/Program.cs +++ b/Linguard/Web/Program.cs @@ -7,6 +7,7 @@ using Linguard.Core.OS; using Linguard.Core.Services; using Linguard.Log; +using Linguard.Web.Middlewares; using Linguard.Web.Services; using QRCoder; using Radzen; @@ -37,11 +38,14 @@ builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); +builder.Services.AddScoped(); builder.Logging.AddSimpleFileLogger(); var app = builder.Build(); +app.UseMiddleware(); + app.Lifetime.ApplicationStarted.Register(() => { app.Services.GetService()?.OnAppStarted(); }); diff --git a/Linguard/Web/Services/LifetimeService.cs b/Linguard/Web/Services/LifetimeService.cs index d2df685..1b9991a 100644 --- a/Linguard/Web/Services/LifetimeService.cs +++ b/Linguard/Web/Services/LifetimeService.cs @@ -53,12 +53,12 @@ private void LoadConfiguration() { _configurationManager.WorkingDirectory.BaseDirectory = GetWorkingDirectory(); try { _configurationManager.Load(); + _configurationManager.IsSetupNeeded = false; _logger.LogInformation("Configuration loaded."); } catch (ConfigurationNotLoadedError e) { _logger.LogWarning(e, "Unable to load configuration. Using defaults."); _configurationManager.LoadDefaults(); - _configurationManager.Save(); } } diff --git a/Linguard/Web/Shared/MainLayout.razor b/Linguard/Web/Shared/MainLayout.razor index 3a293c7..1f84164 100644 --- a/Linguard/Web/Shared/MainLayout.razor +++ b/Linguard/Web/Shared/MainLayout.razor @@ -1,4 +1,6 @@ @using Linguard.Core.Utils +@using Linguard.Core.Managers +@using Linguard.Log @inherits LayoutComponentBase @@ -21,8 +23,8 @@ } -
- +
+
@@ -54,6 +56,10 @@ +@inject IConfigurationManager _configurationManager +@inject NavigationManager _navigationManager +@inject ILinguardLogger _logger; + @code { private RadzenSidebar _sidebar; private RadzenBody _body; @@ -65,8 +71,15 @@ await InvokeAsync(() => _body.Toggle()); } - protected override void OnParametersSet() - { + protected override void OnParametersSet() { errorBoundary?.Recover(); } + + protected override void OnInitialized() { + if (_configurationManager.IsSetupNeeded) { + _logger.LogInformation("Setup required. Redirecting..."); + _navigationManager.NavigateTo("/setup"); + } + } + } diff --git a/Linguard/Web/Shared/ProfileMenu.razor b/Linguard/Web/Shared/ProfileMenu.razor index dee7a11..91ae931 100644 --- a/Linguard/Web/Shared/ProfileMenu.razor +++ b/Linguard/Web/Shared/ProfileMenu.razor @@ -1,11 +1,11 @@ @using Linguard.Core.Models
- - + diff --git a/Linguard/Web/Shared/SetupLayout.razor b/Linguard/Web/Shared/SetupLayout.razor new file mode 100644 index 0000000..d256f89 --- /dev/null +++ b/Linguard/Web/Shared/SetupLayout.razor @@ -0,0 +1,51 @@ +@using Linguard.Core.Managers +@inherits LayoutComponentBase + + + + + + + + + + + + + + @Body + + + + + + + + + + +
+
+
+
+
+ +@inject IConfigurationManager _configurationManager +@inject NavigationManager _navigationManager + +@code { + private RadzenBody _body; + private ErrorBoundary? errorBoundary; + + protected override void OnParametersSet() { + errorBoundary?.Recover(); + } + + protected override void OnInitialized() { + base.OnInitialized(); + if (!_configurationManager.IsSetupNeeded) { + _navigationManager.NavigateTo("/"); + } + } + +} diff --git a/Linguard/Web/Shared/WebSettings.razor b/Linguard/Web/Shared/WebSettings.razor index de4883d..3e33028 100644 --- a/Linguard/Web/Shared/WebSettings.razor +++ b/Linguard/Web/Shared/WebSettings.razor @@ -12,7 +12,7 @@
+ @bind-Value="@Configuration.LoginAttempts"/>
diff --git a/Linguard/Web/Shared/WireguardSettings.razor b/Linguard/Web/Shared/WireguardSettings.razor index e4a6327..d2db50b 100644 --- a/Linguard/Web/Shared/WireguardSettings.razor +++ b/Linguard/Web/Shared/WireguardSettings.razor @@ -12,7 +12,9 @@
- +
@@ -24,7 +26,9 @@
- +
@@ -36,7 +40,9 @@
- +
@@ -51,7 +57,8 @@
- +
@@ -63,7 +70,8 @@
- +
@@ -75,7 +83,8 @@
- +
diff --git a/Linguard/Web/Web.csproj b/Linguard/Web/Web.csproj index 314874a..fc79711 100644 --- a/Linguard/Web/Web.csproj +++ b/Linguard/Web/Web.csproj @@ -25,12 +25,6 @@ - - - PreserveNewest - - - <_ContentIncludedByDefault Remove="Pages\Components\SimpleAlert.razor" /> <_ContentIncludedByDefault Remove="wwwroot\ts\helper.ts" />