@page "/first-run-setup"
@inject IAuthService AuthService
@inject ISettingsService SettingsService
@inject NavigationManager Navigation
@inject ILocalizationService Loc
@rendermode InteractiveServer
Ersteinrichtung
Ersteinrichtung
Willkommen bei Author Buddy! Richten Sie Ihren Administrator-Account ein.
@if (!_setupComplete)
{
@if (!string.IsNullOrEmpty(_generatedPassword))
{
Sicherheitswarnung!
Dieses Passwort wird nur einmalig angezeigt. Speichern Sie es sofort sicher ab.
@_generatedPassword
Nach dem Klick auf "Admin erstellen" wird das Passwort nicht mehr angezeigt.
}
}
else
{
Admin-Account erfolgreich erstellt!
Sie werden zum Login weitergeleitet...
}
@if (!string.IsNullOrEmpty(_errorMessage))
{
@_errorMessage
}
@code {
private string _username = "admin";
private string? _generatedPassword;
private string _password = string.Empty;
private string _errorMessage = string.Empty;
private bool _isBusy;
private bool _setupComplete;
private bool _generateDisabled => _isBusy || string.IsNullOrWhiteSpace(_username);
private bool _createAdminDisabled => _isBusy || _password != _generatedPassword;
protected override async Task OnInitializedAsync()
{
var users = await SettingsService.GetUsersAsync();
if (users.Count > 0)
{
Navigation.NavigateTo("/login");
}
}
private void GeneratePassword()
{
using var rng = System.Security.Cryptography.RandomNumberGenerator.Create();
var bytes = new byte[12];
rng.GetBytes(bytes);
_generatedPassword = Convert.ToBase64String(bytes).TrimEnd('=').Replace('+', 'X').Replace('/', 'Y');
_password = string.Empty;
_errorMessage = string.Empty;
}
private async Task CreateAdmin()
{
if (string.IsNullOrWhiteSpace(_username) || string.IsNullOrWhiteSpace(_password))
{
_errorMessage = "Benutzername und Passwort dürfen nicht leer sein.";
return;
}
_isBusy = true;
_errorMessage = string.Empty;
try
{
var result = await AuthService.RegisterAsync(_username, _password);
if (result)
{
_generatedPassword = null;
_password = string.Empty;
_setupComplete = true;
StateHasChanged();
await Task.Delay(2000);
Navigation.NavigateTo("/login");
}
else
{
_errorMessage = "Benutzername bereits vergeben.";
}
}
catch (Exception ex)
{
_errorMessage = $"Fehler: {ex.Message}";
}
finally
{
_isBusy = false;
}
}
}