feat: Security CSRF Fix, Logout optimierung, Footer Anpassung, Rechtstexteanpassung
Docker Image bauen und veroeffentlichen / build-and-push (push) Failing after 1m33s

This commit is contained in:
Nick Szaunig committed 2026-09-03 13:51:50 +02:00
1 parent 0753a3bc8a
commit 4d3100e9ba
28 files changed
+802 -121

No files matched your search

+11 -5
View File
@@ -2,7 +2,7 @@
import { redirect } from "next/navigation";
import { prisma } from "@/lib/prisma";
import { createSession, getCurrentCustomer, verifyPassword, destroySession } from "@/lib/auth";
import { getCurrentCustomer, verifyPassword, destroySession } from "@/lib/auth";
import { rateLimit, getClientIp } from "@/lib/rate-limit";
import { sendMail } from "@/lib/mail";
import { securityAlertEmail } from "@/lib/email-templates";
@@ -50,16 +50,22 @@ export async function deleteOwnAccountAction(formData: FormData): Promise<void>
redirect("/konto?message=" + encodeURIComponent("Dein Konto wurde endgültig gelöscht."));
}
/** Widerruft alle bestehenden Sessions (auch andere Geraete) und meldet nur das aktuelle Tab neu an. */
/**
* Widerruft alle bestehenden Sessions — auch das aktuell genutzte Geraet.
* Bewusst KEIN Re-Login des aktuellen Tabs mehr (fruehere Variante): "alle
* Geraete abmelden" muss auch die eigene, gerade aktive Sitzung beenden,
* sonst waere ein gestohlenes/kompromittiertes aktuelles Session-Cookie von
* dieser Aktion gar nicht betroffen.
*/
export async function logoutAllDevicesAction(): Promise<void> {
const customer = await getCurrentCustomer();
if (!customer) fail("/konto", "Bitte melde dich an.");
const updated = await prisma.customer.update({
await prisma.customer.update({
where: { id: customer.id },
data: { sessionVersion: { increment: 1 } },
});
await createSession(updated.id, updated.role, updated.sessionVersion);
redirect("/konto?message=" + encodeURIComponent("Alle anderen Geräte wurden abgemeldet."));
await destroySession();
redirect("/konto?message=" + encodeURIComponent("Alle Geräte wurden abgemeldet. Bitte melde dich erneut an."));
}