@using LANCommander.Server.Settings @using Microsoft.Extensions.Options @inject UserService UserService @inject IOptions Settings @inject IMessageService MessageService @inject ILogger Logger
@if (Settings.Value.Server.Authentication.RequireApproval) { }
@code { [Parameter] public bool Visible { get; set; } [Parameter] public EventCallback VisibleChanged { get; set; } [Parameter] public EventCallback OnCreated { get; set; } NewUserModel Model { get; set; } = new(); bool Submitting = false; async Task Submit() { if (string.IsNullOrWhiteSpace(Model.UserName)) { MessageService.Error("A username is required!"); return; } if (Model.Password != Model.PasswordConfirm) { MessageService.Error("Passwords do not match!"); return; } if (await UserService.ExistsAsync(u => u.UserName == Model.UserName)) { MessageService.Error("A user with that username already exists!"); return; } Submitting = true; try { var approved = !Settings.Value.Server.Authentication.RequireApproval || Model.Approved; var user = new User { UserName = Model.UserName, Approved = approved, ApprovedOn = approved ? DateTime.UtcNow : null, }; var checkResult = await UserService.CheckRegister(user, Model.Password); if (!checkResult.Succeeded) { foreach (var error in checkResult.Errors) MessageService.Error(error.Description); return; } user = await UserService.AddAsync(user); await UserService.ChangePassword(user.UserName, Model.Password); MessageService.Success($"Created {user.UserName}!"); await Close(); await OnCreated.InvokeAsync(); } catch (Exception ex) { MessageService.Error("Could not create user!"); Logger.LogError(ex, "Could not create user!"); } finally { Submitting = false; } } async Task Cancel() { await Close(); } async Task Close() { Model = new(); Visible = false; await VisibleChanged.InvokeAsync(false); } public class NewUserModel { public string UserName { get; set; } public string Password { get; set; } public string PasswordConfirm { get; set; } public bool Approved { get; set; } = true; } }