import Link from "next/link"; import { getTranslations } from "next-intl/server"; import { saveVpn } from "@/actions/admin-vpn"; import { StatusCard } from "@/components/admin/dashboard"; import { siteSettings } from "@/lib/services/site-settings"; import { redirect } from "next/navigation"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; export const dynamic = "force-dynamic"; export const metadata = { title: "VPN" }; const PROVIDERS: { value: string; label: string }[] = [ { value: "none", label: "None (disabled)" }, { value: "proxycheck", label: "proxycheck.io" }, { value: "ipqualityscore", label: "IPQualityScore" }, ]; export default async function AdminVpn({ searchParams, }: { searchParams: Promise<{ saved?: string }>; }) { const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.SETTINGS_VIEW, session.user.rank)) { redirect("/admin"); } const sp = await searchParams; const t = await getTranslations("pages.admin.vpn"); // Read current values (graceful fallbacks via siteSettings / DEFAULTS). const enabled = await siteSettings.getBool("vpn_block_enabled", false); const provider = (await siteSettings.get("vpn_provider", "none")) ?? "none"; const apiKey = (await siteSettings.get("vpn_api_key", "")) ?? ""; const blockMessage = (await siteSettings.get( "vpn_block_message", "Registrations from VPNs or proxies are not allowed.", )) ?? ""; return (
{sp.saved ? (

{t("settingsSaved")}

) : null}

{t("settings")}

{t("providerHint")}

{t("apiKeyHint")}

{t("blockMessageHint")}

{t("rawIpTitle")}

{t.rich("rawIpDescription", { ipLink: (chunks) => {chunks}, })}

{t("openIpManagement")}
); }