Files
backerup-website/frontend/app/admin/page.tsx
T
Anders Böttcher 0d58fafe4e feat: implement user authentication and admin management
- Add user management API endpoints for listing and creating users.
- Implement login and logout functionality with rate limiting.
- Create UI components for login form, logout button, and animated elements.
- Add session management with JWT and secure cookie handling.
- Seed initial admin user if no users exist.
- Introduce utility functions for password hashing and user authentication.
- Set up proxy middleware for route protection and security headers.
- Create a JSON file for user data storage.
- Add links configuration for external resources.
2026-05-12 14:58:11 +02:00

43 lines
1.7 KiB
TypeScript

import type { Metadata } from 'next'
import { redirect } from 'next/navigation'
import { getSession } from '@/lib/session'
import { listUsers } from '@/lib/users'
import UsersClient from './UsersClient'
export const metadata: Metadata = {
title: 'Admin — Backerup',
}
export default async function AdminPage() {
const session = await getSession()
if (!session || session.role !== 'admin') {
redirect('/')
}
const users = await listUsers()
return (
<div className="mx-auto max-w-2xl px-4 py-12">
{/* Header */}
<div className="mb-10">
<div className="flex items-center gap-3 mb-2">
<div
className="w-9 h-9 rounded-xl flex items-center justify-center"
style={{ background: 'linear-gradient(135deg, #a78bfa, #7c3aed)' }}
>
<svg viewBox="0 0 20 20" fill="currentColor" className="w-4 h-4 text-white" aria-hidden="true">
<path d="M10 9a3 3 0 100-6 3 3 0 000 6zM6 8a2 2 0 11-4 0 2 2 0 014 0zM1.49 15.326a.78.78 0 01-.358-.442 3 3 0 014.308-3.516 6.484 6.484 0 00-1.905 3.959c-.023.222-.014.442.025.654a4.97 4.97 0 01-2.07-.655zM16.44 15.98a4.97 4.97 0 002.07-.654.78.78 0 00.357-.442 3 3 0 00-4.308-3.517 6.484 6.484 0 011.907 3.96 2.32 2.32 0 01-.026.654zM18 8a2 2 0 11-4 0 2 2 0 014 0zM5.304 16.19a.844.844 0 01-.277-.71 5 5 0 019.947 0 .843.843 0 01-.277.71A6.975 6.975 0 0110 18a6.974 6.974 0 01-4.696-1.81z" />
</svg>
</div>
<div>
<h1 className="text-xl font-bold text-white">User Management</h1>
<p className="text-sm text-slate-400">Manage accounts and permissions</p>
</div>
</div>
</div>
<UsersClient initialUsers={users} currentUserId={session.userId} />
</div>
)
}