From b423b9fa191eb8a95a9d1cc248cd2e6512f7595c Mon Sep 17 00:00:00 2001 From: ChiaraBm Date: Wed, 5 Feb 2025 16:52:49 +0100 Subject: [PATCH] Updated the usage of mooncore components --- .../Admin/Nodes/NodeAllocationsController.cs | 2 +- ...mController.cs => NodeStatusController.cs} | 7 +- .../Admin/Nodes/NodesController.cs | 6 + .../Servers/ServerVariablesController.cs | 2 +- .../Admin/Servers/ServersController.cs | 2 +- .../Admin/Stars/StarDockerImagesController.cs | 6 + .../Admin/Stars/StarImportExportController.cs | 2 +- .../Admin/Stars/StarVariablesController.cs | 2 +- .../Admin/Stars/StarsController.cs | 2 +- .../Controllers/Users/ServersController.cs | 12 +- .../Properties/launchSettings.json | 4 +- MoonlightServers.Frontend/Program.cs | 4 - .../AllocationsNodeUpdate.razor | 41 +++--- .../InstallationStarUpdate.razor | 17 ++- .../UI/Views/Admin/All/Create.razor | 10 +- .../UI/Views/Admin/All/Index.razor | 112 +++++++++------ .../UI/Views/Admin/All/Update.razor | 12 +- .../UI/Views/Admin/Nodes/Create.razor | 67 ++++----- .../UI/Views/Admin/Nodes/Index.razor | 132 ++++++++++------- .../UI/Views/Admin/Nodes/Update.razor | 23 +-- .../UI/Views/Admin/Stars/Create.razor | 51 ++++--- .../UI/Views/Admin/Stars/Index.razor | 134 +++++++++++------- .../UI/Views/Admin/Stars/Update.razor | 48 +------ .../Requests/Admin/Nodes/CreateNodeRequest.cs | 8 +- 24 files changed, 368 insertions(+), 338 deletions(-) rename MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/{NodeSystemController.cs => NodeStatusController.cs} (91%) diff --git a/MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodeAllocationsController.cs b/MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodeAllocationsController.cs index 428974b..ffae952 100644 --- a/MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodeAllocationsController.cs +++ b/MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodeAllocationsController.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; -using MoonCore.Attributes; +using MoonCore.Extended.PermFilter; using MoonCore.Exceptions; using MoonCore.Extended.Abstractions; using MoonCore.Extended.Helpers; diff --git a/MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodeSystemController.cs b/MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodeStatusController.cs similarity index 91% rename from MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodeSystemController.cs rename to MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodeStatusController.cs index 60c34d1..a0ad71a 100644 --- a/MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodeSystemController.cs +++ b/MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodeStatusController.cs @@ -2,7 +2,7 @@ using System.Diagnostics; using Microsoft.AspNetCore.Mvc; using MoonCore.Exceptions; using MoonCore.Extended.Abstractions; -using MoonCore.Helpers; +using MoonCore.Extended.PermFilter; using MoonlightServers.ApiServer.Database.Entities; using MoonlightServers.ApiServer.Services; using MoonlightServers.Shared.Http.Responses.Admin.Nodes.Sys; @@ -11,18 +11,19 @@ namespace MoonlightServers.ApiServer.Http.Controllers.Admin.Nodes; [ApiController] [Route("api/admin/servers/nodes")] -public class NodeSystemController : Controller +public class NodeStatusController : Controller { private readonly DatabaseRepository NodeRepository; private readonly NodeService NodeService; - public NodeSystemController(DatabaseRepository nodeRepository, NodeService nodeService) + public NodeStatusController(DatabaseRepository nodeRepository, NodeService nodeService) { NodeRepository = nodeRepository; NodeService = nodeService; } [HttpGet("{nodeId}/system/status")] + [RequirePermission("admin.servers.nodes.status")] public async Task GetStatus([FromRoute] int nodeId) { var node = GetNode(nodeId); diff --git a/MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodesController.cs b/MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodesController.cs index 386a74a..48b2afb 100644 --- a/MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodesController.cs +++ b/MoonlightServers.ApiServer/Http/Controllers/Admin/Nodes/NodesController.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using MoonCore.Extended.Abstractions; using MoonCore.Extended.Helpers; +using MoonCore.Extended.PermFilter; using MoonCore.Helpers; using MoonCore.Models; using MoonlightServers.ApiServer.Database.Entities; @@ -28,18 +29,21 @@ public class NodesController : Controller } [HttpGet] + [RequirePermission("admin.servers.nodes.get")] public async Task> Get([FromQuery] int page, [FromQuery] int pageSize) { return await CrudHelper.Get(page, pageSize); } [HttpGet("{id:int}")] + [RequirePermission("admin.servers.nodes.get")] public async Task GetSingle([FromRoute] int id) { return await CrudHelper.GetSingle(id); } [HttpPost] + [RequirePermission("admin.servers.nodes.create")] public async Task Create([FromBody] CreateNodeRequest request) { var node = Mapper.Map(request); @@ -52,12 +56,14 @@ public class NodesController : Controller } [HttpPatch("{id:int}")] + [RequirePermission("admin.servers.nodes.update")] public async Task Update([FromRoute] int id, [FromBody] UpdateNodeRequest request) { return await CrudHelper.Update(id, request); } [HttpDelete("{id:int}")] + [RequirePermission("admin.servers.nodes.delete")] public async Task Delete([FromRoute] int id) { await CrudHelper.Delete(id); diff --git a/MoonlightServers.ApiServer/Http/Controllers/Admin/Servers/ServerVariablesController.cs b/MoonlightServers.ApiServer/Http/Controllers/Admin/Servers/ServerVariablesController.cs index 4b41ba3..8cc1a42 100644 --- a/MoonlightServers.ApiServer/Http/Controllers/Admin/Servers/ServerVariablesController.cs +++ b/MoonlightServers.ApiServer/Http/Controllers/Admin/Servers/ServerVariablesController.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; -using MoonCore.Attributes; +using MoonCore.Extended.PermFilter; using MoonCore.Exceptions; using MoonCore.Extended.Abstractions; using MoonCore.Helpers; diff --git a/MoonlightServers.ApiServer/Http/Controllers/Admin/Servers/ServersController.cs b/MoonlightServers.ApiServer/Http/Controllers/Admin/Servers/ServersController.cs index bd29d4a..f55bc22 100644 --- a/MoonlightServers.ApiServer/Http/Controllers/Admin/Servers/ServersController.cs +++ b/MoonlightServers.ApiServer/Http/Controllers/Admin/Servers/ServersController.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; -using MoonCore.Attributes; +using MoonCore.Extended.PermFilter; using MoonCore.Exceptions; using MoonCore.Extended.Abstractions; using MoonCore.Extended.Helpers; diff --git a/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarDockerImagesController.cs b/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarDockerImagesController.cs index ab00aad..3948de6 100644 --- a/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarDockerImagesController.cs +++ b/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarDockerImagesController.cs @@ -3,6 +3,7 @@ using Microsoft.EntityFrameworkCore; using MoonCore.Exceptions; using MoonCore.Extended.Abstractions; using MoonCore.Extended.Helpers; +using MoonCore.Extended.PermFilter; using MoonCore.Helpers; using MoonCore.Models; using MoonlightServers.ApiServer.Database.Entities; @@ -48,6 +49,7 @@ public class StarDockerImagesController : Controller } [HttpGet("{starId:int}/dockerImages")] + [RequirePermission("admin.servers.stars.get")] public async Task> Get([FromRoute] int starId, [FromQuery] int page, [FromQuery] int pageSize) { await ApplyStar(starId); @@ -56,6 +58,7 @@ public class StarDockerImagesController : Controller } [HttpGet("{starId:int}/dockerImages/{id:int}")] + [RequirePermission("admin.servers.stars.get")] public async Task GetSingle([FromRoute] int starId, [FromRoute] int id) { await ApplyStar(starId); @@ -64,6 +67,7 @@ public class StarDockerImagesController : Controller } [HttpPost("{starId:int}/dockerImages")] + [RequirePermission("admin.servers.stars.create")] public async Task Create([FromRoute] int starId, [FromBody] CreateStarDockerImageRequest request) { await ApplyStar(starId); @@ -77,6 +81,7 @@ public class StarDockerImagesController : Controller } [HttpPatch("{starId:int}/dockerImages/{id:int}")] + [RequirePermission("admin.servers.stars.update")] public async Task Update([FromRoute] int starId, [FromRoute] int id, [FromBody] UpdateStarDockerImageRequest request) { @@ -86,6 +91,7 @@ public class StarDockerImagesController : Controller } [HttpDelete("{starId:int}/dockerImages/{id:int}")] + [RequirePermission("admin.servers.stars.delete")] public async Task Delete([FromRoute] int starId, [FromRoute] int id) { await ApplyStar(starId); diff --git a/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarImportExportController.cs b/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarImportExportController.cs index 1ae592f..3bcf473 100644 --- a/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarImportExportController.cs +++ b/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarImportExportController.cs @@ -1,6 +1,6 @@ using System.Text; using Microsoft.AspNetCore.Mvc; -using MoonCore.Attributes; +using MoonCore.Extended.PermFilter; using MoonCore.Exceptions; using MoonCore.Helpers; using MoonlightServers.ApiServer.Services; diff --git a/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarVariablesController.cs b/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarVariablesController.cs index d15952a..8d72c8c 100644 --- a/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarVariablesController.cs +++ b/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarVariablesController.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; -using MoonCore.Attributes; +using MoonCore.Extended.PermFilter; using MoonCore.Exceptions; using MoonCore.Extended.Abstractions; using MoonCore.Extended.Helpers; diff --git a/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarsController.cs b/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarsController.cs index d3a1916..7901b14 100644 --- a/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarsController.cs +++ b/MoonlightServers.ApiServer/Http/Controllers/Admin/Stars/StarsController.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; -using MoonCore.Attributes; +using MoonCore.Extended.PermFilter; using MoonCore.Extended.Abstractions; using MoonCore.Extended.Helpers; using MoonCore.Helpers; diff --git a/MoonlightServers.ApiServer/Http/Controllers/Users/ServersController.cs b/MoonlightServers.ApiServer/Http/Controllers/Users/ServersController.cs index 920e1a1..18f126f 100644 --- a/MoonlightServers.ApiServer/Http/Controllers/Users/ServersController.cs +++ b/MoonlightServers.ApiServer/Http/Controllers/Users/ServersController.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; -using MoonCore.Attributes; +using MoonCore.Extended.PermFilter; using MoonCore.Exceptions; using MoonCore.Extended.Abstractions; using MoonCore.Extensions; @@ -31,14 +31,15 @@ public class ServersController : Controller [RequirePermission("meta.authenticated")] public async Task> GetAll([FromQuery] int page, [FromQuery] int pageSize) { - var user = User.AsIdentity(); + var userIdClaim = User.Claims.First(x => x.Type == "userId"); + var userId = int.Parse(userIdClaim.Value); var query = ServerRepository .Get() .Include(x => x.Allocations) .Include(x => x.Star) .Include(x => x.Node) - .Where(x => x.OwnerId == user.Id); + .Where(x => x.OwnerId == userId); var count = await query.CountAsync(); var items = await query.Skip(page * pageSize).Take(pageSize).ToArrayAsync(); @@ -177,7 +178,8 @@ public class ServersController : Controller private async Task GetServerWithPermCheck(int serverId, Func, IQueryable>? queryModifier = null) { - var user = User.AsIdentity(); + var userIdClaim = User.Claims.First(x => x.Type == "userId"); + var userId = int.Parse(userIdClaim.Value); var query = ServerRepository .Get() @@ -192,7 +194,7 @@ public class ServersController : Controller if (server == null) throw new HttpApiException("No server with this id found", 404); - if (server.OwnerId == user.Id) // The current user is the owner + if (server.OwnerId == userId) // The current user is the owner return server; if (User.HasPermission("admin.servers.get")) // The current user is an admin diff --git a/MoonlightServers.ApiServer/Properties/launchSettings.json b/MoonlightServers.ApiServer/Properties/launchSettings.json index 624ac11..ad29068 100644 --- a/MoonlightServers.ApiServer/Properties/launchSettings.json +++ b/MoonlightServers.ApiServer/Properties/launchSettings.json @@ -9,7 +9,9 @@ "applicationUrl": "http://localhost:5269", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", - "MOONLIGHT_APP_PUBLICURL": "http://localhost:5269" + "MOONLIGHT_APP_PUBLICURL": "http://localhost:5269", + "HTTP_PROXY": "", + "HTTPS_PROXY": "" }, "commandLineArgs": "--frontend-asset js/XtermBlazor.min.js --frontend-asset js/moonlightServers.js --frontend-asset js/addon-fit.js" } diff --git a/MoonlightServers.Frontend/Program.cs b/MoonlightServers.Frontend/Program.cs index 959adb2..6def57a 100644 --- a/MoonlightServers.Frontend/Program.cs +++ b/MoonlightServers.Frontend/Program.cs @@ -1,9 +1,5 @@ -using MoonCore.Blazor.Tailwind.Forms; -using MoonCore.Blazor.Tailwind.Forms.Components; using Moonlight.Client; -FormComponentRepository.Set(); - var startup = new Startup(); await startup.Run(args, [ diff --git a/MoonlightServers.Frontend/UI/Components/Nodes/UpdateNodePartials/AllocationsNodeUpdate.razor b/MoonlightServers.Frontend/UI/Components/Nodes/UpdateNodePartials/AllocationsNodeUpdate.razor index 57ca53d..79f5cdf 100644 --- a/MoonlightServers.Frontend/UI/Components/Nodes/UpdateNodePartials/AllocationsNodeUpdate.razor +++ b/MoonlightServers.Frontend/UI/Components/Nodes/UpdateNodePartials/AllocationsNodeUpdate.razor @@ -1,6 +1,6 @@ @using MoonCore.Blazor.Tailwind.Alerts @using MoonlightServers.Shared.Http.Responses.Admin.Nodes -@using MoonCore.Blazor.Tailwind.DataTable +@using MoonCore.Blazor.Tailwind.Dt @using MoonCore.Blazor.Tailwind.Modals @using MoonCore.Blazor.Tailwind.Toasts @using MoonCore.Helpers @@ -31,15 +31,12 @@
- - - - - - - - - + + + +
@@ -61,12 +58,12 @@ { [Parameter] public NodeDetailResponse Node { get; set; } - private ItemDataTable Table; + private DataTable Table; - private async Task> Load(int page, int pageSize) + private async Task> LoadData(PaginationOptions options) { return await ApiClient.GetJson>( - $"api/admin/servers/nodes/{Node.Id}/allocations?page={page}&pageSize={pageSize}" + $"api/admin/servers/nodes/{Node.Id}/allocations?page={options.Page}&pageSize={options.PerPage}" ); } @@ -77,7 +74,7 @@ await ApiClient.Post($"api/admin/servers/nodes/{Node.Id}/allocations/range", request); await ToastService.Success("Successfully created allocations"); - await Table.Refresh(isSilent: false, bypassCache: true); + await Table.Refresh(); }; await ModalService.Launch(parameters => @@ -93,7 +90,7 @@ await ApiClient.Post($"api/admin/servers/nodes/{Node.Id}/allocations", request); await ToastService.Success("Successfully created allocation"); - await Table.Refresh(isSilent: false, bypassCache: true); + await Table.Refresh(); }; await ModalService.Launch(parameters => { parameters.Add("OnSubmit", onSubmit); }); @@ -106,7 +103,7 @@ await ApiClient.Patch($"api/admin/servers/nodes/{Node.Id}/allocations/{allocation.Id}", request); await ToastService.Success("Successfully updated allocation"); - await Table.Refresh(isSilent: false, bypassCache: true); + await Table.Refresh(); }; await ModalService.Launch(parameters => @@ -126,7 +123,7 @@ await ApiClient.Delete($"api/admin/servers/nodes/{Node.Id}/allocations/{allocation.Id}"); await ToastService.Success("Successfully deleted allocation"); - await Table.Refresh(isSilent: false, bypassCache: true); + await Table.Refresh(); } ); } @@ -141,7 +138,7 @@ await ApiClient.Delete($"api/admin/servers/nodes/{Node.Id}/allocations/all"); await ToastService.Success("Successfully deleted allocations"); - await Table.Refresh(isSilent: false, bypassCache: true); + await Table.Refresh(); } ); } diff --git a/MoonlightServers.Frontend/UI/Components/Stars/UpdateStarPartials/InstallationStarUpdate.razor b/MoonlightServers.Frontend/UI/Components/Stars/UpdateStarPartials/InstallationStarUpdate.razor index 69f06ac..b63ec06 100644 --- a/MoonlightServers.Frontend/UI/Components/Stars/UpdateStarPartials/InstallationStarUpdate.razor +++ b/MoonlightServers.Frontend/UI/Components/Stars/UpdateStarPartials/InstallationStarUpdate.razor @@ -1,4 +1,5 @@ @using MoonlightServers.Shared.Http.Requests.Admin.Stars +@using MoonCore.Blazor.Tailwind.Ace
@@ -16,8 +17,8 @@
-
- +
+
@@ -26,4 +27,16 @@ @code { [Parameter] public UpdateStarRequest Request { get; set; } + + private CodeEditor CodeEditor; + + private void OnConfigure(CodeEditorOptions options) + { + options.Mode = "ace/mode/sh"; + } + + private async Task OnFocusOut() + { + Request.InstallScript = await CodeEditor.GetValue(); + } } \ No newline at end of file diff --git a/MoonlightServers.Frontend/UI/Views/Admin/All/Create.razor b/MoonlightServers.Frontend/UI/Views/Admin/All/Create.razor index 1d521e7..ed5d2b9 100644 --- a/MoonlightServers.Frontend/UI/Views/Admin/All/Create.razor +++ b/MoonlightServers.Frontend/UI/Views/Admin/All/Create.razor @@ -1,7 +1,6 @@ @page "/admin/servers/all/create" @using MoonCore.Blazor.Tailwind.Components -@using MoonCore.Blazor.Tailwind.Forms @using MoonCore.Blazor.Tailwind.Toasts @using MoonCore.Helpers @using MoonlightServers.Shared.Http.Requests.Admin.Servers @@ -12,10 +11,10 @@ @inject ToastService ToastService - + Create @@ -56,9 +55,6 @@ await ApiClient.Post("api/admin/servers", Request); await ToastService.Success("Successfully created Server"); - GoBack(); + Navigation.NavigateTo("/admin/servers/all"); } - - private void GoBack() - => Navigation.NavigateTo(ComponentHelper.GetRouteOfComponent()!); } \ No newline at end of file diff --git a/MoonlightServers.Frontend/UI/Views/Admin/All/Index.razor b/MoonlightServers.Frontend/UI/Views/Admin/All/Index.razor index fa92449..99af487 100644 --- a/MoonlightServers.Frontend/UI/Views/Admin/All/Index.razor +++ b/MoonlightServers.Frontend/UI/Views/Admin/All/Index.razor @@ -1,78 +1,85 @@ @page "/admin/servers/all" -@using MoonCore.Blazor.Tailwind.MinimalCrud -@using MoonCore.Blazor.Tailwind.DataTable +@using MoonCore.Blazor.Tailwind.Alerts @using MoonCore.Helpers @using MoonCore.Models @using MoonlightServers.Shared.Http.Responses.Admin.Nodes @using MoonlightServers.Shared.Http.Responses.Admin.Servers @using MoonlightServers.Shared.Http.Responses.Admin.Stars @using MoonCore.Blazor.Tailwind.Components +@using MoonCore.Blazor.Tailwind.Dt +@using MoonCore.Blazor.Tailwind.Toasts @inject HttpApiClient ApiClient +@inject AlertService AlertService +@inject ToastService ToastService
- - - - - - - - - - - - + + @(star?.Name ?? "N/A") + + + + + +
+ + + + + + + +
+
+
+ + @code { + private DataTable Table; + private List Stars = new(); private List Nodes = new(); - - private void OnConfigure(MinimalCrudOptions options) - { - options.Title = "Servers"; - options.ItemLoader = LoadItems; - options.CreateUrl = ComponentHelper.GetRouteOfComponent(); - options.UpdateUrl = item => ComponentHelper.GetRouteOfComponent(item.Id)!; - options.DeleteFunction = async item => await ApiClient.Delete($"api/admin/servers/{item.Id}"); - } - - private async Task> LoadItems(int page, int pageSize) + private async Task> LoadData(PaginationOptions options) { // Clear potential previous data - var data = await ApiClient.GetJson>($"api/admin/servers?page={page}&pageSize={pageSize}"); + var data = await ApiClient.GetJson>($"api/admin/servers?page={options.Page}&pageSize={options.PerPage}"); foreach (var item in data.Items) { @@ -91,4 +98,19 @@ return data; } + + private async Task Delete(ServerDetailResponse detailResponse) + { + await AlertService.ConfirmDanger( + "Server deletion", + $"Do you really want to delete the server '{detailResponse.Name}'", + async () => + { + await ApiClient.Delete($"api/admin/servers/{detailResponse.Id}"); + await ToastService.Success("Successfully deleted server"); + + await Table.Refresh(); + } + ); + } } \ No newline at end of file diff --git a/MoonlightServers.Frontend/UI/Views/Admin/All/Update.razor b/MoonlightServers.Frontend/UI/Views/Admin/All/Update.razor index c366105..58061d3 100644 --- a/MoonlightServers.Frontend/UI/Views/Admin/All/Update.razor +++ b/MoonlightServers.Frontend/UI/Views/Admin/All/Update.razor @@ -1,7 +1,6 @@ @page "/admin/servers/all/update/{Id:int}" @using MoonCore.Blazor.Tailwind.Components -@using MoonCore.Blazor.Tailwind.Forms @using MoonCore.Blazor.Tailwind.Toasts @using MoonCore.Helpers @using MoonlightServers.Shared.Http.Requests.Admin.Servers @@ -14,10 +13,10 @@ - + Update @@ -62,10 +61,7 @@ { await ApiClient.Patch($"api/admin/servers/{Id}", Request); - await ToastService.Success("Successfully updated Server"); - GoBack(); + await ToastService.Success("Successfully updated server"); + Navigation.NavigateTo("/admin/servers/all"); } - - private void GoBack() - => Navigation.NavigateTo(ComponentHelper.GetRouteOfComponent()!); } \ No newline at end of file diff --git a/MoonlightServers.Frontend/UI/Views/Admin/Nodes/Create.razor b/MoonlightServers.Frontend/UI/Views/Admin/Nodes/Create.razor index 1b06dbe..b99d0a6 100644 --- a/MoonlightServers.Frontend/UI/Views/Admin/Nodes/Create.razor +++ b/MoonlightServers.Frontend/UI/Views/Admin/Nodes/Create.razor @@ -1,7 +1,6 @@ @page "/admin/servers/nodes/create" @using MoonCore.Blazor.Tailwind.Components -@using MoonCore.Blazor.Tailwind.Forms @using MoonCore.Blazor.Tailwind.Toasts @using MoonCore.Helpers @using MoonlightServers.Shared.Http.Requests.Admin.Nodes @@ -11,10 +10,10 @@ @inject ToastService ToastService - + Create @@ -23,12 +22,40 @@
- +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
-@code +@* +TODO: EnableTransparentMode, EnableDynamicFirewall +*@ +@code { private HandleForm Form; private CreateNodeRequest Request; @@ -37,36 +64,12 @@ { Request = new(); } - - private void OnConfigure(FormConfiguration configuration) - { - configuration.WithField(x => x.Name); - configuration.WithField(x => x.Fqdn); - - configuration.WithField(x => x.HttpPort, fieldConfiguration => - { - fieldConfiguration.DefaultValue = 8080; - }); - - configuration.WithField(x => x.FtpPort, fieldConfiguration => - { - fieldConfiguration.DefaultValue = 2021; - }); - - var advancedPage = configuration.WithPage("Advanced"); - - advancedPage.WithField(x => x.EnableTransparentMode); - advancedPage.WithField(x => x.EnableDynamicFirewall); - } - + private async Task OnSubmit() { await ApiClient.Post("api/admin/servers/nodes", Request); - await ToastService.Success("Successfully created Node"); - GoBack(); + await ToastService.Success("Successfully created node"); + Navigation.NavigateTo("/admin/servers/nodes"); } - - private void GoBack() - => Navigation.NavigateTo(ComponentHelper.GetRouteOfComponent()!); } \ No newline at end of file diff --git a/MoonlightServers.Frontend/UI/Views/Admin/Nodes/Index.razor b/MoonlightServers.Frontend/UI/Views/Admin/Nodes/Index.razor index 5a77a3c..b1c24f1 100644 --- a/MoonlightServers.Frontend/UI/Views/Admin/Nodes/Index.razor +++ b/MoonlightServers.Frontend/UI/Views/Admin/Nodes/Index.razor @@ -1,39 +1,45 @@ @page "/admin/servers/nodes" -@using System.Diagnostics @using MoonCore.Blazor.Tailwind.Alerts -@using MoonCore.Blazor.Tailwind.MinimalCrud @using MoonCore.Helpers @using MoonCore.Models -@using MoonCore.Blazor.Tailwind.DataTable @using MoonlightServers.Shared.Http.Responses.Admin.Nodes @using MoonCore.Blazor.Tailwind.Components +@using MoonCore.Blazor.Tailwind.Dt +@using MoonCore.Blazor.Tailwind.Toasts @using MoonlightServers.Frontend.Services @using MoonlightServers.Shared.Http.Responses.Admin.Nodes.Sys @inject HttpApiClient ApiClient @inject NodeService NodeService @inject AlertService AlertService +@inject ToastService ToastService
- - - - - - - - - - - - - - - - - - - - - + + + + +
+ + + + + + + +
+
+
+ + @code { + private DataTable Table; + private Dictionary Responses = new(); + private async Task> LoadData(PaginationOptions options) + => await ApiClient.GetJson>($"api/admin/servers/nodes?page={options.Page}&pageSize={options.PerPage}"); + + private async Task Delete(NodeDetailResponse detailResponse) + { + await AlertService.ConfirmDanger( + "Node deletion", + $"Do you really want to delete the node '{detailResponse.Name}'", + async () => + { + await ApiClient.Delete($"api/admin/servers/nodes/{detailResponse.Id}"); + await ToastService.Success("Successfully deleted node"); + + await Table.Refresh(); + } + ); + } + private Task LoadNodeStatus(int node) { Task.Run(async () => @@ -165,15 +202,4 @@ await AlertService.Danger("Node error details", message); } - - private void OnConfigure(MinimalCrudOptions options) - { - options.Title = "Nodes"; - options.ItemLoader = async (page, pageSize) => - await ApiClient.GetJson>($"api/admin/servers/nodes?page={page}&pageSize={pageSize}"); - - options.CreateUrl = ComponentHelper.GetRouteOfComponent(); - options.UpdateUrl = item => ComponentHelper.GetRouteOfComponent(item.Id)!; - options.DeleteFunction = async item => await ApiClient.Delete($"api/admin/servers/nodes/{item.Id}"); - } } \ No newline at end of file diff --git a/MoonlightServers.Frontend/UI/Views/Admin/Nodes/Update.razor b/MoonlightServers.Frontend/UI/Views/Admin/Nodes/Update.razor index fd28a16..b88746c 100644 --- a/MoonlightServers.Frontend/UI/Views/Admin/Nodes/Update.razor +++ b/MoonlightServers.Frontend/UI/Views/Admin/Nodes/Update.razor @@ -1,7 +1,6 @@ @page "/admin/servers/nodes/update/{Id:int}" @using MoonCore.Blazor.Tailwind.Components -@using MoonCore.Blazor.Tailwind.Forms @using MoonCore.Blazor.Tailwind.Toasts @using MoonCore.Helpers @using MoonlightServers.Shared.Http.Requests.Admin.Nodes @@ -14,10 +13,10 @@ - + Update @@ -59,27 +58,11 @@ Request = Mapper.Map(Node); } - private void OnConfigure(FormConfiguration configuration) - { - configuration.WithField(x => x.Name); - configuration.WithField(x => x.Fqdn); - configuration.WithField(x => x.HttpPort); - configuration.WithField(x => x.FtpPort); - - var advancedPage = configuration.WithPage("Advanced"); - - advancedPage.WithField(x => x.EnableTransparentMode); - advancedPage.WithField(x => x.EnableDynamicFirewall); - } - private async Task OnSubmit() { await ApiClient.Patch($"api/admin/servers/nodes/{Id}", Request); await ToastService.Success("Successfully updated Node"); - GoBack(); + Navigation.NavigateTo("/admin/servers/nodes"); } - - private void GoBack() - => Navigation.NavigateTo(ComponentHelper.GetRouteOfComponent()!); } \ No newline at end of file diff --git a/MoonlightServers.Frontend/UI/Views/Admin/Stars/Create.razor b/MoonlightServers.Frontend/UI/Views/Admin/Stars/Create.razor index 7bc34f2..b55faed 100644 --- a/MoonlightServers.Frontend/UI/Views/Admin/Stars/Create.razor +++ b/MoonlightServers.Frontend/UI/Views/Admin/Stars/Create.razor @@ -1,24 +1,20 @@ @page "/admin/servers/stars/create" +@using Microsoft.AspNetCore.Components.Authorization @using MoonCore.Blazor.Tailwind.Components -@using MoonCore.Blazor.Tailwind.Forms @using MoonCore.Blazor.Tailwind.Toasts @using MoonCore.Helpers -@using Moonlight.Client.Services -@using MoonlightServers.Frontend.UI.Components.Forms @using MoonlightServers.Shared.Http.Requests.Admin.Stars -@using MoonlightServers.Shared.Http.Requests.Admin.StarVariables @inject HttpApiClient ApiClient @inject NavigationManager Navigation @inject ToastService ToastService -@inject IdentityService IdentityService - + Create @@ -27,42 +23,43 @@
- +
+
+ +
+ +
+
+
+ +
+ +
+
+
@code - { + [CascadingParameter] public Task AuthState { get; set; } + private HandleForm Form; private CreateStarRequest Request; - protected override void OnInitialized() + protected override async Task OnInitializedAsync() { Request = new(); - } - - private void OnConfigure(FormConfiguration configuration) - { - configuration.WithField(x => x.Name); - configuration.WithField(x => x.Author, fieldConfiguration => - { - fieldConfiguration.DefaultValue = IdentityService.Email; - }); + var authState = await AuthState; + Request.Author = authState.User.Claims.First(x => x.Type == "email").Value; } private async Task OnSubmit() { await ApiClient.Post("api/admin/servers/stars", Request); - await ToastService.Success("Successfully created Star"); - await GoBack(); - } - - private Task GoBack() - { - Navigation.NavigateTo(ComponentHelper.GetRouteOfComponent()!); - return Task.CompletedTask; + await ToastService.Success("Successfully created star"); + Navigation.NavigateTo("/admin/servers/stars"); } } \ No newline at end of file diff --git a/MoonlightServers.Frontend/UI/Views/Admin/Stars/Index.razor b/MoonlightServers.Frontend/UI/Views/Admin/Stars/Index.razor index fe1ce27..d17a94e 100644 --- a/MoonlightServers.Frontend/UI/Views/Admin/Stars/Index.razor +++ b/MoonlightServers.Frontend/UI/Views/Admin/Stars/Index.razor @@ -1,84 +1,110 @@ @page "/admin/servers/stars" -@using MoonCore.Blazor.Tailwind.MinimalCrud +@using MoonCore.Blazor.Tailwind.Alerts @using MoonCore.Helpers @using MoonCore.Models -@using MoonCore.Blazor.Tailwind.DataTable @using MoonlightServers.Shared.Http.Responses.Admin.Stars @using MoonCore.Blazor.Tailwind.Components +@using MoonCore.Blazor.Tailwind.Dt +@using MoonCore.Blazor.Tailwind.Services @using MoonCore.Blazor.Tailwind.Toasts @using MoonCore.Exceptions -@using Moonlight.Client.Services @inject HttpApiClient ApiClient @inject DownloadService DownloadService @inject ToastService ToastService +@inject AlertService AlertService
- - - - - - - - - - +
+ +
+ + + + + + + + @context.Name + + + + + + + +
+ @if (!string.IsNullOrEmpty(context.DonateUrl)) + { + + + Donate + + } + + @if (!string.IsNullOrEmpty(context.UpdateUrl)) + { + + + Update + + } + + + + Export + + + + + + + + + +
+
+
+
+
@code { - private MinimalCrud Crud; - - private void OnConfigure(MinimalCrudOptions options) + private DataTable Table; + + private async Task> LoadData(PaginationOptions options) + => await ApiClient.GetJson>($"api/admin/servers/stars?page={options.Page}&pageSize={options.PerPage}"); + + private async Task Delete(StarDetailResponse detailResponse) { - options.Title = "Stars"; - options.ItemLoader = async (page, pageSize) => - await ApiClient.GetJson>($"api/admin/servers/stars?page={page}&pageSize={pageSize}"); + await AlertService.ConfirmDanger( + "Star deletion", + $"Do you really want to delete the star '{detailResponse.Name}'", + async () => + { + await ApiClient.Delete($"api/admin/servers/stars/{detailResponse.Id}"); + await ToastService.Success("Successfully deleted star"); - options.CreateUrl = ComponentHelper.GetRouteOfComponent(); - options.UpdateUrl = item => ComponentHelper.GetRouteOfComponent(item.Id)!; - options.DeleteFunction = async item => await ApiClient.Delete($"api/admin/servers/stars/{item.Id}"); + await Table.Refresh(); + } + ); } - + private async Task Export(StarDetailResponse star) { var json = await ApiClient.GetString($"api/admin/servers/stars/{star.Id}/export"); @@ -124,7 +150,7 @@ await ToastService.Danger($"Failed to import '{file.Name}': {e.Title}"); } } - - await Crud.Refresh(isSilent: false, bypassCache: true); + + await Table.Refresh(); } } \ No newline at end of file diff --git a/MoonlightServers.Frontend/UI/Views/Admin/Stars/Update.razor b/MoonlightServers.Frontend/UI/Views/Admin/Stars/Update.razor index 4b0c8e2..8be3d58 100644 --- a/MoonlightServers.Frontend/UI/Views/Admin/Stars/Update.razor +++ b/MoonlightServers.Frontend/UI/Views/Admin/Stars/Update.razor @@ -1,7 +1,6 @@ @page "/admin/servers/stars/update/{Id:int}" @using MoonCore.Blazor.Tailwind.Components -@using MoonCore.Blazor.Tailwind.Forms @using MoonCore.Blazor.Tailwind.Toasts @using MoonCore.Helpers @using MoonlightServers.Shared.Http.Requests.Admin.Stars @@ -14,10 +13,10 @@ - + Update @@ -75,52 +74,11 @@ Request = Mapper.Map(Detail); } - private void OnConfigure(FormConfiguration configuration) - { - var generalPage = configuration.WithPage("General"); - - generalPage.WithField(x => x.Name); - generalPage.WithField(x => x.Version); - generalPage.WithField(x => x.Author); - generalPage.WithField(x => x.DonateUrl); - generalPage.WithField(x => x.UpdateUrl); - - var startStopStatusPage = configuration.WithPage("Start, Stop & Status"); - - startStopStatusPage.WithField(x => x.StartupCommand); - startStopStatusPage.WithField(x => x.StopCommand); - startStopStatusPage.WithField(x => x.OnlineDetection); - - var installationPage = configuration.WithPage("Installation"); - - installationPage.WithField(x => x.InstallShell); - installationPage.WithField(x => x.InstallDockerImage); - - installationPage.WithField(x => x.InstallScript, fieldConfiguration => - { - fieldConfiguration.Columns = 6; - }); - - var parseConfigurationPage = configuration.WithPage("Parse configuration"); - - parseConfigurationPage.WithField(x => x.ParseConfiguration); - - var variablesPage = configuration.WithPage("Variables"); - - var miscPage = configuration.WithPage("Miscellaneous"); - - miscPage.WithField(x => x.AllowDockerImageChange); - miscPage.WithField(x => x.RequiredAllocations); - } - private async Task OnSubmit() { await ApiClient.Patch($"api/admin/servers/stars/{Id}", Request); await ToastService.Success("Successfully updated Star"); - GoBack(); + Navigation.NavigateTo("/admin/servers/stars"); } - - private void GoBack() - => Navigation.NavigateTo(ComponentHelper.GetRouteOfComponent()!); } \ No newline at end of file diff --git a/MoonlightServers.Shared/Http/Requests/Admin/Nodes/CreateNodeRequest.cs b/MoonlightServers.Shared/Http/Requests/Admin/Nodes/CreateNodeRequest.cs index 92d2f3c..ed5fad1 100644 --- a/MoonlightServers.Shared/Http/Requests/Admin/Nodes/CreateNodeRequest.cs +++ b/MoonlightServers.Shared/Http/Requests/Admin/Nodes/CreateNodeRequest.cs @@ -9,14 +9,14 @@ public class CreateNodeRequest [Required(ErrorMessage = "You need to provide a fqdn")] public string Fqdn { get; set; } - + [Required(ErrorMessage = "You need to provide a http port")] [Range(1, 65535, ErrorMessage = "You need to provide a valid http port")] - public int HttpPort { get; set; } - + public int HttpPort { get; set; } = 8080; + [Required(ErrorMessage = "You need to provide a ftp port")] [Range(1, 65535, ErrorMessage = "You need to provide a valid ftp port")] - public int FtpPort { get; set; } + public int FtpPort { get; set; } = 2021; public bool EnableTransparentMode { get; set; } public bool EnableDynamicFirewall { get; set; }