mirror of
https://github.com/tale/headplane.git
synced 2026-07-26 07:48:14 +00:00
38 lines
958 B
TypeScript
38 lines
958 B
TypeScript
import { data, redirect } from "react-router";
|
|
|
|
import { createOidcStateCookie } from "~/utils/oidc-state";
|
|
|
|
import type { Route } from "./+types/oidc-start";
|
|
|
|
export async function loader({ request, context }: Route.LoaderArgs) {
|
|
try {
|
|
await context.auth.require(request);
|
|
return redirect("/");
|
|
} catch {}
|
|
|
|
const service = context.oidc?.service;
|
|
if (!service) {
|
|
throw data("OIDC is not enabled or misconfigured", { status: 501 });
|
|
}
|
|
|
|
const result = await service.startFlow();
|
|
if (!result.ok) {
|
|
return redirect(`/login?s=${result.error.code}`);
|
|
}
|
|
|
|
const { url, flowState } = result.value;
|
|
const cookie = createOidcStateCookie(context.config);
|
|
|
|
return redirect(url, {
|
|
status: 302,
|
|
headers: {
|
|
"Set-Cookie": await cookie.serialize({
|
|
state: flowState.state,
|
|
nonce: flowState.nonce,
|
|
verifier: flowState.codeVerifier,
|
|
redirect_uri: flowState.redirectUri,
|
|
}),
|
|
},
|
|
});
|
|
}
|