import type { Metadata } from "next"; import Link from "next/link"; import { Icon, type IconName } from "@/components/icons"; import { Notice } from "@/components/ui"; import { isAuthEnabled } from "@/lib/auth/actor"; import { requirePagePermission } from "@/lib/auth/guard"; import { getBranding } from "@/lib/branding"; import { getSettings } from "@/lib/settings"; import { prisma } from "@/lib/db"; export const metadata: Metadata = { title: "Verwaltung" }; export const dynamic = "force-dynamic"; function Tile({ href, icon, title, description, hint, }: { href: string; icon: IconName; title: string; description: string; hint: string; }) { return ( {title} {description} {hint} ); } export default async function AdminPage() { await requirePagePermission("instance:manage"); const [userCount, groupCount, codeCount, domainCount, branding, settings] = await Promise.all([ prisma.user.count(), prisma.group.count(), prisma.qrCode.count(), prisma.domain.count(), getBranding(), getSettings(), ]); const eigenes = [ branding.logoUploadId && "Logo", branding.faviconUploadId && "Favicon", ].filter(Boolean); const brandingHint = eigenes.length > 0 ? `${eigenes.join(" und ")} hinterlegt` : branding.appName; return (

Verwaltung

Benutzer, Gruppen und die verfügbaren QR-Typen.

{!isAuthEnabled() ? (
Die Anmeldung ist ausgeschaltet.{" "} Jeder, der die Anwendung erreicht, darf alles. Zum Einschalten AUTH_ENABLED=true in der .env setzen und docker compose up -d ausführen. Beim nächsten Aufruf legst du den ersten Administrator an. Benutzer und Gruppen lassen sich schon jetzt vorbereiten.
) : null}
); }