Product display name only — page titles, headers, email, browser notification, FastAPI app title. Repo, container_name, file paths, and infrastructure identifiers (truenas-burnin everywhere) stay put to avoid breaking deployment.
67 lines
2.6 KiB
HTML
67 lines
2.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<title>Sign in — NAS Burn-In</title>
|
|
<link rel="stylesheet" href="/static/app.css">
|
|
</head>
|
|
<body class="login-body">
|
|
|
|
<main class="login-card">
|
|
<div class="login-header">
|
|
<div class="login-title">NAS Burn-In</div>
|
|
<div class="login-sub">{% if needs_setup %}First-time setup{% else %}Sign in{% endif %}</div>
|
|
</div>
|
|
|
|
{% if error %}
|
|
<div class="login-error">{{ error }}</div>
|
|
{% endif %}
|
|
|
|
{% if needs_setup %}
|
|
<p class="login-blurb">
|
|
No users exist yet. Create the initial administrator account.
|
|
Username and password go straight into the burn-in DB — no email,
|
|
no recovery flow. Pick something memorable.
|
|
</p>
|
|
<form method="POST" action="/api/v1/auth/setup" class="login-form">
|
|
<label class="login-label" for="username">Username</label>
|
|
<input class="login-input" type="text" id="username" name="username"
|
|
autocomplete="username" required minlength="2" maxlength="64"
|
|
autofocus>
|
|
|
|
<label class="login-label" for="full_name">Full name <span class="login-optional">(optional)</span></label>
|
|
<input class="login-input" type="text" id="full_name" name="full_name"
|
|
autocomplete="name" maxlength="128">
|
|
|
|
<label class="login-label" for="password">Password</label>
|
|
<input class="login-input" type="password" id="password" name="password"
|
|
autocomplete="new-password" required minlength="8" maxlength="128">
|
|
|
|
<button class="login-submit" type="submit">Create account & sign in</button>
|
|
</form>
|
|
{% else %}
|
|
<form method="POST" action="/login" class="login-form">
|
|
<input type="hidden" name="next" value="{{ next }}">
|
|
|
|
<label class="login-label" for="username">Username</label>
|
|
<input class="login-input" type="text" id="username" name="username"
|
|
autocomplete="username" required maxlength="64" autofocus>
|
|
|
|
<label class="login-label" for="password">Password</label>
|
|
<input class="login-input" type="password" id="password" name="password"
|
|
autocomplete="current-password" required maxlength="128">
|
|
|
|
<button class="login-submit" type="submit">Sign in</button>
|
|
</form>
|
|
{% endif %}
|
|
|
|
<div class="login-footer">
|
|
Authentication is local to this dashboard. Forgot your password?
|
|
Reset it via the container DB:<br>
|
|
<code class="login-code">docker exec truenas-burnin python -m app.auth_cli reset <user></code>
|
|
</div>
|
|
</main>
|
|
|
|
</body>
|
|
</html>
|