import { Metadata } from "next"; import { TopbarNav } from "./components/TopbarNav"; import { Cog, Combine, Link, Settings, Users, Waypoints } from "lucide-react"; import Header from "./components/Header"; import { verifySession } from "@app/lib/auth/verifySession"; import { redirect } from "next/navigation"; import { internal } from "@app/api"; import { AxiosResponse } from "axios"; import { GetOrgResponse, ListOrgsResponse } from "@server/routers/org"; import { authCookieHeader } from "@app/api/cookies"; import { cache } from "react"; import { GetOrgUserResponse } from "@server/routers/user"; export const dynamic = "force-dynamic"; export const metadata: Metadata = { title: `Settings - Pangolin`, description: "" }; const topNavItems = [ { title: "Sites", href: "/{orgId}/settings/sites", icon: }, { title: "Resources", href: "/{orgId}/settings/resources", icon: }, { title: "Users & Roles", href: "/{orgId}/settings/access", icon: }, { title: "Sharable Links", href: "/{orgId}/settings/links", icon: }, { title: "General", href: "/{orgId}/settings/general", icon: } ]; interface SettingsLayoutProps { children: React.ReactNode; params: Promise<{ orgId: string }>; } export default async function SettingsLayout(props: SettingsLayoutProps) { const params = await props.params; const { children } = props; const getUser = cache(verifySession); const user = await getUser(); if (!user) { redirect(`/?redirect=/${params.orgId}/`); } const cookie = await authCookieHeader(); try { const getOrgUser = cache(() => internal.get>( `/org/${params.orgId}/user/${user.userId}`, cookie ) ); const orgUser = await getOrgUser(); if (!orgUser.data.data.isAdmin && !orgUser.data.data.isOwner) { throw new Error("User is not an admin or owner"); } } catch { redirect(`/${params.orgId}`); } let orgs: ListOrgsResponse["orgs"] = []; try { const getOrgs = cache(() => internal.get>(`/orgs`, cookie) ); const res = await getOrgs(); if (res && res.data.data.orgs) { orgs = res.data.data.orgs; } } catch (e) { console.error("Error fetching orgs", e); } return ( <>
{children}
); }