dummyidp/src/app/apps/[id]/page.tsx
Ulysse Carion 7f173bcabf
Move to Next.js (#2)
* tmp

* reset

* begin conversion to nextjs

* more appeasing of stuff

* about to add shadcn

* tmp commit

* switch to new-york style

* fix nextjs build error

* tmp

* start hooking up users to login page

* e2e flows

* preview stuff

* shuffle around where assertion is displayed

* start copy stuff

* tooltip for lack of sp settings

* update footer

* add wordmark, navbar to index

* add scim stuff

* fix build error

* title, copy updates

* more copy, adjusting

* fix tailwindui weirdness

* fix copy

* instant setup

* hard-code insecure key

* footer copy, docslink urls

* subtitles, copy updates
2024-10-03 09:57:43 -07:00

175 lines
6.2 KiB
TypeScript

import { getApp } from "@/app/actions";
import { PlusGridItem, PlusGridRow } from "@/components/PlusGrid";
import Link from "next/link";
import Navbar from "@/components/Navbar";
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from "@/components/ui/breadcrumb";
import { DocsLink } from "@/components/DocsLink";
import { Label } from "@/components/ui/label";
import { appIdpEntityId, appIdpRedirectUrl } from "@/app/app";
import { useMemo } from "react";
import { ArrowDownToLineIcon } from "lucide-react";
import { SPSettingsForm } from "@/app/apps/[id]/SPSettingsForm";
import { ap } from "@upstash/redis/zmscore-uDFFyCiZ";
import { GradientBackground } from "@/components/GradientBackground";
import { UsersSettingsForm } from "@/app/apps/[id]/UsersSettingsForm";
import { Button } from "@/components/ui/button";
import { SimulateLoginButton } from "@/app/apps/[id]/SimulateLoginButton";
import { SCIMSettingsForm } from "@/app/apps/[id]/SCIMSettingsForm";
import { Metadata } from "next";
import { INSECURE_PUBLIC_CERTIFICATE } from "@/lib/insecure-cert";
export const metadata: Metadata = {
title: "App",
};
export default async function Page({ params }: { params: { id: string } }) {
const app = await getApp(params.id);
if (app === undefined) {
return <h1>not found</h1>;
}
const certificateDownloadURL = `data:text/plain,${INSECURE_PUBLIC_CERTIFICATE}`;
return (
<div className="overflow-hidden">
<GradientBackground />
<Navbar />
<div className="px-8">
<div className="mx-auto max-w-7xl">
<Breadcrumb className="mt-8">
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="/">Home</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>Apps</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href={`/apps/${app.id}`}>
{app.id}
</BreadcrumbLink>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
<div className="flex items-center justify-between">
<div>
<h1 className="mt-2 text-3xl font-semibold">{app.id}</h1>
<p className="mt-1 text-muted-foreground">
A DummyIDP app lets you emulate your customer's identity
provider.
<DocsLink to="https://ssoready.com/docs/dummyidp#creating-a-dummyidp-app" />
</p>
</div>
<SimulateLoginButton app={app} />
</div>
<div className="mt-8 grid grid-cols-6 gap-4">
<Card className="col-span-3">
<CardHeader>
<CardTitle>
SAML IDP Settings
<DocsLink to="https://ssoready.com/docs/dummyidp#idp-settings" />
</CardTitle>
<CardDescription>
These are SAML settings that identity providers (DummyIDP, in
this case) assign. Normally, they'll come from your customer's
Okta/Google/Microsoft/etc instead. You need to put these into
your application's SAML settings.
</CardDescription>
</CardHeader>
<CardContent>
<div className="grid gap-y-2">
<div>
<Label>IDP Entity ID</Label>
<div className="text-sm text-muted-foreground">
{appIdpEntityId(app)}
</div>
</div>
<div>
<Label>IDP Redirect URL</Label>
<div className="text-sm text-muted-foreground">
{appIdpRedirectUrl(app)}
</div>
</div>
<div>
<Label>IDP Certificate</Label>
<a
href={certificateDownloadURL}
download="DummyIDP Certificate.crt"
className="block text-sm text-blue-600"
>
<span>Download (.crt)</span>
</a>
</div>
</div>
</CardContent>
</Card>
<Card className="col-span-3">
<CardHeader>
<CardTitle>
SAML SP Settings
<DocsLink to="https://ssoready.com/docs/dummyidp#sp-settings" />
</CardTitle>
<CardDescription>
These are SAML settings assigned by the service provider
("SP"), i.e. your application. You need to copy those settings
from your application into here.
</CardDescription>
</CardHeader>
<CardContent>
<SPSettingsForm app={app} />
</CardContent>
</Card>
<Card className="col-span-2">
<CardHeader>
<CardTitle>
SCIM Settings
<DocsLink to="https://ssoready.com/docs/dummyidp#scim-settings" />
</CardTitle>
<CardDescription>
Settings for directory syncing over SCIM. Optional.
</CardDescription>
</CardHeader>
<CardContent>
<SCIMSettingsForm app={app} />
</CardContent>
</Card>
<Card className="col-span-4">
<CardHeader>
<CardTitle>
Users
<DocsLink to="https://ssoready.com/docs/dummyidp#users-settings" />
</CardTitle>
<CardDescription>
You can simulate SAML logins from this list of users. They'll
be synced over SCIM if you've configured it.
</CardDescription>
</CardHeader>
<CardContent>
<UsersSettingsForm app={app} />
</CardContent>
</Card>
</div>
</div>
</div>
</div>
);
}