File size: 901 Bytes
cf90a38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import { base } from "$app/paths";
import { config } from "$lib/server/config";
import { generateCsrfToken } from "./auth";
import type { RequestEvent } from "@sveltejs/kit";

// Build a redirect URI for OAuth callbacks
export function buildRedirectURI(request: RequestEvent["request"], url: URL): string {
	const referer = request.headers.get("referer");
	let redirectURI = `${(referer ? new URL(referer) : url).origin}${base}/login/callback`;

	if (url.searchParams.has("callback")) {
		const callback = url.searchParams.get("callback") || redirectURI;
		if (config.ALTERNATIVE_REDIRECT_URLS.includes(callback)) {
			redirectURI = callback;
		}
	}

	return redirectURI;
}

// Generate a CSRF token wrapped in base64 for OAuth state parameter
export async function createOAuthState(sessionId: string, redirectURI: string): Promise<string> {
	return await generateCsrfToken(sessionId, redirectURI);
}