#nullable enable using System.Threading.Tasks; using LBPUnion.ProjectLighthouse.Helpers; using LBPUnion.ProjectLighthouse.Logging; using LBPUnion.ProjectLighthouse.Types; using Microsoft.EntityFrameworkCore; namespace LBPUnion.ProjectLighthouse.Maintenance.Commands; public class CreateUserCommand : ICommand { private readonly Database _database = new(); public async Task Run(string[] args) { string onlineId = args[0]; string password = args[1]; password = CryptoHelper.Sha256Hash(password); User? user = await this._database.Users.FirstOrDefaultAsync(u => u.Username == onlineId); if (user == null) { user = await this._database.CreateUser(onlineId, CryptoHelper.BCryptHash(password)); Logger.LogSuccess($"Created user {user.UserId} with online ID (username) {user.Username} and the specified password.", LogArea.Login); user.PasswordResetRequired = true; Logger.LogInfo("This user will need to reset their password when they log in.", LogArea.Login); await this._database.SaveChangesAsync(); Logger.LogInfo("Database changes saved.", LogArea.Database); } else { Logger.LogError("A user with this username already exists.", LogArea.Login); } } public string Name() => "Create New User"; public string[] Aliases() => new[] { "useradd", "adduser", "newuser", "createUser", }; public string Arguments() => "<OnlineID> <Password>"; public int RequiredArgs() => 2; }