From 0a86aa8aa4f36246a8eeb53dd9b589d46e616422 Mon Sep 17 00:00:00 2001 From: Marcel Baumgartner Date: Mon, 17 Jul 2023 00:48:27 +0200 Subject: [PATCH] Implemented new permission and identity system --- .../Api/Moonlight/BillingController.cs | 4 +- .../Notifications/RegisterController.cs | 2 +- .../Api/Moonlight/OAuth2Controller.cs | 2 +- Moonlight/App/Perms/Permissions.cs | 401 +++++++++++++--- Moonlight/App/Services/RatingService.cs | 4 +- .../App/Services/Sessions/IdentityService.cs | 100 ++-- .../App/Services/Sessions/IpBanService.cs | 2 +- .../App/Services/Sessions/IpLocateService.cs | 2 +- .../Services/Sessions/SessionClientService.cs | 6 +- .../SupportChat/SupportChatAdminService.cs | 2 +- .../SupportChat/SupportChatClientService.cs | 2 +- Moonlight/App/Services/TotpService.cs | 26 +- Moonlight/App/Services/UserService.cs | 16 +- Moonlight/Moonlight.csproj | 2 + .../Components/Auth/PasswordChangeView.razor | 5 +- .../Components/Auth/UserDataSetView.razor | 5 +- .../ErrorBoundaries/PageErrorBoundary.razor | 2 +- .../Navigations/ProfileNavigation.razor | 14 +- .../Shared/Components/Partials/Navbar.razor | 2 +- .../Partials/RenderPermissionChecker.razor | 2 +- .../Shared/Components/Partials/Sidebar.razor | 2 +- .../Components/Partials/SidebarMenu.razor | 2 +- .../Components/StateLogic/OnlyAdmin.razor | 28 -- Moonlight/Shared/Layouts/MainLayout.razor | 170 +++---- Moonlight/Shared/Layouts/NotFoundLayout.razor | 4 +- .../Shared/Views/Admin/Databases/Index.razor | 5 - .../Shared/Views/Admin/Domains/Index.razor | 98 ++-- .../Shared/Views/Admin/Domains/New.razor | 6 +- .../Views/Admin/Domains/Shared/Index.razor | 66 +-- .../Views/Admin/Domains/Shared/New.razor | 2 + Moonlight/Shared/Views/Admin/Index.razor | 1 - Moonlight/Shared/Views/Admin/Nodes/Ddos.razor | 104 ++--- Moonlight/Shared/Views/Admin/Nodes/Edit.razor | 6 +- .../Shared/Views/Admin/Nodes/Index.razor | 158 +++---- Moonlight/Shared/Views/Admin/Nodes/New.razor | 6 +- .../Shared/Views/Admin/Nodes/Setup.razor | 6 +- Moonlight/Shared/Views/Admin/Nodes/View.razor | 4 +- .../Views/Admin/Notifications/Debugging.razor | 7 +- .../Shared/Views/Admin/Servers/Cleanup.razor | 6 +- .../Shared/Views/Admin/Servers/Edit.razor | 312 ++++++------- .../Shared/Views/Admin/Servers/Index.razor | 2 +- .../Shared/Views/Admin/Servers/Manager.razor | 154 +++---- .../Shared/Views/Admin/Servers/New.razor | 308 ++++++------- Moonlight/Shared/Views/Admin/Statistics.razor | 124 ++--- .../Views/Admin/Subscriptions/Edit.razor | 278 +++++------ .../Views/Admin/Subscriptions/Index.razor | 88 ++-- .../Views/Admin/Subscriptions/New.razor | 264 +++++------ .../Shared/Views/Admin/Support/Index.razor | 6 +- .../Shared/Views/Admin/Support/View.razor | 382 ++++++++-------- .../Views/Admin/Sys/Configuration.razor | 2 +- .../Shared/Views/Admin/Sys/DiscordBot.razor | 2 +- Moonlight/Shared/Views/Admin/Sys/Index.razor | 2 +- Moonlight/Shared/Views/Admin/Sys/Mail.razor | 10 +- .../Shared/Views/Admin/Sys/Malware.razor | 2 +- .../Shared/Views/Admin/Sys/News/Edit.razor | 2 +- .../Shared/Views/Admin/Sys/News/Index.razor | 2 +- .../Shared/Views/Admin/Sys/News/New.razor | 2 +- .../Shared/Views/Admin/Sys/Resources.razor | 2 +- .../Shared/Views/Admin/Sys/Security.razor | 2 +- Moonlight/Shared/Views/Admin/Sys/Sentry.razor | 2 +- Moonlight/Shared/Views/Admin/Users/Edit.razor | 6 +- .../Shared/Views/Admin/Users/Index.razor | 82 ++-- Moonlight/Shared/Views/Admin/Users/New.razor | 80 ++-- .../Shared/Views/Admin/Users/Sessions.razor | 166 +++---- Moonlight/Shared/Views/Admin/Users/View.razor | 432 +++++++++--------- .../Shared/Views/Admin/Webspaces/Index.razor | 106 ++--- .../Shared/Views/Admin/Webspaces/New.razor | 60 +-- .../Views/Admin/Webspaces/Servers/Edit.razor | 6 +- .../Views/Admin/Webspaces/Servers/Index.razor | 122 ++--- .../Views/Admin/Webspaces/Servers/New.razor | 6 +- Moonlight/Shared/Views/Domains/Create.razor | 13 +- Moonlight/Shared/Views/Index.razor | 11 +- Moonlight/Shared/Views/Profile/Discord.razor | 11 +- Moonlight/Shared/Views/Profile/Index.razor | 18 +- Moonlight/Shared/Views/Profile/Security.razor | 21 +- .../Views/Profile/Subscriptions/Index.razor | 17 +- Moonlight/Shared/Views/Server/Index.razor | 6 +- .../Shared/Views/Server/ServerFiles.razor | 7 +- .../Views/Server/ServerNavigation.razor | 9 +- Moonlight/Shared/Views/Servers/Create.razor | 17 +- Moonlight/Shared/Views/Servers/Index.razor | 17 +- Moonlight/Shared/Views/Support.razor | 7 +- Moonlight/Shared/Views/Webspace/Index.razor | 8 +- Moonlight/Shared/Views/Webspaces/Create.razor | 13 +- Moonlight/Shared/Views/Webspaces/Index.razor | 7 +- Moonlight/_Imports.razor | 1 - 86 files changed, 2372 insertions(+), 2107 deletions(-) delete mode 100644 Moonlight/Shared/Components/StateLogic/OnlyAdmin.razor delete mode 100644 Moonlight/Shared/Views/Admin/Databases/Index.razor diff --git a/Moonlight/App/Http/Controllers/Api/Moonlight/BillingController.cs b/Moonlight/App/Http/Controllers/Api/Moonlight/BillingController.cs index 9878b736..d31dd427 100644 --- a/Moonlight/App/Http/Controllers/Api/Moonlight/BillingController.cs +++ b/Moonlight/App/Http/Controllers/Api/Moonlight/BillingController.cs @@ -24,7 +24,7 @@ public class BillingController : Controller [HttpGet("cancel")] public async Task Cancel() { - var user = await IdentityService.Get(); + var user = IdentityService.User; if (user == null) return Redirect("/login"); @@ -35,7 +35,7 @@ public class BillingController : Controller [HttpGet("success")] public async Task Success() { - var user = await IdentityService.Get(); + var user = IdentityService.User; if (user == null) return Redirect("/login"); diff --git a/Moonlight/App/Http/Controllers/Api/Moonlight/Notifications/RegisterController.cs b/Moonlight/App/Http/Controllers/Api/Moonlight/Notifications/RegisterController.cs index 9cbade42..8fc13ffb 100644 --- a/Moonlight/App/Http/Controllers/Api/Moonlight/Notifications/RegisterController.cs +++ b/Moonlight/App/Http/Controllers/Api/Moonlight/Notifications/RegisterController.cs @@ -25,7 +25,7 @@ public class RegisterController : Controller [HttpGet] public async Task> Register() { - var user = await IdentityService.Get(); + var user = IdentityService.User; if (user == null) return NotFound(); diff --git a/Moonlight/App/Http/Controllers/Api/Moonlight/OAuth2Controller.cs b/Moonlight/App/Http/Controllers/Api/Moonlight/OAuth2Controller.cs index bae68b49..a21b804f 100644 --- a/Moonlight/App/Http/Controllers/Api/Moonlight/OAuth2Controller.cs +++ b/Moonlight/App/Http/Controllers/Api/Moonlight/OAuth2Controller.cs @@ -54,7 +54,7 @@ public class OAuth2Controller : Controller { try { - var currentUser = await IdentityService.Get(); + var currentUser = IdentityService.User; if (currentUser != null) { diff --git a/Moonlight/App/Perms/Permissions.cs b/Moonlight/App/Perms/Permissions.cs index 8e5cb011..1ffb9b45 100644 --- a/Moonlight/App/Perms/Permissions.cs +++ b/Moonlight/App/Perms/Permissions.cs @@ -5,106 +5,379 @@ public static class Permissions public static Permission AdminDashboard = new() { Index = 0, - Name = "Admin dashboard", - Description = "See basic information about growth and status of the moonlight instance" + Name = "Admin Dashboard", + Description = "Access the main admin dashboard page" }; - - public static Permission SystemDashboard = new() + + public static Permission AdminStatistics = new() { Index = 1, - Name = "System information", - Description = "See information about the moonlight instance like the uptime and memory usage" + Name = "Admin Statistics", + Description = "View statistical information about the moonlight instance" }; - - public static Permission SystemSentry = new() - { - Index = 2, - Name = "Settings for Sentry", - Description = "See information about the sentry status" - }; - - public static Permission SystemMalware = new() - { - Index = 3, - Name = "Server malware scanner", - Description = "Scan running servers for malware" - }; - - public static Permission SystemSecurity = new() + + public static Permission AdminDomains = new() { Index = 4, - Name = "System security settings", - Description = "Ban ip addresses and view the security logs" + Name = "Admin Domains", + Description = "Manage domains in the admin area" }; - - public static Permission SystemResources = new() + + public static Permission AdminNewDomain = new() { Index = 5, - Name = "Resources", - Description = "Read and write moonlight resources like configuration files" + Name = "Admin New Domain", + Description = "Create a new domain in the admin area" }; - - public static Permission DiscordBot = new() + + public static Permission AdminSharedDomains = new() { Index = 6, - Name = "Discord bot actions", - Description = "Setup and remote control the discord bot if enabled" + Name = "Admin Shared Domains", + Description = "Manage shared domains in the admin area" }; - - public static Permission NewsMessages = new() + + public static Permission AdminNewSharedDomain = new() { Index = 7, - Name = "News messages", - Description = "Edit, view and delete messages for the user dashboard" + Name = "Admin New Shared Domain", + Description = "Create a new shared domain in the admin area" }; - - public static Permission SystemConfiguration = new() + + public static Permission AdminNodeDdos = new() { Index = 8, - Name = "System configuration", - Description = "Modify the moonlight configuration though the visual editor" + Name = "Admin Node DDoS", + Description = "Manage DDoS protection for nodes in the admin area" }; - - public static Permission SystemMail = new() + + public static Permission AdminNodeEdit = new() { Index = 9, - Name = "System mail settings", - Description = "Modify the mail templates and send test mails" + Name = "Admin Node Edit", + Description = "Edit node settings in the admin area" }; - - public static Permission ServersOverview = new() + + public static Permission AdminNodes = new() { Index = 10, - Name = "Servers overview", - Description = "View all servers and their owners" + Name = "Admin Node", + Description = "Access the node management page in the admin area" }; - - public static Permission ServerAdminEdit = new() + + public static Permission AdminNewNode = new() { Index = 11, - Name = "Edit servers", - Description = "View all servers and their owners" + Name = "Admin New Node", + Description = "Create a new node in the admin area" }; - - public static Permission ServerManager = new() + + public static Permission AdminNodeSetup = new() { Index = 12, - Name = "Server manager", - Description = "View all servers are currently running and stop/kill all running servers" + Name = "Admin Node Setup", + Description = "Set up a node in the admin area" }; - - public static Permission ServerCleanup = new() + + public static Permission AdminNodeView = new() { Index = 13, - Name = "Server cleanup", - Description = "View the stats about the cleanup system" + Name = "Admin Node View", + Description = "View node details in the admin area" }; - - public static Permission Nodes = new() + + public static Permission AdminNotificationDebugging = new() { Index = 14, - Name = "Nodes", - Description = "View stats about the nodes" + Name = "Admin Notification Debugging", + Description = "Manage debugging notifications in the admin area" + }; + + public static Permission AdminServerCleanup = new() + { + Index = 15, + Name = "Admin Server Cleanup", + Description = "Perform server cleanup tasks in the admin area" + }; + + public static Permission AdminServerEdit = new() + { + Index = 16, + Name = "Admin Server Edit", + Description = "Edit server settings in the admin area" + }; + + public static Permission AdminServers = new() + { + Index = 17, + Name = "Admin Server", + Description = "Access the server management page in the admin area" + }; + + public static Permission AdminServerManager = new() + { + Index = 18, + Name = "Admin Server Manager", + Description = "Manage servers in the admin area" + }; + + public static Permission AdminNewServer = new() + { + Index = 19, + Name = "Admin New Server", + Description = "Create a new server in the admin area" + }; + + public static Permission AdminServerImageEdit = new() + { + Index = 20, + Name = "Admin Server Image Edit", + Description = "Edit server image settings in the admin area" + }; + + public static Permission AdminServerImageIndex = new() + { + Index = 21, + Name = "Admin Server Image", + Description = "Access the server image management page in the admin area" + }; + + public static Permission AdminServerImageNew = new() + { + Index = 22, + Name = "Admin Server Image New", + Description = "Create a new server image in the admin area" + }; + + public static Permission AdminServerViewAllocations = new() + { + Index = 23, + Name = "Admin Server View Allocations", + Description = "View server allocations in the admin area" + }; + + public static Permission AdminServerViewArchive = new() + { + Index = 24, + Name = "Admin Server View Archive", + Description = "View server archive in the admin area" + }; + + public static Permission AdminServerViewDebug = new() + { + Index = 25, + Name = "Admin Server View Debug", + Description = "View server debugging information in the admin area" + }; + + public static Permission AdminServerViewImage = new() + { + Index = 26, + Name = "Admin Server View Image", + Description = "View server image details in the admin area" + }; + + public static Permission AdminServerViewIndex = new() + { + Index = 27, + Name = "Admin Server View", + Description = "Access the server view page in the admin area" + }; + + public static Permission AdminServerViewOverview = new() + { + Index = 28, + Name = "Admin Server View Overview", + Description = "View server overview in the admin area" + }; + + public static Permission AdminServerViewResources = new() + { + Index = 29, + Name = "Admin Server View Resources", + Description = "View server resources in the admin area" + }; + + public static Permission AdminSubscriptionEdit = new() + { + Index = 30, + Name = "Admin Subscription Edit", + Description = "Edit subscription settings in the admin area" + }; + + public static Permission AdminSubscriptions = new() + { + Index = 31, + Name = "Admin Subscriptions", + Description = "Access the subscription management page in the admin area" + }; + + public static Permission AdminNewSubscription = new() + { + Index = 32, + Name = "Admin New Subscription", + Description = "Create a new subscription in the admin area" + }; + + public static Permission AdminSupport = new() + { + Index = 33, + Name = "Admin Support", + Description = "Access the support page in the admin area" + }; + + public static Permission AdminSupportView = new() + { + Index = 34, + Name = "Admin Support View", + Description = "View support details in the admin area" + }; + + public static Permission AdminSysConfiguration = new() + { + Index = 35, + Name = "Admin system Configuration", + Description = "Access system configuration settings in the admin area" + }; + + public static Permission AdminSysDiscordBot = new() + { + Index = 36, + Name = "Admin system Discord Bot", + Description = "Manage Discord bot settings in the admin area" + }; + + public static Permission AdminSystem = new() + { + Index = 37, + Name = "Admin system", + Description = "Access the system management page in the admin area" + }; + + public static Permission AdminSysMail = new() + { + Index = 38, + Name = "Admin system Mail", + Description = "Manage mail settings in the admin area" + }; + + public static Permission AdminSysMalware = new() + { + Index = 39, + Name = "Admin system Malware", + Description = "Manage malware settings in the admin area" + }; + + public static Permission AdminSysResources = new() + { + Index = 40, + Name = "Admin system Resources", + Description = "View system resources in the admin area" + }; + + public static Permission AdminSysSecurity = new() + { + Index = 41, + Name = "Admin system Security", + Description = "Manage security settings in the admin area" + }; + + public static Permission AdminSysSentry = new() + { + Index = 42, + Name = "Admin system Sentry", + Description = "Manage Sentry settings in the admin area" + }; + + public static Permission AdminSysNewsEdit = new() + { + Index = 43, + Name = "Admin system News Edit", + Description = "Edit system news in the admin area" + }; + + public static Permission AdminSysNews = new() + { + Index = 44, + Name = "Admin system News", + Description = "Access the system news management page in the admin area" + }; + + public static Permission AdminSysNewsNew = new() + { + Index = 45, + Name = "Admin system News New", + Description = "Create new system news in the admin area" + }; + + public static Permission AdminUserEdit = new() + { + Index = 46, + Name = "Admin User Edit", + Description = "Edit user settings in the admin area" + }; + + public static Permission AdminUsers = new() + { + Index = 47, + Name = "Admin Users", + Description = "Access the user management page in the admin area" + }; + + public static Permission AdminNewUser = new() + { + Index = 48, + Name = "Admin New User", + Description = "Create a new user in the admin area" + }; + + public static Permission AdminUserSessions = new() + { + Index = 49, + Name = "Admin User Sessions", + Description = "View user sessions in the admin area" + }; + + public static Permission AdminUserView = new() + { + Index = 50, + Name = "Admin User View", + Description = "View user details in the admin area" + }; + + public static Permission AdminWebspaces = new() + { + Index = 51, + Name = "Admin Webspaces", + Description = "Access the webspaces management page in the admin area" + }; + + public static Permission AdminNewWebspace = new() + { + Index = 52, + Name = "Admin New Webspace", + Description = "Create a new webspace in the admin area" + }; + + public static Permission AdminWebspacesServerEdit = new() + { + Index = 53, + Name = "Admin Webspaces Server Edit", + Description = "Edit webspace server settings in the admin area" + }; + + public static Permission AdminWebspacesServers = new() + { + Index = 54, + Name = "Admin Webspaces Servers", + Description = "Access the webspace server management page in the admin area" + }; + + public static Permission AdminWebspacesServerNew = new() + { + Index = 55, + Name = "Admin Webspaces Server New", + Description = "Create a new webspace server in the admin area" }; public static Permission? FromString(string name) diff --git a/Moonlight/App/Services/RatingService.cs b/Moonlight/App/Services/RatingService.cs index e0e6bef7..083ed4cc 100644 --- a/Moonlight/App/Services/RatingService.cs +++ b/Moonlight/App/Services/RatingService.cs @@ -39,7 +39,7 @@ public class RatingService if (!Enabled) return false; - var user = await IdentityService.Get(); + var user = IdentityService.User; if (user == null) return false; @@ -62,7 +62,7 @@ public class RatingService public async Task Rate(int rate) { - var user = await IdentityService.Get(); + var user = IdentityService.User; // Double check states: diff --git a/Moonlight/App/Services/Sessions/IdentityService.cs b/Moonlight/App/Services/Sessions/IdentityService.cs index f70c5299..8f615b35 100644 --- a/Moonlight/App/Services/Sessions/IdentityService.cs +++ b/Moonlight/App/Services/Sessions/IdentityService.cs @@ -5,7 +5,6 @@ using JWT.Exceptions; using Microsoft.EntityFrameworkCore; using Moonlight.App.Database.Entities; using Moonlight.App.Helpers; -using Moonlight.App.Models.Misc; using Moonlight.App.Perms; using Moonlight.App.Repositories; using UAParser; @@ -19,8 +18,9 @@ public class IdentityService private readonly IHttpContextAccessor HttpContextAccessor; private readonly string Secret; - private User? UserCache; - + public User User { get; private set; } + public string Ip { get; private set; } = "N/A"; + public string Device { get; private set; } = "N/A"; public PermissionStorage Permissions { get; private set; } public PermissionStorage UserPermissions { get; private set; } public PermissionStorage GroupPermissions { get; private set; } @@ -40,15 +40,17 @@ public class IdentityService .Moonlight.Security.Token; } - public async Task Get() + public async Task Load() + { + await LoadIp(); + await LoadDevice(); + await LoadUser(); + } + + private async Task LoadUser() { try { - if (UserCache != null) - return UserCache; - - ConstructPermissions(); - var token = "none"; // Load token via http context if available @@ -68,13 +70,13 @@ public class IdentityService if (token == "none") { - return null; + return; } if (string.IsNullOrEmpty(token)) - return null; + return; - var json = ""; + string json; try { @@ -85,18 +87,18 @@ public class IdentityService } catch (TokenExpiredException) { - return null; + return; } catch (SignatureVerificationException) { Logger.Warn($"Detected a manipulated JWT: {token}", "security"); - return null; + return; } catch (Exception e) { Logger.Error("Error reading jwt"); Logger.Error(e); - return null; + return; } // To make it easier to use the json data @@ -111,7 +113,7 @@ public class IdentityService { Logger.Warn( $"Cannot find user with the id '{userid}' in the database. Maybe the user has been deleted or a token has been successfully faked by a hacker"); - return null; + return; } var iat = data.GetValue("iat", -1); @@ -119,48 +121,54 @@ public class IdentityService if (iat == -1) { Logger.Debug("Legacy token found (without the time the token has been issued at)"); - return null; + return; } var iatD = DateTimeOffset.FromUnixTimeSeconds(iat).ToUniversalTime().DateTime; if (iatD < user.TokenValidTime) - return null; + return; - UserCache = user; + User = user; ConstructPermissions(); - user.LastIp = GetIp(); - UserRepository.Update(user); - - return UserCache; + User.LastIp = Ip; + UserRepository.Update(User); } catch (Exception e) { Logger.Error("Unexpected error while processing token"); Logger.Error(e); - return null; + return; } } - public string GetIp() + private Task LoadIp() { if (HttpContextAccessor.HttpContext == null) - return "N/A"; + { + Ip = "N/A"; + return Task.CompletedTask; + } if (HttpContextAccessor.HttpContext.Request.Headers.ContainsKey("X-Real-IP")) { - return HttpContextAccessor.HttpContext.Request.Headers["X-Real-IP"]!; + Ip = HttpContextAccessor.HttpContext.Request.Headers["X-Real-IP"]!; + return Task.CompletedTask; } - return HttpContextAccessor.HttpContext.Connection.RemoteIpAddress!.ToString(); + Ip = HttpContextAccessor.HttpContext.Connection.RemoteIpAddress!.ToString(); + return Task.CompletedTask; } - public string GetDevice() + private Task LoadDevice() { if (HttpContextAccessor.HttpContext == null) - return "N/A"; + { + Device = "N/A"; + return Task.CompletedTask; + } try { @@ -170,26 +178,29 @@ public class IdentityService { var version = userAgent.Remove(0, "Moonlight.App/".Length).Split(' ').FirstOrDefault(); - return "Moonlight App " + version; + Device = "Moonlight App " + version; + return Task.CompletedTask; } var uaParser = Parser.GetDefault(); var info = uaParser.Parse(userAgent); - return $"{info.OS} - {info.Device}"; + Device = $"{info.OS} - {info.Device}"; + return Task.CompletedTask; } catch (Exception e) { - return "UserAgent not present"; + Device = "UserAgent not present"; + return Task.CompletedTask; } } public Task SavePermissions() { - if (UserCache != null) + if (User != null) { - UserCache.Permissions = UserPermissions.Data; - UserRepository.Update(UserCache); + User.Permissions = UserPermissions.Data; + UserRepository.Update(User); ConstructPermissions(); } @@ -198,7 +209,7 @@ public class IdentityService private void ConstructPermissions() { - if (UserCache == null) + if (User == null) { UserPermissions = new(Array.Empty()); GroupPermissions = new(Array.Empty(), true); @@ -210,7 +221,7 @@ public class IdentityService var user = UserRepository .Get() .Include(x => x.PermissionGroup) - .First(x => x.Id == UserCache.Id); + .First(x => x.Id == User.Id); UserPermissions = new PermissionStorage(user.Permissions); @@ -219,7 +230,18 @@ public class IdentityService else GroupPermissions = new PermissionStorage(user.PermissionGroup.Permissions, true); - Logger.Debug($"{UserPermissions[Perms.Permissions.AdminDashboard]} {GroupPermissions[Perms.Permissions.AdminDashboard]}"); + if (user.Admin) + { + Permissions = new PermissionStorage(Array.Empty()); + + foreach (var permission in Perms.Permissions.GetAllPermissions()) + { + Permissions[permission] = true; + } + + Permissions.IsReadyOnly = true; + return; + } Permissions = new PermissionStorage(BitHelper.OverwriteByteArrays( UserPermissions.Data, diff --git a/Moonlight/App/Services/Sessions/IpBanService.cs b/Moonlight/App/Services/Sessions/IpBanService.cs index 6fd6af15..1159b45a 100644 --- a/Moonlight/App/Services/Sessions/IpBanService.cs +++ b/Moonlight/App/Services/Sessions/IpBanService.cs @@ -19,7 +19,7 @@ public class IpBanService public Task IsBanned() { - var ip = IdentityService.GetIp(); + var ip = IdentityService.Ip; return Task.FromResult( IpBanRepository diff --git a/Moonlight/App/Services/Sessions/IpLocateService.cs b/Moonlight/App/Services/Sessions/IpLocateService.cs index 95d59a8c..4ce5a6bf 100644 --- a/Moonlight/App/Services/Sessions/IpLocateService.cs +++ b/Moonlight/App/Services/Sessions/IpLocateService.cs @@ -15,7 +15,7 @@ public class IpLocateService public async Task GetLocation() { - var ip = IdentityService.GetIp(); + var ip = IdentityService.Ip; var location = "N/A"; if (ip != "N/A") diff --git a/Moonlight/App/Services/Sessions/SessionClientService.cs b/Moonlight/App/Services/Sessions/SessionClientService.cs index e7040ba4..8ff084f6 100644 --- a/Moonlight/App/Services/Sessions/SessionClientService.cs +++ b/Moonlight/App/Services/Sessions/SessionClientService.cs @@ -40,9 +40,9 @@ public class SessionClientService public async Task Start() { - User = await IdentityService.Get(); - Ip = IdentityService.GetIp(); - Device = IdentityService.GetDevice(); + User = IdentityService.User; + Ip = IdentityService.Ip; + Device = IdentityService.Device; if (User != null) // Track users last visit { diff --git a/Moonlight/App/Services/SupportChat/SupportChatAdminService.cs b/Moonlight/App/Services/SupportChat/SupportChatAdminService.cs index d9acc9ef..20c67290 100644 --- a/Moonlight/App/Services/SupportChat/SupportChatAdminService.cs +++ b/Moonlight/App/Services/SupportChat/SupportChatAdminService.cs @@ -34,7 +34,7 @@ public class SupportChatAdminService : IDisposable public async Task Start(User recipient) { - User = await IdentityService.Get(); + User = IdentityService.User; Recipient = recipient; if (User != null) diff --git a/Moonlight/App/Services/SupportChat/SupportChatClientService.cs b/Moonlight/App/Services/SupportChat/SupportChatClientService.cs index 8c079cfc..c4f695ce 100644 --- a/Moonlight/App/Services/SupportChat/SupportChatClientService.cs +++ b/Moonlight/App/Services/SupportChat/SupportChatClientService.cs @@ -33,7 +33,7 @@ public class SupportChatClientService : IDisposable public async Task Start() { - User = await IdentityService.Get(); + User = IdentityService.User; if (User != null) { diff --git a/Moonlight/App/Services/TotpService.cs b/Moonlight/App/Services/TotpService.cs index ef46b9f0..2d624d92 100644 --- a/Moonlight/App/Services/TotpService.cs +++ b/Moonlight/App/Services/TotpService.cs @@ -25,32 +25,30 @@ public class TotpService return Task.FromResult(codeserver == code); } - public async Task GetEnabled() + public Task GetEnabled() { - var user = await IdentityService.Get(); - - return user!.TotpEnabled; + return Task.FromResult(IdentityService.User.TotpEnabled); } - public async Task GetSecret() + public Task GetSecret() { - var user = await IdentityService.Get(); - - return user!.TotpSecret; + return Task.FromResult(IdentityService.User.TotpSecret); } - public async Task GenerateSecret() + public Task GenerateSecret() { - var user = (await IdentityService.Get())!; + var user = IdentityService.User; user.TotpSecret = Base32Encoding.ToString(KeyGeneration.GenerateRandomKey(20));; UserRepository.Update(user); + + return Task.CompletedTask; } public async Task Enable(string code) { - var user = (await IdentityService.Get())!; + var user = IdentityService.User; if (!await Verify(user.TotpSecret, code)) { @@ -61,9 +59,9 @@ public class TotpService UserRepository.Update(user); } - public async Task Disable() + public Task Disable() { - var user = (await IdentityService.Get())!; + var user = IdentityService.User; user.TotpEnabled = false; user.TotpSecret = ""; @@ -71,5 +69,7 @@ public class TotpService UserRepository.Update(user); //TODO: AuditLog + + return Task.CompletedTask; } } \ No newline at end of file diff --git a/Moonlight/App/Services/UserService.cs b/Moonlight/App/Services/UserService.cs index cab1b644..77c26316 100644 --- a/Moonlight/App/Services/UserService.cs +++ b/Moonlight/App/Services/UserService.cs @@ -85,8 +85,8 @@ public class UserService TotpSecret = "", UpdatedAt = DateTimeService.GetCurrent(), TokenValidTime = DateTimeService.GetCurrent().AddDays(-5), - LastIp = IdentityService.GetIp(), - RegisterIp = IdentityService.GetIp() + LastIp = IdentityService.Ip, + RegisterIp = IdentityService.Ip }); await MailService.SendMail(user!, "register", values => {}); @@ -174,8 +174,8 @@ public class UserService await MailService.SendMail(user!, "passwordChange", values => { - values.Add("Ip", IdentityService.GetIp()); - values.Add("Device", IdentityService.GetDevice()); + values.Add("Ip", IdentityService.Ip); + values.Add("Device", IdentityService.Device); values.Add("Location", location); }); @@ -212,8 +212,8 @@ public class UserService { await MailService.SendMail(user!, "login", values => { - values.Add("Ip", IdentityService.GetIp()); - values.Add("Device", IdentityService.GetDevice()); + values.Add("Ip", IdentityService.Ip); + values.Add("Device", IdentityService.Device); values.Add("Location", location); }); } @@ -249,8 +249,8 @@ public class UserService await MailService.SendMail(user, "passwordReset", values => { - values.Add("Ip", IdentityService.GetIp()); - values.Add("Device", IdentityService.GetDevice()); + values.Add("Ip", IdentityService.Ip); + values.Add("Device", IdentityService.Device); values.Add("Location", location); values.Add("Password", newPassword); }); diff --git a/Moonlight/Moonlight.csproj b/Moonlight/Moonlight.csproj index 02cac376..078f2ddc 100644 --- a/Moonlight/Moonlight.csproj +++ b/Moonlight/Moonlight.csproj @@ -78,6 +78,8 @@ <_ContentIncludedByDefault Remove="Shared\Components\News\NewsEditor.razor" /> <_ContentIncludedByDefault Remove="Shared\News\Edit.razor" /> <_ContentIncludedByDefault Remove="Shared\Views\Admin\AaPanels\Index.razor" /> + <_ContentIncludedByDefault Remove="Shared\Views\Admin\Databases\Index.razor" /> + <_ContentIncludedByDefault Remove="Shared\Components\StateLogic\OnlyAdmin.razor" /> diff --git a/Moonlight/Shared/Components/Auth/PasswordChangeView.razor b/Moonlight/Shared/Components/Auth/PasswordChangeView.razor index f57d1aa7..38e0e866 100644 --- a/Moonlight/Shared/Components/Auth/PasswordChangeView.razor +++ b/Moonlight/Shared/Components/Auth/PasswordChangeView.razor @@ -49,9 +49,10 @@ private PasswordModel Password = new(); private User User; - private async Task Load(LazyLoader loader) + private Task Load(LazyLoader loader) { - User = await IdentityService.Get(); + User = IdentityService.User; + return Task.CompletedTask; } private async Task DoChange() diff --git a/Moonlight/Shared/Components/Auth/UserDataSetView.razor b/Moonlight/Shared/Components/Auth/UserDataSetView.razor index d1191ec1..f8c64e8a 100644 --- a/Moonlight/Shared/Components/Auth/UserDataSetView.razor +++ b/Moonlight/Shared/Components/Auth/UserDataSetView.razor @@ -50,9 +50,10 @@ private User User; private NameModel Name = new (); - private async Task Load(LazyLoader loader) + private Task Load(LazyLoader loader) { - User = await IdentityService.Get(); + User = IdentityService.User; + return Task.CompletedTask; } private async Task SetName() diff --git a/Moonlight/Shared/Components/ErrorBoundaries/PageErrorBoundary.razor b/Moonlight/Shared/Components/ErrorBoundaries/PageErrorBoundary.razor index 4cc364fa..587e43f1 100644 --- a/Moonlight/Shared/Components/ErrorBoundaries/PageErrorBoundary.razor +++ b/Moonlight/Shared/Components/ErrorBoundaries/PageErrorBoundary.razor @@ -57,7 +57,7 @@ else { receivedExceptions.Add(exception); - var user = await IdentityService.Get(); + var user = IdentityService.User; var id = user == null ? -1 : user.Id; Logger.Error($"[{id}] An unhanded exception occured:"); diff --git a/Moonlight/Shared/Components/Navigations/ProfileNavigation.razor b/Moonlight/Shared/Components/Navigations/ProfileNavigation.razor index 76caf128..e7db20a1 100644 --- a/Moonlight/Shared/Components/Navigations/ProfileNavigation.razor +++ b/Moonlight/Shared/Components/Navigations/ProfileNavigation.razor @@ -1,5 +1,8 @@ @using Moonlight.App.Database.Entities @using Moonlight.App.Models.Misc +@using Moonlight.App.Services.Sessions + +@inject IdentityService IdentityService
@@ -8,16 +11,16 @@
- @(User.FirstName) @(User.LastName) + @(IdentityService.User.FirstName) @(IdentityService.User.LastName) - @if (User.Status == UserStatus.Verified) + @if (IdentityService.User.Status == UserStatus.Verified) { }
- - @(User.Email) + + @(IdentityService.User.Email)
@@ -51,9 +54,6 @@ @code { - [CascadingParameter] - public User User { get; set; } - [Parameter] public int Index { get; set; } = 0; } \ No newline at end of file diff --git a/Moonlight/Shared/Components/Partials/Navbar.razor b/Moonlight/Shared/Components/Partials/Navbar.razor index 58e0376a..00b57ae6 100644 --- a/Moonlight/Shared/Components/Partials/Navbar.razor +++ b/Moonlight/Shared/Components/Partials/Navbar.razor @@ -106,7 +106,7 @@ { if (firstRender) { - User = await IdentityService.Get(); + User = IdentityService.User; await InvokeAsync(StateHasChanged); } diff --git a/Moonlight/Shared/Components/Partials/RenderPermissionChecker.razor b/Moonlight/Shared/Components/Partials/RenderPermissionChecker.razor index 319ac452..6ccf7137 100644 --- a/Moonlight/Shared/Components/Partials/RenderPermissionChecker.razor +++ b/Moonlight/Shared/Components/Partials/RenderPermissionChecker.razor @@ -54,7 +54,7 @@ else if (!Allowed) { - Logger.Warn($"{IdentityService.GetIp()} has tried to access {NavigationManager.Uri} without permission", "security"); + Logger.Warn($"{IdentityService.Ip} has tried to access {NavigationManager.Uri} without permission", "security"); } return Task.CompletedTask; diff --git a/Moonlight/Shared/Components/Partials/Sidebar.razor b/Moonlight/Shared/Components/Partials/Sidebar.razor index 41b19160..325b7857 100644 --- a/Moonlight/Shared/Components/Partials/Sidebar.razor +++ b/Moonlight/Shared/Components/Partials/Sidebar.razor @@ -49,7 +49,7 @@ { if (firstRender) { - User = await IdentityService.Get(); + User = IdentityService.User; sidebar = await JsRuntime.InvokeAsync("document.body.getAttribute", "data-kt-app-layout"); StateHasChanged(); } diff --git a/Moonlight/Shared/Components/Partials/SidebarMenu.razor b/Moonlight/Shared/Components/Partials/SidebarMenu.razor index 9926d16e..e4e7090d 100644 --- a/Moonlight/Shared/Components/Partials/SidebarMenu.razor +++ b/Moonlight/Shared/Components/Partials/SidebarMenu.razor @@ -228,7 +228,7 @@ else { if (firstRender) { - User = await IdentityService.Get(); + User = IdentityService.User; await InvokeAsync(StateHasChanged); } diff --git a/Moonlight/Shared/Components/StateLogic/OnlyAdmin.razor b/Moonlight/Shared/Components/StateLogic/OnlyAdmin.razor deleted file mode 100644 index 194c646b..00000000 --- a/Moonlight/Shared/Components/StateLogic/OnlyAdmin.razor +++ /dev/null @@ -1,28 +0,0 @@ -@using Moonlight.App.Services.Sessions -@using Moonlight.App.Database.Entities - -@if (User != null) -{ - if (User.Admin) - { - @ChildContent - } - else if(!Silent) - { -
- Missing admin permissions. This attempt has been logged ;) -
- } -} - -@code -{ - [Parameter] - public RenderFragment ChildContent { get; set; } - - [CascadingParameter] - public User? User { get; set; } - - [Parameter] - public bool Silent { get; set; } = false; -} diff --git a/Moonlight/Shared/Layouts/MainLayout.razor b/Moonlight/Shared/Layouts/MainLayout.razor index 28f4e29c..6ea2985b 100644 --- a/Moonlight/Shared/Layouts/MainLayout.razor +++ b/Moonlight/Shared/Layouts/MainLayout.razor @@ -42,94 +42,79 @@ } - - @(string.IsNullOrEmpty(title) ? "Dashboard - " : title)Moonlight + @(string.IsNullOrEmpty(title) ? "Dashboard - " : title)Moonlight -
-
- +
+
+ - @{ - //TODO: Add a way to disable the snow - } + @{ + //TODO: Add a way to disable the snow + } - -
- -
-
-
-
-
- - @if (!IsIpBanned) + +
+ +
+
+
+
+
+ + @if (!IsIpBanned) + { + if (UserProcessed) { - if (UserProcessed) + if (uri.LocalPath != "/login" && + uri.LocalPath != "/passwordreset" && + uri.LocalPath != "/register") { - if (uri.LocalPath != "/login" && - uri.LocalPath != "/passwordreset" && - uri.LocalPath != "/register") + if (IdentityService.User == null) { - if (User == null) - { - - } - else - { - if (User.Status == UserStatus.Banned) - { - - } - else if (User.Status == UserStatus.Disabled) - { - - } - else if (User.Status == UserStatus.PasswordPending) - { - - } - else if (User.Status == UserStatus.DataPending) - { - - } - else - { - - @Body - - - - } - } + } else { - if (uri.LocalPath == "/login") + if (IdentityService.User.Status == UserStatus.Banned) { - + } - else if (uri.LocalPath == "/register") + else if (IdentityService.User.Status == UserStatus.Disabled) { - + } - else if (uri.LocalPath == "/passwordreset") + else if (IdentityService.User.Status == UserStatus.PasswordPending) { - + + } + else if (IdentityService.User.Status == UserStatus.DataPending) + { + + } + else + { + + @Body + + + } } } else { - + if (uri.LocalPath == "/login") + { + + } + else if (uri.LocalPath == "/register") + { + + } + else if (uri.LocalPath == "/passwordreset") + { + + } } } else @@ -138,38 +123,50 @@
} - -
+ } + else + { + + } +
-
+
- +
@code { - private User? User; private bool UserProcessed = false; private bool IsIpBanned = false; protected override void OnAfterRender(bool firstRender) { - if(firstRender) + if (firstRender) AddBodyAttribute("data-kt-app-page-loading", "on"); - + //Initialize classes and attributes for layout with dark sidebar AddBodyAttribute("data-kt-app-reset-transition", "true"); @@ -204,7 +201,7 @@ NavigationManager.NavigateTo(NavigationManager.Uri, true); }); - User = await IdentityService.Get(); + await IdentityService.Load(); UserProcessed = true; await InvokeAsync(StateHasChanged); @@ -215,7 +212,10 @@ await JsRuntime.InvokeVoidAsync("KTMenu.createInstances"); await JsRuntime.InvokeVoidAsync("KTDrawer.createInstances"); } - catch (Exception){ /* ignore errors to make sure that the session call is executed */ } + catch (Exception) + { + /* ignore errors to make sure that the session call is executed */ + } await SessionClientService.Start(); @@ -225,14 +225,14 @@ await DynamicBackgroundService.Reset(); }; - if (User != null) + if (IdentityService.User != null) { await Event.On( - $"supportChat.{User.Id}.message", + $"supportChat.{IdentityService.User.Id}.message", this, async message => { - if (!NavigationManager.Uri.EndsWith("/support") && message.Sender != User) + if (!NavigationManager.Uri.EndsWith("/support") && message.Sender != IdentityService.User) { await ToastService.Info($"Support: {message.Content}"); } @@ -259,9 +259,9 @@ await KeyListenerService.DisposeAsync(); - if (User != null) + if (IdentityService.User != null) { - await Event.Off($"supportChat.{User.Id}.message", this); + await Event.Off($"supportChat.{IdentityService.User.Id}.message", this); } } diff --git a/Moonlight/Shared/Layouts/NotFoundLayout.razor b/Moonlight/Shared/Layouts/NotFoundLayout.razor index 7f0a1584..479866a0 100644 --- a/Moonlight/Shared/Layouts/NotFoundLayout.razor +++ b/Moonlight/Shared/Layouts/NotFoundLayout.razor @@ -60,8 +60,6 @@ @code { - private User? User; - protected override void OnInitialized() { AddBodyAttribute("data-kt-app-page-loading", "on"); @@ -95,7 +93,7 @@ { try { - User = await IdentityService.Get(); + await IdentityService.Load(); await InvokeAsync(StateHasChanged); await Task.Delay(300); diff --git a/Moonlight/Shared/Views/Admin/Databases/Index.razor b/Moonlight/Shared/Views/Admin/Databases/Index.razor deleted file mode 100644 index 4b858ad2..00000000 --- a/Moonlight/Shared/Views/Admin/Databases/Index.razor +++ /dev/null @@ -1,5 +0,0 @@ -@page "/admin/databases" - - - - \ No newline at end of file diff --git a/Moonlight/Shared/Views/Admin/Domains/Index.razor b/Moonlight/Shared/Views/Admin/Domains/Index.razor index 856f2f11..ef3fafe4 100644 --- a/Moonlight/Shared/Views/Admin/Domains/Index.razor +++ b/Moonlight/Shared/Views/Admin/Domains/Index.razor @@ -9,59 +9,59 @@ @inject DomainService DomainService @inject SmartTranslateService SmartTranslateService - - -
-
-
-

- - Domains - -

- +@attribute [PermissionRequired(nameof(Permissions.AdminDomains))] + + +
+
+
+

+ + Domains + +

+ -
-
- - - - - - - - - - - - - - - - -
-
+
+
+
+ + + + + + + + + + + + + + + + +
- - +
+ @code { diff --git a/Moonlight/Shared/Views/Admin/Domains/New.razor b/Moonlight/Shared/Views/Admin/Domains/New.razor index 0b08c4c0..ee86d2d5 100644 --- a/Moonlight/Shared/Views/Admin/Domains/New.razor +++ b/Moonlight/Shared/Views/Admin/Domains/New.razor @@ -11,8 +11,9 @@ @inject NavigationManager NavigationManager @inject DomainService DomainService - -
+@attribute [PermissionRequired(nameof(Permissions.AdminNewDomain))] + +
@@ -48,7 +49,6 @@
- @code { diff --git a/Moonlight/Shared/Views/Admin/Domains/Shared/Index.razor b/Moonlight/Shared/Views/Admin/Domains/Shared/Index.razor index 86a1d1c6..d6f11f3f 100644 --- a/Moonlight/Shared/Views/Admin/Domains/Shared/Index.razor +++ b/Moonlight/Shared/Views/Admin/Domains/Shared/Index.razor @@ -12,39 +12,39 @@ @inject AlertService AlertService @inject ToastService ToastService - - -
-
-

- - Shared domains - -

- -
-
- - - - - - -
-
-
-
-
+@attribute [PermissionRequired(nameof(Permissions.AdminSharedDomains))] + + +
+
+

+ + Shared domains + +

+ +
+
+ + + + + + +
+
+
+
@code { diff --git a/Moonlight/Shared/Views/Admin/Domains/Shared/New.razor b/Moonlight/Shared/Views/Admin/Domains/Shared/New.razor index 6d48f93f..e2426046 100644 --- a/Moonlight/Shared/Views/Admin/Domains/Shared/New.razor +++ b/Moonlight/Shared/Views/Admin/Domains/Shared/New.razor @@ -12,6 +12,8 @@ @inject ToastService ToastService @inject NavigationManager NavigationManager +@attribute [PermissionRequired(nameof(Permissions.AdminNewSharedDomain))] +
diff --git a/Moonlight/Shared/Views/Admin/Index.razor b/Moonlight/Shared/Views/Admin/Index.razor index b8d1a686..cc75bee9 100644 --- a/Moonlight/Shared/Views/Admin/Index.razor +++ b/Moonlight/Shared/Views/Admin/Index.razor @@ -5,7 +5,6 @@ @using Moonlight.App.Database.Entities @using Moonlight.App.Helpers @using Moonlight.App.Models.Misc -@using Moonlight.App.Perms @using Moonlight.App.Services @using Newtonsoft.Json diff --git a/Moonlight/Shared/Views/Admin/Nodes/Ddos.razor b/Moonlight/Shared/Views/Admin/Nodes/Ddos.razor index 4a73adae..9b626a0f 100644 --- a/Moonlight/Shared/Views/Admin/Nodes/Ddos.razor +++ b/Moonlight/Shared/Views/Admin/Nodes/Ddos.razor @@ -15,61 +15,61 @@ @inject SmartTranslateService SmartTranslateService @inject EventSystem Event - - +@attribute [PermissionRequired(nameof(Permissions.AdminNodeDdos))] - -
-
-
- - - - - - - - - - - - - - - - -
-
+ + + +
+
+
+ + + + + + + + + + + + + + + + +
- - +
+
@code { diff --git a/Moonlight/Shared/Views/Admin/Nodes/Edit.razor b/Moonlight/Shared/Views/Admin/Nodes/Edit.razor index 21b7a9cc..0700294d 100644 --- a/Moonlight/Shared/Views/Admin/Nodes/Edit.razor +++ b/Moonlight/Shared/Views/Admin/Nodes/Edit.razor @@ -9,8 +9,9 @@ @inject SmartTranslateService SmartTranslateService @inject NavigationManager NavigationManager - - +@attribute [PermissionRequired(nameof(Permissions.AdminNodeEdit))] + + @if (Node == null) {
@@ -149,7 +150,6 @@
}
-
@code { diff --git a/Moonlight/Shared/Views/Admin/Nodes/Index.razor b/Moonlight/Shared/Views/Admin/Nodes/Index.razor index bdc40d22..b9f0dfc2 100644 --- a/Moonlight/Shared/Views/Admin/Nodes/Index.razor +++ b/Moonlight/Shared/Views/Admin/Nodes/Index.razor @@ -13,89 +13,89 @@ @inject NodeService NodeService @inject SmartTranslateService SmartTranslateService - - +@attribute [PermissionRequired(nameof(Permissions.AdminNodes))] - -
-
-

- - Nodes - -

- -
-
- @if (Nodes.Any()) - { -
- - - - - - - - - - - - - - - - - - - -
-
- } - else - { -
- No nodes found -
- } + +
+
+

+ + Nodes + +

+
- - +
+ @if (Nodes.Any()) + { +
+ + + + + + + + + + + + + + + + + + + +
+
+ } + else + { +
+ No nodes found +
+ } +
+
+
@code { diff --git a/Moonlight/Shared/Views/Admin/Nodes/New.razor b/Moonlight/Shared/Views/Admin/Nodes/New.razor index 6da5ae9f..d21a2bd0 100644 --- a/Moonlight/Shared/Views/Admin/Nodes/New.razor +++ b/Moonlight/Shared/Views/Admin/Nodes/New.razor @@ -9,8 +9,9 @@ @inject NodeRepository NodeRepository @inject NavigationManager NavigationManager - -
+@attribute [PermissionRequired(nameof(Permissions.AdminNewNode))] + +
@@ -73,7 +74,6 @@
- @code { diff --git a/Moonlight/Shared/Views/Admin/Nodes/Setup.razor b/Moonlight/Shared/Views/Admin/Nodes/Setup.razor index 1296259e..65d44019 100644 --- a/Moonlight/Shared/Views/Admin/Nodes/Setup.razor +++ b/Moonlight/Shared/Views/Admin/Nodes/Setup.razor @@ -6,12 +6,13 @@ @inject NodeRepository NodeRepository @inject ConfigService ConfigService +@attribute [PermissionRequired(nameof(Permissions.AdminNodeSetup))] + @{ var appUrl = ConfigService.Get().Moonlight.AppUrl; } - - + @if (Node == null) {
@@ -141,7 +142,6 @@
}
-
@code { diff --git a/Moonlight/Shared/Views/Admin/Nodes/View.razor b/Moonlight/Shared/Views/Admin/Nodes/View.razor index d4c59945..6b27e3f2 100644 --- a/Moonlight/Shared/Views/Admin/Nodes/View.razor +++ b/Moonlight/Shared/Views/Admin/Nodes/View.razor @@ -10,7 +10,8 @@ @inject NodeRepository NodeRepository @inject NodeService NodeService - +@attribute [PermissionRequired(nameof(Permissions.AdminNodeView))] + @if (Node == null) { @@ -252,7 +253,6 @@ else
} - @code { diff --git a/Moonlight/Shared/Views/Admin/Notifications/Debugging.razor b/Moonlight/Shared/Views/Admin/Notifications/Debugging.razor index 56ac22c4..da88d774 100644 --- a/Moonlight/Shared/Views/Admin/Notifications/Debugging.razor +++ b/Moonlight/Shared/Views/Admin/Notifications/Debugging.razor @@ -12,8 +12,9 @@ @implements IDisposable - - +@attribute [PermissionRequired(nameof(Permissions.AdminNotificationDebugging))] + +
@@ -31,8 +32,6 @@
-
- @code { diff --git a/Moonlight/Shared/Views/Admin/Servers/Cleanup.razor b/Moonlight/Shared/Views/Admin/Servers/Cleanup.razor index 8104762b..888060a0 100644 --- a/Moonlight/Shared/Views/Admin/Servers/Cleanup.razor +++ b/Moonlight/Shared/Views/Admin/Servers/Cleanup.razor @@ -7,8 +7,9 @@ @implements IDisposable - -
+@attribute [PermissionRequired(nameof(Permissions.AdminServerCleanup))] + +
@@ -76,7 +77,6 @@
- @code { diff --git a/Moonlight/Shared/Views/Admin/Servers/Edit.razor b/Moonlight/Shared/Views/Admin/Servers/Edit.razor index 2014c193..5eeeb55b 100644 --- a/Moonlight/Shared/Views/Admin/Servers/Edit.razor +++ b/Moonlight/Shared/Views/Admin/Servers/Edit.razor @@ -13,165 +13,165 @@ @inject ImageRepository ImageRepository @inject Repository UserRepository - - - @if (Server == null) - { -
- No server with this id found -
- } - else - { - -
-
- -
- - - - -
- -
- - - - -
- -
- - - - -
- -
- - -
-
-
-
-
- -
- - - - - - CPU Cores (100% = 1 Core) - -
- -
- - - - - - MB - -
- -
- - - - - - MB - -
-
-
-
-
- -
- - - - -
- - - - -
-
-
- @foreach (var vars in Server.Variables.Chunk(4)) +@attribute [PermissionRequired(nameof(Permissions.AdminServerEdit))] + + + @if (Server == null) { -
- @foreach (var variable in vars) - { -
-
- -
- -
- -
- -
-
-
- } +
+ No server with this id found
} -
-
-
-
- - Cancel - - -
-
-
- - } -
- + else + { + +
+
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + +
+
+
+
+
+ +
+ + + + + + CPU Cores (100% = 1 Core) + +
+ +
+ + + + + + MB + +
+ +
+ + + + + + MB + +
+
+
+
+
+ +
+ + + + +
+ + + + +
+
+
+ @foreach (var vars in Server.Variables.Chunk(4)) + { +
+ @foreach (var variable in vars) + { +
+
+ +
+ +
+ +
+ +
+
+
+ } +
+ } +
+
+
+
+ + Cancel + + +
+
+
+
+ } + @code { diff --git a/Moonlight/Shared/Views/Admin/Servers/Index.razor b/Moonlight/Shared/Views/Admin/Servers/Index.razor index 2e5517c6..8a967184 100644 --- a/Moonlight/Shared/Views/Admin/Servers/Index.razor +++ b/Moonlight/Shared/Views/Admin/Servers/Index.razor @@ -8,7 +8,7 @@ @inject ServerRepository ServerRepository @inject SmartTranslateService SmartTranslateService -@attribute [PermissionRequired(nameof(Permissions.ServersOverview))] +@attribute [PermissionRequired(nameof(Permissions.AdminServers))]
diff --git a/Moonlight/Shared/Views/Admin/Servers/Manager.razor b/Moonlight/Shared/Views/Admin/Servers/Manager.razor index c30d7142..f91ba4fa 100644 --- a/Moonlight/Shared/Views/Admin/Servers/Manager.razor +++ b/Moonlight/Shared/Views/Admin/Servers/Manager.razor @@ -18,86 +18,86 @@ @inject AlertService AlertService @inject ServerService ServerService - -
-
- - - - - - -
+@attribute [PermissionRequired(nameof(Permissions.AdminServerManager))] + +
+
+ + + + + +
-
-
- @if (IsRunning) - { -

Currently scanning: @(Node?.Name)

- } - else - { - Scan complete - } -
+
+
+
+ @if (IsRunning) + { +

Currently scanning: @(Node?.Name)

+ } + else + { + Scan complete + }
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
-
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
- +
@code { diff --git a/Moonlight/Shared/Views/Admin/Servers/New.razor b/Moonlight/Shared/Views/Admin/Servers/New.razor index d0c7281d..c45e94bf 100644 --- a/Moonlight/Shared/Views/Admin/Servers/New.razor +++ b/Moonlight/Shared/Views/Admin/Servers/New.razor @@ -17,163 +17,163 @@ @inject NavigationManager NavigationManager @inject UserRepository UserRepository - - - -
-
- -
- - - - -
- -
- - -
-
-
-
-
- -
- - - - - - CPU Cores (100% = 1 Core) - -
- -
- - - - - - MB - -
- -
- - - - - - MB - -
- -
- - -
-
-
-
-
- -
- -
- @if (Model.Image != null) - { - -
- - - - -
- - - @foreach (var image in Model.Image.DockerImages) - { - - } - - } -
-
+@attribute [PermissionRequired(nameof(Permissions.AdminNewServer))] -
-
- @if (Model.Image != null) - { -
- @foreach (var vars in ServerVariables.Chunk(3)) - { -
- @foreach (var variable in vars) - { -
-
- -
- -
- -
- -
-
-
- } + + +
+
+ +
+ + + +
- } + +
+ + +
+
- } -
-
- -
-
-
- - Cancel - - -
-
-
- - - +
+
+ +
+ + + + + + CPU Cores (100% = 1 Core) + +
+ +
+ + + + + + MB + +
+ +
+ + + + + + MB + +
+ +
+ + +
+
+
+
+
+ +
+ +
+ @if (Model.Image != null) + { + +
+ + + + +
+ + + @foreach (var image in Model.Image.DockerImages) + { + + } + + } +
+
+ +
+
+ @if (Model.Image != null) + { +
+ @foreach (var vars in ServerVariables.Chunk(3)) + { +
+ @foreach (var variable in vars) + { +
+
+ +
+ +
+ +
+ +
+
+
+ } +
+ } +
+ } +
+
+ +
+
+
+ + Cancel + + +
+
+
+ + @code { diff --git a/Moonlight/Shared/Views/Admin/Statistics.razor b/Moonlight/Shared/Views/Admin/Statistics.razor index 14481fba..8441a22a 100644 --- a/Moonlight/Shared/Views/Admin/Statistics.razor +++ b/Moonlight/Shared/Views/Admin/Statistics.razor @@ -10,78 +10,78 @@ @inject StatisticsViewService StatisticsViewService @inject SmartTranslateService SmartTranslateService - -
-
-
- -
+@attribute [PermissionRequired(nameof(Permissions.AdminStatistics))] + +
+
+
+
+
- - @foreach (var charts in Charts.Chunk(2)) - { -
- @foreach (var chart in charts) - { -
-
-
-
- @chart.Key -
-
-
- - - -
-
-
- } -
- } + + @foreach (var charts in Charts.Chunk(2)) + {
-
-
-
-
- Active users + @foreach (var chart in charts) + { +
+
+
+
+ @chart.Key +
+
+
+ + +
-
- @(ActiveUsers) +
+ } +
+ } +
+
+
+
+
+ Active users
+
+ @(ActiveUsers) +
- - +
+ @code { diff --git a/Moonlight/Shared/Views/Admin/Subscriptions/Edit.razor b/Moonlight/Shared/Views/Admin/Subscriptions/Edit.razor index 40dfe36e..485df0cd 100644 --- a/Moonlight/Shared/Views/Admin/Subscriptions/Edit.razor +++ b/Moonlight/Shared/Views/Admin/Subscriptions/Edit.razor @@ -10,155 +10,155 @@ @inject SubscriptionRepository SubscriptionRepository @inject SubscriptionService SubscriptionService - -
- - @if (Subscription == null) - { -
- No subscription with this id has been found -
- } - else - { - - -
- -
- -
- -
- -
- -
- -
- -
- -
- -
+@attribute [PermissionRequired(nameof(Permissions.AdminSubscriptionEdit))] -
- @foreach (var limitPart in Limits.Chunk(3)) +
+ + @if (Subscription == null) + { +
+ No subscription with this id has been found +
+ } + else + { + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ + if (Model.Currency == currency) + { + + } + else + { + + } + } + +
+ +
+ +
+ +
+ @foreach (var limitPart in Limits.Chunk(3)) + { +
+ @foreach (var limit in limitPart) + { +
+
+ +
+ +
+ +
+ +
+
+
+ Options
- -
- -
-
-
- Options -
-
- +
+
+
-
- - -
+
+
+ +
- } -
- } -
+
+ } +
+ } +
-
- - -
-
- } -
-
-
+
+ + +
+ + } + +
@code { diff --git a/Moonlight/Shared/Views/Admin/Subscriptions/Index.razor b/Moonlight/Shared/Views/Admin/Subscriptions/Index.razor index f15b2def..184bfa0c 100644 --- a/Moonlight/Shared/Views/Admin/Subscriptions/Index.razor +++ b/Moonlight/Shared/Views/Admin/Subscriptions/Index.razor @@ -9,52 +9,52 @@ @inject SubscriptionRepository SubscriptionRepository @inject SubscriptionService SubscriptionService - -
- -
-

- - Subscriptions - -

- -
-
-
- - - - - - - - - - - - - - -
+
+
+
+
+ + + + + + + + + + + + + + +
+
+
+
-
- -
- @code { diff --git a/Moonlight/Shared/Views/Admin/Subscriptions/New.razor b/Moonlight/Shared/Views/Admin/Subscriptions/New.razor index 5deb8766..e5b078ab 100644 --- a/Moonlight/Shared/Views/Admin/Subscriptions/New.razor +++ b/Moonlight/Shared/Views/Admin/Subscriptions/New.razor @@ -8,144 +8,144 @@ @inject SubscriptionRepository SubscriptionRepository @inject SubscriptionService SubscriptionService - -
- - -
- -
- -
- -
- -
- -
- -
- -
- -
- -
+@attribute [PermissionRequired(nameof(Permissions.AdminNewSubscription))] -
- @foreach (var limitPart in Limits.Chunk(3)) - { -
- @foreach (var limit in limitPart) - { -
-
- -
- -
- -
- -
-
-
- Options -
-
- - + } +
+ +
+ + +
+ +
@code { diff --git a/Moonlight/Shared/Views/Admin/Support/Index.razor b/Moonlight/Shared/Views/Admin/Support/Index.razor index ede64b7d..ca27d4d5 100644 --- a/Moonlight/Shared/Views/Admin/Support/Index.razor +++ b/Moonlight/Shared/Views/Admin/Support/Index.razor @@ -8,8 +8,9 @@ @implements IDisposable - - +@attribute [PermissionRequired(nameof(Permissions.AdminSupport))] + +
@@ -70,7 +71,6 @@
- @code { diff --git a/Moonlight/Shared/Views/Admin/Support/View.razor b/Moonlight/Shared/Views/Admin/Support/View.razor index 58dc3b1b..5b28d7fc 100644 --- a/Moonlight/Shared/Views/Admin/Support/View.razor +++ b/Moonlight/Shared/Views/Admin/Support/View.razor @@ -14,213 +14,213 @@ @implements IDisposable - - - @if (User == null) - { -
- User not found -
- } - else - { -
-
-
-
-
- -
- @foreach (var message in Messages) - { - if (message.Sender == null || message.Sender.Id != User.Id) - { -
-
-
- -
- Logo -
-
+@attribute [PermissionRequired(nameof(Permissions.AdminSupportView))] -
- @if (message.Sender == null) - { - @(message.Content) - } - else - { - foreach (var line in message.Content.Split("\n")) - { - @(line)
- } - - if (message.Attachment != "") - { -
- @if (Regex.IsMatch(message.Attachment, @"\.(jpg|jpeg|png|gif|bmp)$")) + + @if (User == null) + { +
+ User not found +
+ } + else + { +
+
+
+
+
+ +
+ @foreach (var message in Messages) + { + if (message.Sender == null || message.Sender.Id != User.Id) + { +
+
+
+ +
+ Logo +
+
+ +
+ @if (message.Sender == null) { - Attachment + @(message.Content) } else { - - @(message.Attachment) - + foreach (var line in message.Content.Split("\n")) + { + @(line)
+ } + + if (message.Attachment != "") + { +
+ @if (Regex.IsMatch(message.Attachment, @"\.(jpg|jpeg|png|gif|bmp)$")) + { + Attachment + } + else + { + + @(message.Attachment) + + } +
+ } }
- } - } -
-
-
- } - else - { -
-
-
-
- Avatar -
-
- - @(message.Sender.FirstName) @(message.Sender.LastName) - - @(Formatter.FormatAgoFromDateTime(message.CreatedAt, SmartTranslateService)) -
-
- -
- @{ - int i = 0; - var arr = message.Content.Split("\n", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);} - @foreach (var line in arr) - { - @line - if (i++ != arr.Length - 1) - { -
- } - } - - @if (message.Attachment != "") - { -
- @if (Regex.IsMatch(message.Attachment, @"\.(jpg|jpeg|png|gif|bmp)$")) - { - Attachment - } - else - { - - @(message.Attachment) - - }
- } -
-
+
+ } + else + { +
+
+
+
+ Avatar +
+
+ + @(message.Sender.FirstName) @(message.Sender.LastName) + + @(Formatter.FormatAgoFromDateTime(message.CreatedAt, SmartTranslateService)) +
+
+ +
+ @{ + int i = 0; + var arr = message.Content.Split("\n", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);} + @foreach (var line in arr) + { + @line + if (i++ != arr.Length - 1) + { +
+ } + } + + @if (message.Attachment != "") + { +
+ @if (Regex.IsMatch(message.Attachment, @"\.(jpg|jpeg|png|gif|bmp)$")) + { + Attachment + } + else + { + + @(message.Attachment) + + } +
+ } +
+
+
+ } + }
- } - } -
- -
- +
+
+
+

+ User information +

+ +
+ + Name: @(User.FirstName) @User.LastName - } - else - { - - @(Typing.First()) is typing +
+
+ + Email: @(User.Email) - } - - } - -
- - - - - - -
- - - - - + +
+ + -
+ +
+
-
-
-
-

- User information -

- -
- - Name: @(User.FirstName) @User.LastName - -
-
- - Email: @(User.Email) - -
-
- - - - -
-
-
-
-
- } - - + } + @code { diff --git a/Moonlight/Shared/Views/Admin/Sys/Configuration.razor b/Moonlight/Shared/Views/Admin/Sys/Configuration.razor index eb945763..9676ab0e 100644 --- a/Moonlight/Shared/Views/Admin/Sys/Configuration.razor +++ b/Moonlight/Shared/Views/Admin/Sys/Configuration.razor @@ -9,7 +9,7 @@ @inject ToastService ToastService @inject SmartTranslateService SmartTranslateService -@attribute [PermissionRequired(nameof(Permissions.SystemConfiguration))] +@attribute [PermissionRequired(nameof(Permissions.AdminSysConfiguration))] diff --git a/Moonlight/Shared/Views/Admin/Sys/DiscordBot.razor b/Moonlight/Shared/Views/Admin/Sys/DiscordBot.razor index 037183a6..b86ddd0d 100644 --- a/Moonlight/Shared/Views/Admin/Sys/DiscordBot.razor +++ b/Moonlight/Shared/Views/Admin/Sys/DiscordBot.razor @@ -4,7 +4,7 @@ @inject DiscordBotService DiscordBotService -@attribute [PermissionRequired(nameof(Permissions.DiscordBot))] +@attribute [PermissionRequired(nameof(Permissions.AdminSysDiscordBot))] diff --git a/Moonlight/Shared/Views/Admin/Sys/Index.razor b/Moonlight/Shared/Views/Admin/Sys/Index.razor index 9d6e6b03..496e1c9f 100644 --- a/Moonlight/Shared/Views/Admin/Sys/Index.razor +++ b/Moonlight/Shared/Views/Admin/Sys/Index.razor @@ -7,7 +7,7 @@ @inject HostSystemHelper HostSystemHelper @inject MoonlightService MoonlightService -@attribute [PermissionRequired(nameof(Permissions.SystemDashboard))] +@attribute [PermissionRequired(nameof(Permissions.AdminSystem))] diff --git a/Moonlight/Shared/Views/Admin/Sys/Mail.razor b/Moonlight/Shared/Views/Admin/Sys/Mail.razor index 6b918cfa..6a9c8fb4 100644 --- a/Moonlight/Shared/Views/Admin/Sys/Mail.razor +++ b/Moonlight/Shared/Views/Admin/Sys/Mail.razor @@ -5,18 +5,19 @@ @using Moonlight.App.Helpers.Files @using Moonlight.App.Helpers @using BlazorTable -@using Moonlight.App.Database.Entities @using Moonlight.App.Models.Misc @using Moonlight.App.Services @using Moonlight.App.Services.Interop @using Moonlight.App.Services.Mail +@using Moonlight.App.Services.Sessions @inject SmartTranslateService SmartTranslateService @inject ToastService ToastService @inject AlertService AlertService @inject MailService MailService +@inject IdentityService IdentityService -@attribute [PermissionRequired(nameof(Permissions.SystemMail))] +@attribute [PermissionRequired(nameof(Permissions.AdminSysMail))] @@ -92,8 +93,7 @@ @code { - [CascadingParameter] - public User User { get; set; } + private MailTemplate[] MailTemplateFiles; private FileAccess FileAccess; @@ -174,7 +174,7 @@ private async Task SendTestMail() { - await MailService.SendMailRaw(User, "If you see this mail, your moonlight mail configuration is ready to use"); + await MailService.SendMailRaw(IdentityService.User, "If you see this mail, your moonlight mail configuration is ready to use"); await AlertService.Info(SmartTranslateService.Translate("A test mail has been sent to the email address of your account")); } } \ No newline at end of file diff --git a/Moonlight/Shared/Views/Admin/Sys/Malware.razor b/Moonlight/Shared/Views/Admin/Sys/Malware.razor index 97de8771..ccaeec64 100644 --- a/Moonlight/Shared/Views/Admin/Sys/Malware.razor +++ b/Moonlight/Shared/Views/Admin/Sys/Malware.razor @@ -14,7 +14,7 @@ @implements IDisposable -@attribute [PermissionRequired(nameof(Permissions.SystemMalware))] +@attribute [PermissionRequired(nameof(Permissions.AdminSysMalware))] diff --git a/Moonlight/Shared/Views/Admin/Sys/News/Edit.razor b/Moonlight/Shared/Views/Admin/Sys/News/Edit.razor index 73424fa8..86945f6e 100644 --- a/Moonlight/Shared/Views/Admin/Sys/News/Edit.razor +++ b/Moonlight/Shared/Views/Admin/Sys/News/Edit.razor @@ -10,7 +10,7 @@ @inject NavigationManager NavigationManager @inject NewsEntryRepository NewsEntryRepository -@attribute [PermissionRequired(nameof(Permissions.NewsMessages))] +@attribute [PermissionRequired(nameof(Permissions.AdminSysNewsEdit))] @if (Entry == null) diff --git a/Moonlight/Shared/Views/Admin/Sys/News/Index.razor b/Moonlight/Shared/Views/Admin/Sys/News/Index.razor index afe40a7e..fac0fb58 100644 --- a/Moonlight/Shared/Views/Admin/Sys/News/Index.razor +++ b/Moonlight/Shared/Views/Admin/Sys/News/Index.razor @@ -12,7 +12,7 @@ @inject SmartTranslateService SmartTranslateService @inject AlertService AlertService -@attribute [PermissionRequired(nameof(Permissions.NewsMessages))] +@attribute [PermissionRequired(nameof(Permissions.AdminSysNews))] diff --git a/Moonlight/Shared/Views/Admin/Sys/News/New.razor b/Moonlight/Shared/Views/Admin/Sys/News/New.razor index d6e28ca7..66029062 100644 --- a/Moonlight/Shared/Views/Admin/Sys/News/New.razor +++ b/Moonlight/Shared/Views/Admin/Sys/News/New.razor @@ -9,7 +9,7 @@ @inject NavigationManager NavigationManager @inject NewsEntryRepository NewsEntryRepository -@attribute [PermissionRequired(nameof(Permissions.NewsMessages))] +@attribute [PermissionRequired(nameof(Permissions.AdminSysNewsNew))]
diff --git a/Moonlight/Shared/Views/Admin/Sys/Resources.razor b/Moonlight/Shared/Views/Admin/Sys/Resources.razor index 246b62e3..5f737242 100644 --- a/Moonlight/Shared/Views/Admin/Sys/Resources.razor +++ b/Moonlight/Shared/Views/Admin/Sys/Resources.razor @@ -11,7 +11,7 @@ @inject ConfigService ConfigService @inject AlertService AlertService -@attribute [PermissionRequired(nameof(Permissions.SystemResources))] +@attribute [PermissionRequired(nameof(Permissions.AdminSysResources))] diff --git a/Moonlight/Shared/Views/Admin/Sys/Security.razor b/Moonlight/Shared/Views/Admin/Sys/Security.razor index f74a1c0f..2f3ee141 100644 --- a/Moonlight/Shared/Views/Admin/Sys/Security.razor +++ b/Moonlight/Shared/Views/Admin/Sys/Security.razor @@ -13,7 +13,7 @@ @inject EventSystem Event @inject ToastService ToastService -@attribute [PermissionRequired(nameof(Permissions.SystemSecurity))] +@attribute [PermissionRequired(nameof(Permissions.AdminSysSecurity))] diff --git a/Moonlight/Shared/Views/Admin/Sys/Sentry.razor b/Moonlight/Shared/Views/Admin/Sys/Sentry.razor index 8922947e..029e7be8 100644 --- a/Moonlight/Shared/Views/Admin/Sys/Sentry.razor +++ b/Moonlight/Shared/Views/Admin/Sys/Sentry.razor @@ -3,7 +3,7 @@ @using Moonlight.Shared.Components.Navigations @using global::Sentry -@attribute [PermissionRequired(nameof(Permissions.SystemSentry))] +@attribute [PermissionRequired(nameof(Permissions.AdminSysSentry))] diff --git a/Moonlight/Shared/Views/Admin/Users/Edit.razor b/Moonlight/Shared/Views/Admin/Users/Edit.razor index cc220007..2586705f 100644 --- a/Moonlight/Shared/Views/Admin/Users/Edit.razor +++ b/Moonlight/Shared/Views/Admin/Users/Edit.razor @@ -12,8 +12,9 @@ @inject ToastService ToastService @inject SmartTranslateService SmartTranslateService - - +@attribute [PermissionRequired(nameof(Permissions.AdminUserEdit))] + + @if (User == null) {
@@ -156,7 +157,6 @@ - @code { diff --git a/Moonlight/Shared/Views/Admin/Users/Index.razor b/Moonlight/Shared/Views/Admin/Users/Index.razor index b4d93243..1ad31b1b 100644 --- a/Moonlight/Shared/Views/Admin/Users/Index.razor +++ b/Moonlight/Shared/Views/Admin/Users/Index.razor @@ -9,50 +9,50 @@ @inject UserRepository UserRepository @inject SmartTranslateService SmartTranslateService - - +@attribute [PermissionRequired(nameof(Permissions.AdminUsers))] -
- -
-

- - Users - -

- + + +
+ +
+

+ + Users + +

+ -
-
- - - - - - - - - - - - -
-
+
+
+
+ + + + + + + + + + + + +
- -
- +
+
+
@code { diff --git a/Moonlight/Shared/Views/Admin/Users/New.razor b/Moonlight/Shared/Views/Admin/Users/New.razor index 29d611ca..5be64b28 100644 --- a/Moonlight/Shared/Views/Admin/Users/New.razor +++ b/Moonlight/Shared/Views/Admin/Users/New.razor @@ -8,50 +8,50 @@ @inject ToastService ToastService @inject UserService UserService - -
-
- -
- -
- -
- -
- -
- -
- -
- -
+@attribute [PermissionRequired(nameof(Permissions.AdminNewUser))] + +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
-
-
-
- - Cancel - - - -
+
+
+
+
- +
@code { diff --git a/Moonlight/Shared/Views/Admin/Users/Sessions.razor b/Moonlight/Shared/Views/Admin/Users/Sessions.razor index a9df5cf1..197a493e 100644 --- a/Moonlight/Shared/Views/Admin/Users/Sessions.razor +++ b/Moonlight/Shared/Views/Admin/Users/Sessions.razor @@ -13,91 +13,91 @@ @inject AlertService AlertService @inject ToastService ToastService - - +@attribute [PermissionRequired(nameof(Permissions.AdminUserSessions))] -
- -
-

- - Sessions - -

-
- - + + +
+ +
+

+ + Sessions + +

+
+ + +
+
+
+ @if (AllSessions == null) + { +
+ + Loading sessions
-
-
- @if (AllSessions == null) - { -
- - Loading sessions -
- } - else - { - - - - - - - - - - - - - - - - - - - - - -
- } -
-
-
- + } + else + { + + + + + + + + + + + + + + + + + + + + + +
+ } +
+ +
@code { diff --git a/Moonlight/Shared/Views/Admin/Users/View.razor b/Moonlight/Shared/Views/Admin/Users/View.razor index 0be9057a..fc4641cd 100644 --- a/Moonlight/Shared/Views/Admin/Users/View.razor +++ b/Moonlight/Shared/Views/Admin/Users/View.razor @@ -10,236 +10,236 @@ @inject ServerRepository ServerRepository @inject DomainRepository DomainRepository - +@attribute [PermissionRequired(nameof(Permissions.AdminUserView))] + -@if (User == null) -{ -
- No user with this id found -
-} -else -{ -
-
-
-
- Profile picture -
-
- -
-
-

- Servers -

-
-
- @foreach (var server in Servers) - { -
-
- @(server.Name) - @(server.Image.Name) + @if (User == null) + { +
+ No user with this id found +
+ } + else + { +
+
+
+
+ Profile picture
- - if (server != Servers.Last()) - { -
- } - } -
-
-
-
-

- Domains -

-
-
- @foreach (var domain in Domains) - { -
-
- @(domain.Name).@(domain.SharedDomain.Name) + - - if (domain != Domains.Last()) - { -
- } - } -
-
-
-
-
-
-
- -
- @(User.FirstName) -
-
-
-
- -
- @(User.LastName) -
-
-
-
- -
- @(User.Email) -
-
-
-
- -
- @(User.Address) -
-
-
-
- -
- @(User.City) -
-
-
-
- -
- @(User.State) -
-
-
-
- -
- @(User.Country) -
-
-
-
- -
- - @if (User.Admin) +
+
+

+ Servers +

+
+
+ @foreach (var server in Servers) { - + + + if (server != Servers.Last()) + { +
+ } } - else +
+
+
+
+

+ Domains +

+
+
+ @foreach (var domain in Domains) { - + + + if (domain != Domains.Last()) + { +
+ } } - +
-
-
- -
- @(User.Status) +
+
+
+
+ +
+ @(User.FirstName) +
+
+
+
+ +
+ @(User.LastName) +
+
+
+
+ +
+ @(User.Email) +
+
+
+
+ +
+ @(User.Address) +
+
+
+
+ +
+ @(User.City) +
+
+
+
+ +
+ @(User.State) +
+
+
+
+ +
+ @(User.Country) +
+
+
+
+ +
+ + @if (User.Admin) + { + + } + else + { + + } + +
+
+
+
+ +
+ @(User.Status) +
+
+
+
+ +
+ @(User.TotpEnabled) +
+
+
+
+ +
+ @(User.DiscordId) +
+
+
+
+ +
+ + + +
+
+
+
+ +
+ @(Formatter.FormatDate(User.CreatedAt)) +
+
+
+
+ +
+ @(User.RegisterIp) +
+
+
+
+ +
+ @(User.LastIp) +
+
+
-
-
- -
- @(User.TotpEnabled) -
-
-
- -
- @(User.DiscordId) -
-
-
-
- -
- - - -
-
-
-
- -
- @(Formatter.FormatDate(User.CreatedAt)) -
-
-
-
- -
- @(User.RegisterIp) -
-
-
-
- -
- @(User.LastIp) -
-
-
-
-
-
-} - - + } + @code { diff --git a/Moonlight/Shared/Views/Admin/Webspaces/Index.razor b/Moonlight/Shared/Views/Admin/Webspaces/Index.razor index 9bca40d0..e609b5a4 100644 --- a/Moonlight/Shared/Views/Admin/Webspaces/Index.razor +++ b/Moonlight/Shared/Views/Admin/Webspaces/Index.razor @@ -11,62 +11,62 @@ @inject Repository WebSpaceRepository @inject WebSpaceService WebSpaceService - - +@attribute [PermissionRequired(nameof(Permissions.AdminWebspaces))] -
-
-

- - Webspaces - -

- -
-
- -
- - - - - - - - - - - - - - - -
-
-
+ + +
+
+

+ + Webspaces + +

+
- +
+ +
+ + + + + + + + + + + + + + + +
+
+
+
+
@code { diff --git a/Moonlight/Shared/Views/Admin/Webspaces/New.razor b/Moonlight/Shared/Views/Admin/Webspaces/New.razor index 2ea2b6b4..eaa7267b 100644 --- a/Moonlight/Shared/Views/Admin/Webspaces/New.razor +++ b/Moonlight/Shared/Views/Admin/Webspaces/New.razor @@ -9,35 +9,35 @@ @inject UserRepository UserRepository @inject NavigationManager NavigationManager - -
- - - -
- -
- -
- - -
-
- -
-
-
-
-
+@attribute [PermissionRequired(nameof(Permissions.AdminNewWebspace))] + +
+ + + +
+ +
+ +
+ + +
+
+ +
+
+
+
@code { @@ -47,7 +47,7 @@ private async Task OnValidSubmit() { await WebSpaceService.Create(Model.BaseDomain, Model.User); - + NavigationManager.NavigateTo("/admin/webspaces"); } diff --git a/Moonlight/Shared/Views/Admin/Webspaces/Servers/Edit.razor b/Moonlight/Shared/Views/Admin/Webspaces/Servers/Edit.razor index 910e22f0..df1b1f34 100644 --- a/Moonlight/Shared/Views/Admin/Webspaces/Servers/Edit.razor +++ b/Moonlight/Shared/Views/Admin/Webspaces/Servers/Edit.razor @@ -8,8 +8,9 @@ @inject Repository CloudPanelRepository @inject NavigationManager NavigationManager - - +@attribute [PermissionRequired(nameof(Permissions.AdminWebspacesServerEdit))] + + @if (CloudPanel == null) {
@@ -63,7 +64,6 @@
}
-
@code { diff --git a/Moonlight/Shared/Views/Admin/Webspaces/Servers/Index.razor b/Moonlight/Shared/Views/Admin/Webspaces/Servers/Index.razor index 5e08f36b..60147bd7 100644 --- a/Moonlight/Shared/Views/Admin/Webspaces/Servers/Index.razor +++ b/Moonlight/Shared/Views/Admin/Webspaces/Servers/Index.razor @@ -10,76 +10,76 @@ @inject Repository CloudPanelRepository @inject WebSpaceService WebSpaceService - - +@attribute [PermissionRequired(nameof(Permissions.AdminWebspacesServers))] -
-
-

- - Cloud panels - -

- + + +
+
+

+ + Cloud panels + +

+ -
- -
- - - - - - - + + + + + + + + +
+
+
- +
@code { diff --git a/Moonlight/Shared/Views/Admin/Webspaces/Servers/New.razor b/Moonlight/Shared/Views/Admin/Webspaces/Servers/New.razor index b48af5e9..c7b959ab 100644 --- a/Moonlight/Shared/Views/Admin/Webspaces/Servers/New.razor +++ b/Moonlight/Shared/Views/Admin/Webspaces/Servers/New.razor @@ -7,8 +7,9 @@ @inject Repository CloudPanelRepository @inject NavigationManager NavigationManager - -
+@attribute [PermissionRequired(nameof(Permissions.AdminWebspacesServerNew))] + +
-
@code { diff --git a/Moonlight/Shared/Views/Domains/Create.razor b/Moonlight/Shared/Views/Domains/Create.razor index e5efd8ea..5375c5c1 100644 --- a/Moonlight/Shared/Views/Domains/Create.razor +++ b/Moonlight/Shared/Views/Domains/Create.razor @@ -4,6 +4,7 @@ @using Moonlight.App.Models.Forms @using Moonlight.App.Repositories.Domains @using Microsoft.EntityFrameworkCore +@using Moonlight.App.Services.Sessions @inject SubscriptionService SubscriptionService @inject DomainService DomainService @@ -11,6 +12,7 @@ @inject SharedDomainRepository SharedDomainRepository @inject NavigationManager NavigationManager @inject SmartTranslateService SmartTranslateService +@inject IdentityService IdentityService @if (!SharedDomains.Any()) @@ -114,8 +116,7 @@ @code { - [CascadingParameter] - public User User { get; set; } + private SharedDomain[] SharedDomains; @@ -130,12 +131,12 @@ Model = new(); await lazyLoader.SetText(SmartTranslateService.Translate("Loading your subscription")); - Subscription = await SubscriptionService.GetActiveSubscription(User); + Subscription = await SubscriptionService.GetActiveSubscription(IdentityService.User); AllowOrder = DomainRepository .Get() .Include(x => x.Owner) - .Count(x => x.Owner.Id == User.Id) < (await SubscriptionService.GetLimit(User, "domains")).Amount; + .Count(x => x.Owner.Id == IdentityService.User.Id) < (await SubscriptionService.GetLimit(IdentityService.User, "domains")).Amount; await lazyLoader.SetText("Loading shared domains"); SharedDomains = SharedDomainRepository.Get().ToArray(); @@ -146,9 +147,9 @@ if (DomainRepository .Get() .Include(x => x.Owner) - .Count(x => x.Owner.Id == User.Id) < (await SubscriptionService.GetLimit(User, "domains")).Amount) + .Count(x => x.Owner.Id == IdentityService.User.Id) < (await SubscriptionService.GetLimit(IdentityService.User, "domains")).Amount) { - var domain = await DomainService.Create(Model.Name, Model.SharedDomain, User); + var domain = await DomainService.Create(Model.Name, Model.SharedDomain, IdentityService.User); NavigationManager.NavigateTo($"/domain/{domain.Id}"); } diff --git a/Moonlight/Shared/Views/Index.razor b/Moonlight/Shared/Views/Index.razor index 2fba00bd..708034c8 100644 --- a/Moonlight/Shared/Views/Index.razor +++ b/Moonlight/Shared/Views/Index.razor @@ -7,11 +7,13 @@ @using Moonlight.App.Repositories @using Moonlight.App.Repositories.Domains @using Markdig +@using Moonlight.App.Services.Sessions @inject ServerRepository ServerRepository @inject Repository WebSpaceRepository @inject DomainRepository DomainRepository @inject NewsEntryRepository NewsEntryRepository +@inject IdentityService IdentityService @if (NewsEntries.Any()) @@ -243,9 +245,6 @@ @code { - [CascadingParameter] - public User User { get; set; } - private int ServerCount = 0; private int DomainCount = 0; private int WebSpaceCount = 0; @@ -258,17 +257,17 @@ ServerCount = ServerRepository .Get() .Include(x => x.Owner) - .Count(x => x.Owner.Id == User.Id); + .Count(x => x.Owner.Id == IdentityService.User.Id); DomainCount = DomainRepository .Get() .Include(x => x.Owner) - .Count(x => x.Owner.Id == User.Id); + .Count(x => x.Owner.Id == IdentityService.User.Id); WebSpaceCount = WebSpaceRepository .Get() .Include(x => x.Owner) - .Count(x => x.Owner.Id == User.Id); + .Count(x => x.Owner.Id == IdentityService.User.Id); NewsEntries = NewsEntryRepository.Get().ToList(); diff --git a/Moonlight/Shared/Views/Profile/Discord.razor b/Moonlight/Shared/Views/Profile/Discord.razor index c6236d00..54862cc7 100644 --- a/Moonlight/Shared/Views/Profile/Discord.razor +++ b/Moonlight/Shared/Views/Profile/Discord.razor @@ -4,13 +4,15 @@ @using Moonlight.App.Database.Entities @using Moonlight.App.Repositories @using Moonlight.App.Services +@using Moonlight.App.Services.Sessions @inject Repository UserRepository @inject SmartTranslateService SmartTranslateService +@inject IdentityService IdentityService -@if (User.DiscordId == 0) +@if (IdentityService.User.DiscordId == 0) {
@@ -64,13 +66,12 @@ else @code { - [CascadingParameter] - public User User { get; set; } + private async Task RemoveLink() { - User.DiscordId = 0; - UserRepository.Update(User); + IdentityService.User.DiscordId = 0; + UserRepository.Update(IdentityService.User); await InvokeAsync(StateHasChanged); } diff --git a/Moonlight/Shared/Views/Profile/Index.razor b/Moonlight/Shared/Views/Profile/Index.razor index 3c389990..215b5463 100644 --- a/Moonlight/Shared/Views/Profile/Index.razor +++ b/Moonlight/Shared/Views/Profile/Index.razor @@ -7,15 +7,17 @@ @using Mappy.Net @using Moonlight.App.Exceptions @using Moonlight.App.Helpers +@using Moonlight.App.Services.Sessions -@inject UserRepository UserRepository +@inject Repository UserRepository +@inject IdentityService IdentityService
-
+
@@ -78,13 +80,9 @@ { private UserDataModel Model = new(); - [CascadingParameter] - public User CurrentUser { get; set; } - - private Task Load(LazyLoader loader) { - Model = Mapper.Map(CurrentUser); + Model = Mapper.Map(IdentityService.User); return Task.CompletedTask; } @@ -98,15 +96,15 @@ .Get() .FirstOrDefault(x => x.Email == Model.Email); - if (userWithThatEmail != null && CurrentUser.Id != userWithThatEmail.Id) + if (userWithThatEmail != null && IdentityService.User.Id != userWithThatEmail.Id) { Logger.Warn($"A user tried to lock another user out by changing the email. Email: {Model.Email}", "security"); throw new DisplayException("A user with that email does already exist"); } - CurrentUser = Mapper.Map(CurrentUser, Model); + var user = Mapper.Map(IdentityService.User, Model); - UserRepository.Update(CurrentUser); + UserRepository.Update(user); return Task.CompletedTask; } diff --git a/Moonlight/Shared/Views/Profile/Security.razor b/Moonlight/Shared/Views/Profile/Security.razor index 9282259a..2791c608 100644 --- a/Moonlight/Shared/Views/Profile/Security.razor +++ b/Moonlight/Shared/Views/Profile/Security.razor @@ -8,6 +8,7 @@ @using Mappy.Net @using Moonlight.App.Models.Forms @using Moonlight.App.Repositories +@using Moonlight.App.Services.Sessions @inject TotpService TotpService @inject UserService UserService @@ -15,6 +16,7 @@ @inject ModalService ModalService @inject Repository UserRepository @inject SmartTranslateService SmartTranslateService +@inject IdentityService IdentityService @@ -31,7 +33,7 @@ 2fa adds another layer of security to your account. You have to enter a 6 digit code in order to login.

- @if (User.TotpEnabled) + @if (IdentityService.User.TotpEnabled) {