From f2cc603195815f7750edf8ed36c4843cbe238140 Mon Sep 17 00:00:00 2001 From: ThePra Date: Sun, 19 Apr 2020 03:04:46 +0200 Subject: [PATCH] Many more updates and cleanups --- Seenginx/Components/FileItem.razor | 15 +-- Seenginx/Components/FilesWithEditor.razor.cs | 44 +++++---- Seenginx/Pages/Nginx.razor | 2 +- Seenginx/Pages/Nginx.razor.cs | 6 +- Seenginx/Pages/NginxLogs.razor | 2 +- Seenginx/Pages/NginxLogs.razor.cs | 2 - Seenginx/Pages/_Host.cshtml | 2 +- Seenginx/SCSS/override-framework.scss | 5 + Seenginx/Seenginx.csproj | 3 +- Seenginx/Services/INginxService.cs | 2 +- Seenginx/Services/Models/ConfigPaths.cs | 13 +++ Seenginx/Services/NginxService.cs | 98 +++++++++++++------- Seenginx/Shared/NavMenu.razor | 12 +-- Seenginx/Shared/NavMenu.razor.cs | 4 +- Seenginx/Startup.cs | 11 +++ Seenginx/_Imports.razor | 2 + Seenginx/wwwroot/css/main.css | 4 + Seenginx/wwwroot/css/main.min.css | 2 +- 18 files changed, 147 insertions(+), 82 deletions(-) create mode 100644 Seenginx/Services/Models/ConfigPaths.cs diff --git a/Seenginx/Components/FileItem.razor b/Seenginx/Components/FileItem.razor index 8053436..59c449c 100644 --- a/Seenginx/Components/FileItem.razor +++ b/Seenginx/Components/FileItem.razor @@ -1,12 +1,5 @@ @inherits FileItemBase - - -
-
-

@File.Folder

-

- @File.Name -

-
-
-
\ No newline at end of file + +

@File.Folder

+
@File.Name
+
diff --git a/Seenginx/Components/FilesWithEditor.razor.cs b/Seenginx/Components/FilesWithEditor.razor.cs index 201d5e9..751f0b5 100644 --- a/Seenginx/Components/FilesWithEditor.razor.cs +++ b/Seenginx/Components/FilesWithEditor.razor.cs @@ -49,6 +49,14 @@ namespace Seenginx.Components [Parameter] public CFile SelectedFile { get; set; } + protected async override Task OnInitializedAsync() + { + SelectedFilter = Filters.First(); + + await base.OnInitializedAsync(); + } + + protected async Task OnDeselectClick() { SelectedFile = null; @@ -94,31 +102,27 @@ namespace Seenginx.Components { if (SelectedFilter == "All") Files.ForEach(f => { if (f.Name.ToLower().Contains(SearchInput)) f.Unhide(); else f.Hide(); }); - else if (SelectedFilter == "Root") - Files.ForEach(f => - { - if (f.Folder == FilterFolder[SelectedFilter]) - f.Unhide(); - else - f.Hide(); - }); else Files.ForEach(f => { - if (f.Folder.Contains(FilterFolder[SelectedFilter])) - f.Unhide(); + if (SelectedFilter == "Root") + { + if (f.Folder == FilterFolder[SelectedFilter] && f.Folder.ToLower().Contains(SearchInput.ToLower())) + f.Unhide(); + else + f.Hide(); + } else - f.Hide(); + { + Files.ForEach(f => + { + if (f.Folder.Contains(FilterFolder[SelectedFilter]) && f.Folder.ToLower().Contains(SearchInput.ToLower())) + f.Unhide(); + else + f.Hide(); + }); + } }); - //Files.ForEach(f => f.Unhide()); - //else - // Files.ForEach(f => - // { - // if (f.Name.ToLower().Contains(searchInput.ToLower())) - // f.Unhide(); - // else - // f.Hide(); - // }); } } diff --git a/Seenginx/Pages/Nginx.razor b/Seenginx/Pages/Nginx.razor index 3a47d09..b8d9962 100644 --- a/Seenginx/Pages/Nginx.razor +++ b/Seenginx/Pages/Nginx.razor @@ -15,7 +15,7 @@ - +

Qualcosa

diff --git a/Seenginx/Pages/Nginx.razor.cs b/Seenginx/Pages/Nginx.razor.cs index 4ca6575..dfc1dc8 100644 --- a/Seenginx/Pages/Nginx.razor.cs +++ b/Seenginx/Pages/Nginx.razor.cs @@ -1,6 +1,4 @@ using Microsoft.AspNetCore.Components; -using Radzen; -using Radzen.Blazor; using Seenginx.Models; using Seenginx.Services; using System; @@ -28,12 +26,12 @@ namespace Seenginx.Pages protected override async Task OnInitializedAsync() { ConfigFiles.AddRange(await NginxService.GetFilesAsync()); - Filters.AddRange(new List { "All", "Root", "Conf.d", "Enabled", "Disabled" }); + Filters.AddRange(new List { "All", "Root", "Conf.d", "Available", "Enabled" }); FilterFolder.Add("All", null); FilterFolder.Add("Root", "/"); FilterFolder.Add("Conf.d", "/conf.d"); + FilterFolder.Add("Available", "/sites-available"); FilterFolder.Add("Enabled", "/sites-enabled"); - FilterFolder.Add("Disabled", "/sites-disabled"); await base.OnInitializedAsync(); } diff --git a/Seenginx/Pages/NginxLogs.razor b/Seenginx/Pages/NginxLogs.razor index 7a3bfb1..199da55 100644 --- a/Seenginx/Pages/NginxLogs.razor +++ b/Seenginx/Pages/NginxLogs.razor @@ -1,5 +1,5 @@ @inherits NginxLogsBase -@page "/nginx/logs" +@page "/nginxlogs" diff --git a/Seenginx/Pages/NginxLogs.razor.cs b/Seenginx/Pages/NginxLogs.razor.cs index f99524d..089ee74 100644 --- a/Seenginx/Pages/NginxLogs.razor.cs +++ b/Seenginx/Pages/NginxLogs.razor.cs @@ -1,6 +1,4 @@ using Microsoft.AspNetCore.Components; -using Radzen; -using Radzen.Blazor; using Seenginx.Models; using Seenginx.Services; using System; diff --git a/Seenginx/Pages/_Host.cshtml b/Seenginx/Pages/_Host.cshtml index 6870890..03a7da0 100644 --- a/Seenginx/Pages/_Host.cshtml +++ b/Seenginx/Pages/_Host.cshtml @@ -42,6 +42,6 @@ - + diff --git a/Seenginx/SCSS/override-framework.scss b/Seenginx/SCSS/override-framework.scss index 3ac1149..0390437 100644 --- a/Seenginx/SCSS/override-framework.scss +++ b/Seenginx/SCSS/override-framework.scss @@ -24,3 +24,8 @@ html { .menu-list li a { font-family: Ubuntu-Mono,'Noto Mono' } + +.menu-list a.active { + background-color: #3273dc; + color: #fff; +} \ No newline at end of file diff --git a/Seenginx/Seenginx.csproj b/Seenginx/Seenginx.csproj index 3097dc6..d4d010a 100644 --- a/Seenginx/Seenginx.csproj +++ b/Seenginx/Seenginx.csproj @@ -18,9 +18,10 @@ + - + diff --git a/Seenginx/Services/INginxService.cs b/Seenginx/Services/INginxService.cs index ca2e219..b092762 100644 --- a/Seenginx/Services/INginxService.cs +++ b/Seenginx/Services/INginxService.cs @@ -6,7 +6,7 @@ namespace Seenginx.Services { public interface INginxService { - Task> GetFilesAsync(NginxFilter filter = null); + Task> GetFilesAsync(); Task> TestNginxConfigurations(); } } \ No newline at end of file diff --git a/Seenginx/Services/Models/ConfigPaths.cs b/Seenginx/Services/Models/ConfigPaths.cs new file mode 100644 index 0000000..c73ce82 --- /dev/null +++ b/Seenginx/Services/Models/ConfigPaths.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Seenginx.Services.Models +{ + public class ConfigPaths + { + public string NginxPath { get; set; } + public string SystemDPath { get; set; } + } +} diff --git a/Seenginx/Services/NginxService.cs b/Seenginx/Services/NginxService.cs index 6e183a7..d996359 100644 --- a/Seenginx/Services/NginxService.cs +++ b/Seenginx/Services/NginxService.cs @@ -1,6 +1,8 @@ using Seenginx.Models; +using Seenginx.Services.Models; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Threading.Tasks; @@ -8,38 +10,72 @@ namespace Seenginx.Services { public class NginxService : INginxService { - public async Task> GetFilesAsync(NginxFilter filter = null) + private readonly ConfigPaths ConfigPaths; + + public NginxService(ConfigPaths configPaths) { - return new List() { - new ConfigFile - { - Folder = "/conf.d", - Name = "matrix.conf", - LastUpdated = DateTime.Now.AddDays(new Random(DateTime.Now.Millisecond).Next(-50,0)), - OriginalBody = "something something", - Owners = new string[]{ "root" }, - Permissions = "-drwe-rw-r" - }, - new ConfigFile - { - Folder = "/conf.d", - Name = "pleroma.conf", - LastUpdated = DateTime.Now.AddDays(new Random(DateTime.Now.Millisecond).Next(-100,0)), - OriginalBody = "something something 2", - Owners = new string[]{ "root", "void" }, - Permissions = "-drwe-rw-r" - }, - new ConfigFile - { - Folder = "/conf.d", - Name = "ghost.conf", - LastUpdated = DateTime.Now.AddDays(new Random(DateTime.Now.Millisecond).Next(-25,0)), - OriginalBody = "something something 3", - Owners = new string[]{ "root" }, - Permissions = "-drwe-rw-r", - CanBeDeleted = false - } - }; + ConfigPaths = configPaths; + } + + + public async Task> GetFilesAsync() + { + var rootConfigs = Directory.GetFiles(ConfigPaths.NginxPath, "*.conf"); + var confdConfigs = Directory.GetFiles(Path.Combine(ConfigPaths.NginxPath, "conf.d"), "*.conf"); + var sitesAvailableConfigs = Directory.GetFiles(Path.Combine(ConfigPaths.NginxPath, "sites-available"), "*.conf"); + var sitesEnabledConfigs = Directory.GetFiles(Path.Combine(ConfigPaths.NginxPath, "sites-enabled"), "*.conf"); + + var rootConfigFiles = rootConfigs.Select(fp => + { + var fileName = Path.GetFileName(fp); + var configFile = new ConfigFile(); + configFile.CanBeDeleted = fileName != "nginx.conf"; + configFile.Folder = "/"; + configFile.LastUpdated = File.GetLastWriteTime(fp); + configFile.Name = fileName; + configFile.OriginalBody = File.ReadAllText(fp); + return configFile; + }); + var confdConfigFiles = confdConfigs.Select(fp => + { + var fileName = Path.GetFileName(fp); + var configFile = new ConfigFile(); + configFile.CanBeDeleted = true; + configFile.Folder = "/conf.d"; + configFile.LastUpdated = File.GetLastWriteTime(fp); + configFile.Name = fileName; + configFile.OriginalBody = File.ReadAllText(fp); + return configFile; + }); + var sitesAvailableConfigFiles = sitesAvailableConfigs.Select(fp => + { + var fileName = Path.GetFileName(fp); + var configFile = new ConfigFile(); + configFile.CanBeDeleted = true; + configFile.Folder = "/sites-available"; + configFile.LastUpdated = File.GetLastWriteTime(fp); + configFile.Name = fileName; + configFile.OriginalBody = File.ReadAllText(fp); + return configFile; + }); + var sitesEnabledConfigFiles = sitesEnabledConfigs.Select(fp => + { + var fileName = Path.GetFileName(fp); + var configFile = new ConfigFile(); + configFile.CanBeDeleted = true; + configFile.Folder = "/sites-enabled"; + configFile.LastUpdated = File.GetLastWriteTime(fp); + configFile.Name = fileName; + configFile.OriginalBody = File.ReadAllText(fp); + return configFile; + }); + var finalList = new List(); + finalList.AddRange(rootConfigFiles); + finalList.AddRange(confdConfigFiles); + finalList.AddRange(sitesAvailableConfigFiles); + finalList.AddRange(sitesEnabledConfigFiles); + + return finalList; } public async Task> TestNginxConfigurations() diff --git a/Seenginx/Shared/NavMenu.razor b/Seenginx/Shared/NavMenu.razor index c7d1d17..a31c4b7 100644 --- a/Seenginx/Shared/NavMenu.razor +++ b/Seenginx/Shared/NavMenu.razor @@ -22,10 +22,10 @@
  • - + ActiveClass="@ActiveNav.GetValueOrDefault("nginxlogs")" + @onclick="@(e => SelectMenuItem("nginxlogs"))"> Logs @@ -46,10 +46,10 @@
  • - + ActiveClass="@ActiveNav.GetValueOrDefault("systemdlogs")" + @onclick="@(e => SelectMenuItem("systemdlogs"))"> Logs diff --git a/Seenginx/Shared/NavMenu.razor.cs b/Seenginx/Shared/NavMenu.razor.cs index 77586bb..a974adb 100644 --- a/Seenginx/Shared/NavMenu.razor.cs +++ b/Seenginx/Shared/NavMenu.razor.cs @@ -16,9 +16,9 @@ namespace Seenginx.Shared ActiveNav = new Dictionary { { "nginx", null }, - { "nginx/logs", null }, + { "nginxlogs", null }, { "systemd", null }, - { "systemd/logs", null }, + { "systemdlogs", null }, { "dmesg", null } }; await base.OnInitializedAsync(); diff --git a/Seenginx/Startup.cs b/Seenginx/Startup.cs index 2414d58..dd5c15b 100644 --- a/Seenginx/Startup.cs +++ b/Seenginx/Startup.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Blazorise; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Hosting; @@ -9,6 +10,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Seenginx.Services; +using Seenginx.Services.Models; namespace Seenginx { @@ -31,6 +33,15 @@ namespace Seenginx #endif ; services.AddServerSideBlazor(); + services.AddBlazorise(options => + { + options.ChangeTextOnKeyPress = true; // optional + }); + var configPaths = new ConfigPaths(); + configPaths.NginxPath = @"C:\nginx\"; + configPaths.SystemDPath = @"C:\systemd\system\"; + + services.AddSingleton(configPaths); services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/Seenginx/_Imports.razor b/Seenginx/_Imports.razor index 5874000..48194b5 100644 --- a/Seenginx/_Imports.razor +++ b/Seenginx/_Imports.razor @@ -9,4 +9,6 @@ @using Seenginx.Shared @using Seenginx.Models @using Seenginx.Components +@using Blazorise +@using Blazorise.Bulma diff --git a/Seenginx/wwwroot/css/main.css b/Seenginx/wwwroot/css/main.css index 5bc73e2..0acc234 100644 --- a/Seenginx/wwwroot/css/main.css +++ b/Seenginx/wwwroot/css/main.css @@ -88,6 +88,10 @@ html { .menu-list li a { font-family: Ubuntu-Mono,'Noto Mono'; } +.menu-list a.active { + background-color: #3273dc; + color: #fff; } + .main { display: flex; flex-wrap: nowrap; diff --git a/Seenginx/wwwroot/css/main.min.css b/Seenginx/wwwroot/css/main.min.css index 40674f3..f6e5075 100644 --- a/Seenginx/wwwroot/css/main.min.css +++ b/Seenginx/wwwroot/css/main.min.css @@ -1 +1 @@ -#blazor-error-ui{background:#ffffe0;bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.25rem .7rem 1.25rem;position:fixed;width:100%;z-index:1000;}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rem;top:.5rem;}.isHidden{display:none;}@media only screen and (max-width:37.5em){.isHiddenMobile{display:none;}}.petiteCaps{font-variant:petite-caps;}.flexCenter{display:flex;align-content:center;align-items:center;}.isNoWrap{white-space:nowrap;}.isFinger{cursor:pointer;}.neomorph{box-shadow:-8px -8px 16px rgba(251,238,208,.5),8px 8px 16px rgba(241,185,65,.5);}.neomorphSmall{box-shadow:-6px -6px 12px rgba(251,238,208,.5),6px 6px 12px rgba(241,185,65,.5);}.neomorphBottom{filter:drop-shadow(8px 8px 14px #f1b941);}.gradientBackground{background:linear-gradient(to right bottom,#f7d794,#f5cd79);}.borderR{border-radius:14px;}.borderRSmall{border-radius:7px;}.borderRBig{border-radius:28px;}.bg{background:#f6d287;}.sameMarginBottom{margin-bottom:1rem !important;}@font-face{font-family:'Ubuntu';src:url(/fonts/ubuntu-light-webfont.woff2) format("woff2");font-weight:300;font-style:normal;}@font-face{font-family:'Ubuntu-Mono';src:url(/fonts/ubuntumono-regular-webfont.woff2) format("woff2");font-style:normal;}html{font-family:Ubuntu,sans-serif;}.pure-menu-heading{text-transform:none;font-family:Ubuntu-Mono,'Noto Mono';}.menu-list li a{font-family:Ubuntu-Mono,'Noto Mono';}.main{display:flex;flex-wrap:nowrap;align-items:start;width:100%;height:100vh;padding:2.5%;}.mainNav{overflow-y:auto;padding:14px;width:17%;margin-right:40px;}.mainPage{overflow-y:auto;padding:28px;width:calc(83% - 40px);align-self:stretch;}.files{display:flex;flex-direction:column;align-items:stretch;}.filesWithEditor{display:flex;align-items:stretch;height:100%;}.files .buttons{justify-content:space-between;align-items:stretch;}.filesList{height:100%;overflow-y:auto;} \ No newline at end of file +#blazor-error-ui{background:#ffffe0;bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.25rem .7rem 1.25rem;position:fixed;width:100%;z-index:1000;}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rem;top:.5rem;}.isHidden{display:none;}@media only screen and (max-width:37.5em){.isHiddenMobile{display:none;}}.petiteCaps{font-variant:petite-caps;}.flexCenter{display:flex;align-content:center;align-items:center;}.isNoWrap{white-space:nowrap;}.isFinger{cursor:pointer;}.neomorph{box-shadow:-8px -8px 16px rgba(251,238,208,.5),8px 8px 16px rgba(241,185,65,.5);}.neomorphSmall{box-shadow:-6px -6px 12px rgba(251,238,208,.5),6px 6px 12px rgba(241,185,65,.5);}.neomorphBottom{filter:drop-shadow(8px 8px 14px #f1b941);}.gradientBackground{background:linear-gradient(to right bottom,#f7d794,#f5cd79);}.borderR{border-radius:14px;}.borderRSmall{border-radius:7px;}.borderRBig{border-radius:28px;}.bg{background:#f6d287;}.sameMarginBottom{margin-bottom:1rem !important;}@font-face{font-family:'Ubuntu';src:url(/fonts/ubuntu-light-webfont.woff2) format("woff2");font-weight:300;font-style:normal;}@font-face{font-family:'Ubuntu-Mono';src:url(/fonts/ubuntumono-regular-webfont.woff2) format("woff2");font-style:normal;}html{font-family:Ubuntu,sans-serif;}.pure-menu-heading{text-transform:none;font-family:Ubuntu-Mono,'Noto Mono';}.menu-list li a{font-family:Ubuntu-Mono,'Noto Mono';}.menu-list a.active{background-color:#3273dc;color:#fff;}.main{display:flex;flex-wrap:nowrap;align-items:start;width:100%;height:100vh;padding:2.5%;}.mainNav{overflow-y:auto;padding:14px;width:17%;margin-right:40px;}.mainPage{overflow-y:auto;padding:28px;width:calc(83% - 40px);align-self:stretch;}.files{display:flex;flex-direction:column;align-items:stretch;}.filesWithEditor{display:flex;align-items:stretch;height:100%;}.files .buttons{justify-content:space-between;align-items:stretch;}.filesList{height:100%;overflow-y:auto;} \ No newline at end of file