Nach einem Passwortwechsel fliegen alle anderen Geräte raus; ein gesperrtes Konto wird sofort abgemeldet. Die letzte Administration lässt sich nicht entmachten, und sich selbst kann niemand sperren. Das öffentliche Profil zeigt Zahlen und zuletzt Gesehenes — keine Notizen, keine Watchlist, keine E-Mail-Adresse. Was privat gemeint ist, bleibt privat. Es braucht die Freigabe des Nutzers und die des Betreibers.
51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
import type { Metadata } from "next";
|
|
import { requireUser } from "@/lib/auth";
|
|
import { getSettings } from "@/lib/settings";
|
|
import { prisma } from "@/lib/db";
|
|
import { PasswordForm, ProfileForm } from "@/components/settings/Forms";
|
|
import pkg from "../../../package.json";
|
|
|
|
export const metadata: Metadata = { title: "Einstellungen" };
|
|
|
|
export default async function SettingsPage() {
|
|
const session = await requireUser("/einstellungen");
|
|
const settings = await getSettings();
|
|
|
|
const user = await prisma.user.findUniqueOrThrow({
|
|
where: { id: session.id },
|
|
select: {
|
|
name: true,
|
|
email: true,
|
|
region: true,
|
|
publicProfile: true,
|
|
profileSlug: true,
|
|
notifyNewEpisode: true,
|
|
notifyRelease: true,
|
|
notifyAvailability: true,
|
|
passwordHash: true,
|
|
},
|
|
});
|
|
|
|
const { passwordHash, ...profile } = user;
|
|
|
|
return (
|
|
<div className="space-y-6">
|
|
<section className="fl-card p-5">
|
|
<h2 className="mb-4 text-lg font-semibold">Profil</h2>
|
|
<ProfileForm user={profile} publicProfilesEnabled={settings.publicProfilesEnabled} />
|
|
</section>
|
|
|
|
{passwordHash && (
|
|
<section className="fl-card p-5">
|
|
<h2 className="mb-4 text-lg font-semibold">Passwort</h2>
|
|
<PasswordForm />
|
|
</section>
|
|
)}
|
|
|
|
<p className="text-xs text-[var(--fl-faint)]">
|
|
Flimmer {pkg.version} · Instanz {settings.instanceName}
|
|
</p>
|
|
</div>
|
|
);
|
|
}
|