import Link from "next/link"; import { headers } from "next/headers"; import { redirect } from "next/navigation"; import { ContentCard, EmptyState } from "@/components/public/ui"; import { issueSsoTicket } from "@/lib/auth/sso-ticket"; import { buildNitroClientUrl } from "@/lib/services/clients"; import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; import { siteSettings } from "@/lib/services/site-settings"; export const dynamic = "force-dynamic"; export default async function ClientPage() { const session = await auth(); if (!session?.user?.id) redirect("/login"); const userId = Number(session.user.id); const hotelName = (await siteSettings.get("hotel_name", "Atom")) ?? "Atom"; const hdrs = await headers(); const ip = hdrs.get("x-forwarded-for")?.split(",")[0]?.trim() ?? hdrs.get("x-real-ip") ?? "0.0.0.0"; // Faithful to AtomCMS's NitroController: issue (and persist) the SSO ticket on // the launcher render, then hand it to the Nitro client at {nitro_path}. const ticket = await issueSsoTicket(prisma, userId, hotelName, ip); const src = await buildNitroClientUrl(ticket); return (
Use Flash client } /> {src ? (