@page "/admin/login" @rendermode InteractiveServer @inject AdminAuthService AuthService @inject NavigationManager NavManager
@if (isFirstRun) {

First-Time Setup

Create your primary administrator account to secure the RADIUS Controller panel

} else {

Administrator Login

Access RADIUS server policies, session limits, and data accounting

}
@if (isCheckingFirstRun) {

Checking system configuration...

} else if (isFirstRun) {
Welcome! No admin user exists in the database. Please create your administrator credentials below.
@if (!string.IsNullOrEmpty(errorMessage)) {
@errorMessage
}
} else {
@if (!string.IsNullOrEmpty(errorMessage)) {
@errorMessage
}
}
@code { private string username = string.Empty; private string password = string.Empty; private string confirmPassword = string.Empty; private bool isCheckingFirstRun = true; private bool isFirstRun = false; private bool isSubmitting = false; private string errorMessage = string.Empty; protected override async Task OnInitializedAsync() { await AuthService.InitializeAsync(); if (AuthService.IsAuthenticated) { NavManager.NavigateTo("/admin"); return; } try { isFirstRun = !await AuthService.HasAnyAdminAsync(); } catch { isFirstRun = false; } finally { isCheckingFirstRun = false; } } private async Task HandleFirstTimeSetup() { isSubmitting = true; errorMessage = string.Empty; if (string.IsNullOrWhiteSpace(username) || username.Trim().Length < 3) { errorMessage = "Username must be at least 3 characters long."; isSubmitting = false; return; } if (string.IsNullOrWhiteSpace(password) || password.Length < 6) { errorMessage = "Password must be at least 6 characters long."; isSubmitting = false; return; } if (password != confirmPassword) { errorMessage = "Password and Confirm Password do not match."; isSubmitting = false; return; } bool success = await AuthService.RegisterInitialAdminAsync(username, password); if (success) { NavManager.NavigateTo("/admin"); } else { errorMessage = "Failed to create administrator account. An admin user may already exist."; } isSubmitting = false; } private async Task HandleLogin() { isSubmitting = true; errorMessage = string.Empty; bool success = await AuthService.LoginAsync(username, password); if (success) { NavManager.NavigateTo("/admin"); } else { errorMessage = "Invalid admin username or password."; } isSubmitting = false; } }