45 lines
1.6 KiB
TypeScript
45 lines
1.6 KiB
TypeScript
"use server";
|
|
|
|
import { revalidatePath } from "next/cache";
|
|
import { redirect } from "next/navigation";
|
|
|
|
import { routing } from "@/i18n/routing";
|
|
import { getAdminAppPath, toInternalAdminPath } from "@/lib/admin-routing";
|
|
import { clearAdminSessionCookie, isAdminAuthenticated } from "@/lib/admin-auth";
|
|
import { getLocalizedPath } from "@/lib/locale";
|
|
import { getSiteSettings, setMaintenanceMode } from "@/lib/app-config";
|
|
|
|
async function ensureAdmin() {
|
|
if (!(await isAdminAuthenticated())) {
|
|
await clearAdminSessionCookie();
|
|
redirect(getAdminAppPath("/"));
|
|
}
|
|
}
|
|
|
|
export async function updateMaintenanceModeAction(formData: FormData) {
|
|
await ensureAdmin();
|
|
|
|
const nextValue = formData.get("enabled") === "true";
|
|
const redirectPath = String(formData.get("redirectPath") ?? getAdminAppPath("/"));
|
|
const redirectUrl = new URL(redirectPath, "http://localhost");
|
|
redirectUrl.searchParams.set(
|
|
"success",
|
|
nextValue ? "Wartungsmodus aktiviert." : "Wartungsmodus deaktiviert.",
|
|
);
|
|
|
|
await setMaintenanceMode(nextValue);
|
|
revalidatePath("/", "layout");
|
|
revalidatePath("/coming-soon");
|
|
revalidatePath(toInternalAdminPath("/"));
|
|
revalidatePath(toInternalAdminPath("/maintenance"));
|
|
revalidatePath(toInternalAdminPath(redirectUrl.pathname));
|
|
const siteSettings = await getSiteSettings();
|
|
|
|
for (const appLocale of routing.locales) {
|
|
revalidatePath(getLocalizedPath(appLocale, "/", siteSettings.defaultLocale), "layout");
|
|
revalidatePath(getLocalizedPath(appLocale, "/coming-soon", siteSettings.defaultLocale));
|
|
}
|
|
|
|
redirect(`${redirectUrl.pathname}${redirectUrl.search}`);
|
|
}
|