Files
Guestlist/Guestlist/Components/Pages/Admin.razor.cs
T
2026-05-11 21:52:12 +02:00

183 lines
4.8 KiB
C#

using Microsoft.AspNetCore.Components;
namespace Guestlist.Components.Pages;
public partial class Admin
{
[Inject]
protected SetupStatusService SetupStatusService { get; set; } = default!;
[Inject]
protected UserService UserService { get; set; } = default!;
[Inject]
protected AccessCodeService AccessCodeService { get; set; } = default!;
protected string Message { get; set; } = "";
protected string NewGuestAccessCode { get; set; } = "";
protected string AccessCodeMessage { get; set; } = "";
protected string RecoveryMessage { get; set; } = "";
protected string MaintainerUsername { get; set; } = "";
protected string MaintainerDisplayName { get; set; } = "";
protected string MaintainerPassword { get; set; } = "";
protected string MaintainerMessage { get; set; } = "";
protected List<UserDocument>? Maintainers { get; set; }
protected override async Task OnInitializedAsync()
{
try
{
Maintainers = await UserService.GetMaintainersAsync();
}
catch
{
MaintainerMessage = "Maintainers could not be loaded.";
Maintainers = [];
}
}
protected async Task ResetSetup()
{
Message = "";
try
{
await UserService.BackupAndClearUsersAsync("Setup reset from admin panel");
await SetupStatusService.ResetSetupAsync();
}
catch
{
Message = "Setup could not be reset.";
return;
}
Message = "Setup has been reset. Existing users were moved to backup.";
}
protected async Task UpdateGuestAccessCode()
{
AccessCodeMessage = "";
if (string.IsNullOrWhiteSpace(NewGuestAccessCode))
{
AccessCodeMessage = "Provide a guest access code.";
return;
}
try
{
await AccessCodeService.SetGuestAccessCodeAsync(NewGuestAccessCode);
}
catch (InvalidOperationException exception)
{
AccessCodeMessage = exception.Message;
return;
}
catch
{
AccessCodeMessage = "Guest access code could not be updated.";
return;
}
NewGuestAccessCode = "";
AccessCodeMessage = "Guest access code has been updated.";
}
protected async Task CompleteSetupRecovery()
{
RecoveryMessage = "";
try
{
if (!await AccessCodeService.HasGuestAccessCodeAsync())
{
RecoveryMessage = "Set a guest access code before completing recovery.";
return;
}
await SetupStatusService.MarkSetupCompleteAsync();
}
catch
{
RecoveryMessage = "Setup recovery could not be completed.";
return;
}
RecoveryMessage = "Setup recovery has been completed.";
}
protected async Task CreateMaintainer()
{
MaintainerMessage = "";
if (string.IsNullOrWhiteSpace(MaintainerUsername))
{
MaintainerMessage = "Provide a username.";
return;
}
if (string.IsNullOrWhiteSpace(MaintainerPassword))
{
MaintainerMessage = "Provide a password.";
return;
}
if (MaintainerPassword.Length < 8)
{
MaintainerMessage = "Password must be at least 8 characters long.";
return;
}
var displayName = string.IsNullOrWhiteSpace(MaintainerDisplayName)
? MaintainerUsername
: MaintainerDisplayName;
try
{
await UserService.CreateMaintainerAsync(displayName, MaintainerUsername, MaintainerPassword);
}
catch (InvalidOperationException exception)
{
MaintainerMessage = exception.Message;
return;
}
catch
{
MaintainerMessage = "Maintainer could not be created.";
return;
}
MaintainerUsername = "";
MaintainerDisplayName = "";
MaintainerPassword = "";
MaintainerMessage = "Maintainer has been created.";
Maintainers = await UserService.GetMaintainersAsync();
}
protected async Task DeleteMaintainer(string? id)
{
MaintainerMessage = "";
if (string.IsNullOrWhiteSpace(id))
{
MaintainerMessage = "Maintainer is missing an id.";
return;
}
try
{
await UserService.DeleteMaintainerAsync(id);
}
catch
{
MaintainerMessage = "Maintainer could not be deleted.";
return;
}
MaintainerMessage = "Maintainer has been deleted.";
Maintainers = await UserService.GetMaintainersAsync();
}
}