42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import { type LoaderFunctionArgs, data, redirect } from 'react-router';
|
|
import { commitSession, getSession } from '~/utils/sessions.server';
|
|
import { send } from '~/utils/res';
|
|
import { beginAuthFlow, getRedirectUri } from '~/utils/oidc';
|
|
import { loadContext } from '~/utils/config/headplane';
|
|
|
|
export async function loader({ request }: LoaderFunctionArgs) {
|
|
const session = await getSession(request.headers.get('Cookie'));
|
|
if (session.has('hsApiKey')) {
|
|
return redirect('/machines')
|
|
}
|
|
|
|
// This is a hold-over from the old code
|
|
// TODO: Rewrite checkOIDC in the context loader
|
|
const { oidc } = await loadContext();
|
|
if (!oidc) {
|
|
throw new Error('An invalid OIDC configuration was provided');
|
|
}
|
|
|
|
const oidcConfig = {
|
|
issuer: oidc.issuer,
|
|
clientId: oidc.client,
|
|
clientSecret: oidc.secret,
|
|
redirectUri: oidc.redirectUri,
|
|
tokenEndpointAuthMethod: oidc.method,
|
|
}
|
|
|
|
const redirectUri = oidcConfig.redirectUri ?? getRedirectUri(request);
|
|
const data = await beginAuthFlow(oidcConfig, redirectUri);
|
|
session.set('oidc_code_verif', data.codeVerifier);
|
|
session.set('oidc_state', data.state);
|
|
session.set('oidc_nonce', data.nonce);
|
|
session.set('oidc_redirect_uri', redirectUri)
|
|
|
|
return redirect(data.url, {
|
|
status: 302,
|
|
headers: {
|
|
'Set-Cookie': await commitSession(session),
|
|
},
|
|
});
|
|
}
|