diff --git a/ProjectLighthouse/Maintenance/Commands/WipeTokensForUserCommand.cs b/ProjectLighthouse/Maintenance/Commands/WipeTokensForUserCommand.cs new file mode 100644 index 00000000..4e42461a --- /dev/null +++ b/ProjectLighthouse/Maintenance/Commands/WipeTokensForUserCommand.cs @@ -0,0 +1,46 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using LBPUnion.ProjectLighthouse.Types; +using Microsoft.EntityFrameworkCore; + +namespace LBPUnion.ProjectLighthouse.Maintenance.Commands +{ + public class WipeTokensForUserCommand : ICommand + { + private readonly Database database = new(); + + public string Name() => "Wipe tokens for user"; + public string[] Aliases() + => new[] + { + "wipeTokens", "wipeToken", "deleteTokens", "deleteToken", "removeTokens", "removeToken", + }; + public string Arguments() => ""; + public int RequiredArgs() => 1; + public async Task Run(string[] args) + { + 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 + { + Console.WriteLine($"Could not find user by parameter '{args[0]}'"); + return; + } + } + + this.database.GameTokens.RemoveRange(this.database.GameTokens.Where(t => t.UserId == user.UserId)); + this.database.WebTokens.RemoveRange(this.database.WebTokens.Where(t => t.UserId == user.UserId)); + + await this.database.SaveChangesAsync(); + + Console.WriteLine($"Deleted all tokens for {user.Username} (id: {user.UserId})."); + } + } +} \ No newline at end of file diff --git a/ProjectLighthouse/Maintenance/MaintenanceJobs/DeleteAllTokensMaintenanceJob.cs b/ProjectLighthouse/Maintenance/MaintenanceJobs/DeleteAllTokensMaintenanceJob.cs new file mode 100644 index 00000000..ca269fec --- /dev/null +++ b/ProjectLighthouse/Maintenance/MaintenanceJobs/DeleteAllTokensMaintenanceJob.cs @@ -0,0 +1,22 @@ +using System; +using System.Threading.Tasks; + +namespace LBPUnion.ProjectLighthouse.Maintenance.MaintenanceJobs +{ + public class DeleteAllTokensMaintenanceJob : IMaintenanceJob + { + private readonly Database database = new(); + + public string Name() => "Delete ALL Tokens"; + public string Description() => "Deletes ALL game tokens and web tokens."; + public async Task Run() + { + this.database.GameTokens.RemoveRange(this.database.GameTokens); + this.database.WebTokens.RemoveRange(this.database.WebTokens); + + await this.database.SaveChangesAsync(); + + Console.WriteLine("Deleted ALL tokens."); + } + } +} \ No newline at end of file diff --git a/ProjectLighthouse/ProjectLighthouse.csproj b/ProjectLighthouse/ProjectLighthouse.csproj index 72508e66..a4e601cc 100644 --- a/ProjectLighthouse/ProjectLighthouse.csproj +++ b/ProjectLighthouse/ProjectLighthouse.csproj @@ -33,10 +33,6 @@ - - - -