121a6b5844
Generate short-lived SSO tokens in the site iframe route and add an exchange API to let child apps bootstrap their PocketBase session.
33 lines
892 B
TypeScript
33 lines
892 B
TypeScript
import { sites, type SiteSlug } from '$lib/sites';
|
|
import { error } from '@sveltejs/kit';
|
|
import * as ssoStore from '$lib/sso-store';
|
|
import { randomUUID } from 'crypto';
|
|
|
|
export function load({ params, locals }) {
|
|
const slug = params.site?.toLowerCase() as SiteSlug | undefined;
|
|
const site = slug && slug in sites ? sites[slug as SiteSlug] : null;
|
|
|
|
if (!site) {
|
|
throw error(404, `Unknown site: ${params.site}`);
|
|
}
|
|
|
|
let ssoToken: string | undefined;
|
|
if (locals.user && locals.pb?.authStore?.token) {
|
|
try {
|
|
const token = locals.pb.authStore.token;
|
|
const model = locals.pb.authStore.record as Record<string, unknown> | null;
|
|
ssoToken = randomUUID();
|
|
ssoStore.set(ssoToken, { token, model });
|
|
} catch {
|
|
// no sso if export fails
|
|
}
|
|
}
|
|
|
|
return {
|
|
slug: slug as SiteSlug,
|
|
url: site.url,
|
|
title: site.title,
|
|
ssoToken
|
|
};
|
|
}
|