@using TrafagSalesExporter.Services @inject IAdminAccessService AdminAccess @inject ISnackbar Snackbar @inject IUiTextService UiText @T("Adminbereich ist geschützt. Bitte anmelden.", "Admin area is protected. Please sign in.") @if (!AdminAccess.IsConfigured) { @T("Admin-Zugang ist noch nicht konfiguriert.", "Admin access is not configured yet.") } @T("Admin entsperren", "Unlock admin") @T("Passwort speichern", "Save password") @code { private string? _username; private string? _password; private string? _changeUsername; private string? _currentPassword; private string? _newPassword; private string? _newPasswordRepeat; private void Unlock() { if (!AdminAccess.TryUnlock(_username ?? string.Empty, _password ?? string.Empty)) { Snackbar.Add(T("Admin-Anmeldung fehlgeschlagen.", "Admin sign-in failed."), Severity.Error); return; } _password = string.Empty; OnUnlocked.InvokeAsync(); } private void ChangePassword() { if (string.IsNullOrWhiteSpace(_newPassword) || _newPassword.Length < 8) { Snackbar.Add(T("Das neue Passwort muss mindestens 8 Zeichen lang sein.", "The new password must be at least 8 characters long."), Severity.Warning); return; } if (_newPassword != _newPasswordRepeat) { Snackbar.Add(T("Die neuen Passwörter stimmen nicht überein.", "The new passwords do not match."), Severity.Warning); return; } if (!AdminAccess.TryChangePassword(_changeUsername ?? string.Empty, _currentPassword ?? string.Empty, _newPassword)) { Snackbar.Add(T("Passwort konnte nicht geändert werden. Name oder aktuelles Passwort prüfen.", "Password could not be changed. Check the name or current password."), Severity.Error); return; } _currentPassword = string.Empty; _newPassword = string.Empty; _newPasswordRepeat = string.Empty; Snackbar.Add(T("Passwort wurde geändert.", "Password has been changed."), Severity.Success); } private string T(string german, string english) => UiText.Text(german, english); [Parameter] public EventCallback OnUnlocked { get; set; } }