import ResourceProvider from "@app/providers/ResourceProvider"; import { internal } from "@app/lib/api"; import { GetResourceAuthInfoResponse, GetResourceResponse } from "@server/routers/resource"; import { AxiosResponse } from "axios"; import { redirect } from "next/navigation"; import { authCookieHeader } from "@app/lib/api/cookies"; import { HorizontalTabs } from "@app/components/HorizontalTabs"; import SettingsSectionTitle from "@app/components/SettingsSectionTitle"; import { GetOrgResponse } from "@server/routers/org"; import OrgProvider from "@app/providers/OrgProvider"; import { cache } from "react"; import ResourceInfoBox from "@app/components/ResourceInfoBox"; import { getTranslations } from "next-intl/server"; import type { Metadata } from "next"; export const metadata: Metadata = { title: "Public Resource" }; export const dynamic = "force-dynamic"; interface ResourceLayoutProps { children: React.ReactNode; params: Promise<{ niceId: string; orgId: string }>; } export default async function ResourceLayout(props: ResourceLayoutProps) { const params = await props.params; const t = await getTranslations(); const { children } = props; let authInfo = null; let resource = null; try { const res = await internal.get>( `/org/${params.orgId}/resource/${params.niceId}`, await authCookieHeader() ); resource = res.data.data; } catch { redirect(`/${params.orgId}/settings/resources`); } if (!resource) { redirect(`/${params.orgId}/settings/resources`); } try { const res = await internal.get< AxiosResponse >(`/resource/${resource.resourceGuid}/auth`, await authCookieHeader()); authInfo = res.data.data; } catch { redirect(`/${params.orgId}/settings/resources`); } if (!authInfo) { redirect(`/${params.orgId}/settings/resources`); } let org = null; try { const getOrg = cache(async () => internal.get>( `/org/${params.orgId}`, await authCookieHeader() ) ); const res = await getOrg(); org = res.data.data; } catch { redirect(`/${params.orgId}/settings/resources`); } if (!org) { redirect(`/${params.orgId}/settings/resources`); } const navItems = [ { title: t("general"), href: `/{orgId}/settings/resources/proxy/{niceId}/general` }, { title: t(`${resource.browserAccessType}Settings`), href: `/{orgId}/settings/resources/proxy/{niceId}/${resource.browserAccessType}` } ]; if (resource.http) { navItems.push({ title: t("authentication"), href: `/{orgId}/settings/resources/proxy/{niceId}/authentication` }); navItems.push({ title: t("rules"), href: `/{orgId}/settings/resources/proxy/{niceId}/rules` }); } return ( <>
{children}
); }