LANCommander/LANCommander.Server/UI/Pages/FirstTimeSetup/Administrator.razor

117 lines
3.8 KiB
Text
Raw Permalink Normal View History

2024-10-12 18:36:00 -05:00
@page "/FirstTimeSetup/Administrator"
@layout FirstTimeSetupLayout
@inject DatabaseServiceFactory DatabaseServiceFactory
2024-10-12 18:36:00 -05:00
@inject NavigationManager NavigationManager
@inject IMessageService MessageService
@inject ILogger<Administrator> Logger
<PageTitle>Create Administrator User - First Time Setup</PageTitle>
2024-10-12 18:36:00 -05:00
<Form Model="@Model" Loading="Loading" OnFinish="CreateAdministratorUser" Layout="@FormLayout.Vertical">
<FormItem>
To get started, you will need to create an administrator user.
</FormItem>
<FormItem Label="Username">
<Input @bind-Value="@context.Username" />
</FormItem>
<FormItem Label="Password">
<InputPassword @bind-Value="@context.Password" />
</FormItem>
<FormItem Label="Confirm Password">
<InputPassword @bind-Value="@context.PasswordConfirm" />
</FormItem>
<FormItem>
<GridRow Justify="end" Style="margin-top: 16px;">
<GridCol>
<Button Type="@ButtonType.Primary" HtmlType="submit">
Create
</Button>
</GridCol>
</GridRow>
</FormItem>
</Form>
@code {
[CascadingParameter] FirstTimeSetupLayout Layout { get; set; }
2024-10-12 18:36:00 -05:00
FirstTimeSetupModel Model = new FirstTimeSetupModel();
bool Loading = false;
protected override async Task OnInitializedAsync()
{
await Layout.ChangeCurrentStep(FirstTimeSetupStep.Administrator);
}
async Task CreateAdministratorUser()
{
Loading = true;
StateHasChanged();
await Task.Yield();
try
{
using (var roleService = DatabaseServiceFactory.Create<RoleService>())
2024-10-12 18:36:00 -05:00
{
var role = await roleService.GetAsync(RoleService.AdministratorRoleName);
2024-10-12 18:36:00 -05:00
if (role == null)
await roleService.AddAsync(new Role
{
Name = RoleService.AdministratorRoleName
});
2024-10-12 18:36:00 -05:00
var administrators = await roleService.GetUsersAsync(RoleService.AdministratorRoleName);
2024-10-12 18:36:00 -05:00
if (administrators != null && administrators.Any())
NavigationManager.NavigateTo("/");
else
2024-10-12 18:36:00 -05:00
{
using (var userService = DatabaseServiceFactory.Create<UserService>())
{
var user = Activator.CreateInstance<User>();
user.Approved = true;
user.ApprovedOn = DateTime.UtcNow;
user.UserName = Model.Username;
var result = await userService.AddAsync(user);
2024-10-12 18:36:00 -05:00
if (result == null)
{
/*foreach (var error in result.Errors)
{
MessageService.Error(error.Description);
}*/
2024-10-12 18:36:00 -05:00
Loading = false;
StateHasChanged();
2024-10-12 18:36:00 -05:00
return;
}
else
{
await userService.AddToRolesAsync(user.UserName, new string[] { RoleService.AdministratorRoleName });
2024-10-23 22:28:01 -05:00
Logger?.LogInformation("Administrator created a new account with password.");
await MessageService.Success("Setup completed! Redirecting...", 3);
Loading = false;
NavigationManager.NavigateTo("/");
}
}
2024-10-12 18:36:00 -05:00
}
}
}
catch (Exception ex)
{
Logger?.LogError(ex, "Could not create administrator");
MessageService.Error($"Could not create administrator: {ex.Message}", 10);
}
Loading = false;
}
}