expressjs -> nextjs
This commit is contained in:
66
nextjs/app/manage/admin/page.js
Normal file
66
nextjs/app/manage/admin/page.js
Normal file
@@ -0,0 +1,66 @@
|
||||
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>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user