From ff12f5f7d5693a8ff36fc5c2727b1cba30382fa9 Mon Sep 17 00:00:00 2001 From: jvyden Date: Fri, 10 Jun 2022 04:16:04 -0400 Subject: [PATCH] Fix build errors, add commands for setting various permissions levels --- .../Commands/MakeUserAdminCommand.cs | 43 ---------- .../SetUserPermissionLevelCommands.cs | 85 +++++++++++++++++++ ProjectLighthouse/StartupTasks.cs | 2 +- 3 files changed, 86 insertions(+), 44 deletions(-) delete mode 100644 ProjectLighthouse/Administration/Maintenance/Commands/MakeUserAdminCommand.cs create mode 100644 ProjectLighthouse/Administration/Maintenance/SetUserPermissionLevelCommands.cs diff --git a/ProjectLighthouse/Administration/Maintenance/Commands/MakeUserAdminCommand.cs b/ProjectLighthouse/Administration/Maintenance/Commands/MakeUserAdminCommand.cs deleted file mode 100644 index 8e78dff5..00000000 --- a/ProjectLighthouse/Administration/Maintenance/Commands/MakeUserAdminCommand.cs +++ /dev/null @@ -1,43 +0,0 @@ -#nullable enable -using System; -using System.Threading.Tasks; -using LBPUnion.ProjectLighthouse.Logging; -using LBPUnion.ProjectLighthouse.PlayerData.Profiles; -using Microsoft.EntityFrameworkCore; - -namespace LBPUnion.ProjectLighthouse.Administration.Maintenance.Commands; - -public class MakeUserAdminCommand : ICommand -{ - private readonly Database database = new(); - - public string Name() => "Make User Admin"; - public string[] Aliases() - => new[] - { - "makeAdmin", - }; - public string Arguments() => ""; - public int RequiredArgs() => 1; - - public async Task Run(string[] args, Logger logger) - { - User? user = await this.database.Users.FirstOrDefaultAsync(u => u.Username == args[0]); - if (user == null) - try - { - user = await this.database.Users.FirstOrDefaultAsync(u => u.UserId == Convert.ToInt32(args[0])); - if (user == null) throw new Exception(); - } - catch - { - logger.LogError($"Could not find user by parameter '{args[0]}'", LogArea.Command); - return; - } - - user.PermissionLevel = PermissionLevel.Administrator; - await this.database.SaveChangesAsync(); - - logger.LogSuccess($"The user {user.Username} (id: {user.UserId}) is now an admin.", LogArea.Command); - } -} \ No newline at end of file diff --git a/ProjectLighthouse/Administration/Maintenance/SetUserPermissionLevelCommands.cs b/ProjectLighthouse/Administration/Maintenance/SetUserPermissionLevelCommands.cs new file mode 100644 index 00000000..cd39223c --- /dev/null +++ b/ProjectLighthouse/Administration/Maintenance/SetUserPermissionLevelCommands.cs @@ -0,0 +1,85 @@ +#nullable enable +using System; +using System.Threading.Tasks; +using LBPUnion.ProjectLighthouse.Logging; +using LBPUnion.ProjectLighthouse.PlayerData.Profiles; +using Microsoft.EntityFrameworkCore; + +namespace LBPUnion.ProjectLighthouse.Administration.Maintenance; + +#region Base Type +public abstract class SetUserPermissionLevelCommand : ICommand +{ + private readonly PermissionLevel permissionLevel; + + protected SetUserPermissionLevelCommand(PermissionLevel permissionLevel) + { + this.permissionLevel = permissionLevel; + } + + private readonly Database database = new(); + public abstract string Name(); + public abstract string[] Aliases(); + + public string Arguments() => ""; + public int RequiredArgs() => 1; + + public async Task Run(string[] args, Logger logger) + { + User? user = await this.database.Users.FirstOrDefaultAsync(u => u.Username == args[0]); + if (user == null) + try + { + user = await this.database.Users.FirstOrDefaultAsync(u => u.UserId == Convert.ToInt32(args[0])); + if (user == null) throw new Exception(); + } + catch + { + logger.LogError($"Could not find user by parameter '{args[0]}'", + LogArea.Command); + return; + } + + user.PermissionLevel = this.permissionLevel; + await this.database.SaveChangesAsync(); + + logger.LogSuccess($"The user {user.Username} (id: {user.UserId}) is now {this.permissionLevel}.", + LogArea.Command); + } +} +#endregion + +#region Implementations + +public class SetUserAdminCommand : SetUserPermissionLevelCommand +{ + public SetUserAdminCommand() : base(PermissionLevel.Administrator) + {} + public override string Name() => "Make User Admin"; + public override string[] Aliases() => new []{"make-admin",}; +} + +public class SetUserModeratorCommand : SetUserPermissionLevelCommand +{ + public SetUserModeratorCommand() : base(PermissionLevel.Moderator) + {} + public override string Name() => "Make User Moderator"; + public override string[] Aliases() => new[] { "make-moderator", }; +} + +public class BanUserCommand : SetUserPermissionLevelCommand +{ + public BanUserCommand() : base(PermissionLevel.Banned) + {} + public override string Name() => "Ban User"; + public override string[] Aliases() => new[] { "ban", }; +} + +public class DemoteUserCommand : SetUserPermissionLevelCommand +{ + public DemoteUserCommand() : base(PermissionLevel.Default) + {} + public override string Name() => "Demote User"; + public override string[] Aliases() => new[] { "demote", }; +} +#endregion \ No newline at end of file diff --git a/ProjectLighthouse/StartupTasks.cs b/ProjectLighthouse/StartupTasks.cs index 95497e90..48fd85a8 100644 --- a/ProjectLighthouse/StartupTasks.cs +++ b/ProjectLighthouse/StartupTasks.cs @@ -103,7 +103,7 @@ public static class StartupTasks string password = CryptoHelper.BCryptHash(CryptoHelper.Sha256Hash(passwordClear)); User admin = database.CreateUser("admin", password).Result; - admin.IsAdmin = true; + admin.PermissionLevel = PermissionLevel.Administrator; admin.PasswordResetRequired = true; database.SaveChanges();