67 lines
2.1 KiB
JavaScript
67 lines
2.1 KiB
JavaScript
import { redirect } from 'next/navigation';
|
|
|
|
import { adminLoginAction } from '@/src/lib/actions.js';
|
|
import { adminHash } from '@/src/lib/config.js';
|
|
import { runCleanupIfNeeded } from '@/src/lib/db.js';
|
|
import { readSearchParam } from '@/src/lib/format.js';
|
|
import { ensureCsrfToken, getAuthenticatedUser } from '@/src/lib/security.js';
|
|
|
|
import { StatusMessage } from '../_components/status-message.js';
|
|
|
|
export const dynamic = 'force-dynamic';
|
|
|
|
export default async function AdminLoginPage({ searchParams }) {
|
|
await runCleanupIfNeeded();
|
|
|
|
if (!adminHash) {
|
|
return (
|
|
<main className="page-shell narrow">
|
|
<section className="panel centered">
|
|
<h1>Adminzugang nicht konfiguriert</h1>
|
|
<p className="muted">Setze MANAGEMENT_ADMIN_HASH in der Umgebungskonfiguration.</p>
|
|
<a className="btn secondary" href="/manage/login">
|
|
Zurück zur Anmeldung
|
|
</a>
|
|
</section>
|
|
</main>
|
|
);
|
|
}
|
|
|
|
const user = await getAuthenticatedUser();
|
|
if (user?.admin) {
|
|
redirect('/manage/admin/dashboard');
|
|
}
|
|
|
|
const csrfToken = await ensureCsrfToken();
|
|
const resolvedSearchParams = await searchParams;
|
|
const error = readSearchParam(resolvedSearchParams, 'error');
|
|
const success = readSearchParam(resolvedSearchParams, 'success');
|
|
|
|
return (
|
|
<main className="page-shell narrow">
|
|
<header className="page-header">
|
|
<div className="header-main">
|
|
<h1>Adminbereich</h1>
|
|
<p className="muted">Melde dich als Administrator an.</p>
|
|
</div>
|
|
</header>
|
|
|
|
<section className="panel">
|
|
<StatusMessage error={error} success={success} />
|
|
<form className="form-grid" action={adminLoginAction}>
|
|
<input type="hidden" name="csrfToken" value={csrfToken} />
|
|
|
|
<label className="field">
|
|
Admin-Passwort
|
|
<input className="input" name="password" type="password" autoComplete="current-password" required />
|
|
</label>
|
|
|
|
<button className="btn" type="submit">
|
|
Anmelden
|
|
</button>
|
|
</form>
|
|
</section>
|
|
</main>
|
|
);
|
|
}
|