mirror of
https://github.com/CannedNet/CannedNet.git
synced 2026-10-25 23:18:54 -07:00
111 lines
3.9 KiB
Plaintext
111 lines
3.9 KiB
Plaintext
@page "/setup"
|
|
@rendermode InteractiveServer
|
|
@using CannedNet.Admin.Services
|
|
@inject AdminAuthService AuthService
|
|
@inject NavigationManager Navigation
|
|
|
|
<PageTitle>First-Time Setup</PageTitle>
|
|
|
|
<div class="row justify-content-center mt-5">
|
|
<div class="col-md-6">
|
|
<div class="card">
|
|
<div class="card-header"><h4 class="mb-0">First-Time Setup</h4></div>
|
|
<div class="card-body">
|
|
@if (completed)
|
|
{
|
|
<div class="alert alert-success">
|
|
<h5>Owner account created!</h5>
|
|
<p>You can now <a href="/login">log in</a> with your new admin account.</p>
|
|
</div>
|
|
}
|
|
else if (AuthService.HasAnyUser())
|
|
{
|
|
<div class="alert alert-info">
|
|
Admin accounts already exist. <a href="/login">Go to login</a>.
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
<p class="text-muted">Create the initial owner account. This account will have full access and can create additional admin accounts.</p>
|
|
<form>
|
|
<div class="mb-3">
|
|
<label class="form-label">Username</label>
|
|
<input type="text" class="form-control" @bind="username" required />
|
|
</div>
|
|
<div class="mb-3">
|
|
<label class="form-label">Password</label>
|
|
<input type="password" class="form-control" @bind="password" required minlength="6" />
|
|
</div>
|
|
<div class="mb-3">
|
|
<label class="form-label">Confirm Password</label>
|
|
<input type="password" class="form-control" @bind="confirmPassword" required />
|
|
</div>
|
|
<button type="submit" class="btn btn-primary w-100" @onclick="CreateOwner" disabled="@creating">
|
|
@(creating ? "Creating..." : "Create Owner Account")
|
|
</button>
|
|
@if (!string.IsNullOrEmpty(message))
|
|
{
|
|
<div class="alert mt-3 @(message.Contains("Error") ? "alert-danger" : "alert-success")">@message</div>
|
|
}
|
|
</form>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@code {
|
|
private string username = "";
|
|
private string password = "";
|
|
private string confirmPassword = "";
|
|
private bool creating;
|
|
private bool completed;
|
|
private string? message;
|
|
|
|
private async Task CreateOwner()
|
|
{
|
|
creating = true;
|
|
message = null;
|
|
|
|
try
|
|
{
|
|
if (string.IsNullOrWhiteSpace(username))
|
|
{
|
|
message = "Username is required.";
|
|
return;
|
|
}
|
|
if (string.IsNullOrWhiteSpace(password) || password.Length < 6)
|
|
{
|
|
message = "Password must be at least 6 characters.";
|
|
return;
|
|
}
|
|
if (password != confirmPassword)
|
|
{
|
|
message = "Passwords do not match.";
|
|
return;
|
|
}
|
|
if (AuthService.HasAnyUser())
|
|
{
|
|
message = "Admin accounts already exist.";
|
|
return;
|
|
}
|
|
if (AuthService.GetByUsername(username) != null)
|
|
{
|
|
message = "Username already taken.";
|
|
return;
|
|
}
|
|
|
|
AuthService.CreateUser(username, password, isOwner: true);
|
|
completed = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
message = $"Error: {ex.Message}";
|
|
}
|
|
finally
|
|
{
|
|
creating = false;
|
|
}
|
|
}
|
|
}
|