Andrew commited on
Commit
cf90a38
·
1 Parent(s): 087512c

feat(auth): add shared OAuth redirect and CSRF state helpers

Browse files
Files changed (1) hide show
  1. src/lib/server/authHelpers.ts +24 -0
src/lib/server/authHelpers.ts ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { base } from "$app/paths";
2
+ import { config } from "$lib/server/config";
3
+ import { generateCsrfToken } from "./auth";
4
+ import type { RequestEvent } from "@sveltejs/kit";
5
+
6
+ // Build a redirect URI for OAuth callbacks
7
+ export function buildRedirectURI(request: RequestEvent["request"], url: URL): string {
8
+ const referer = request.headers.get("referer");
9
+ let redirectURI = `${(referer ? new URL(referer) : url).origin}${base}/login/callback`;
10
+
11
+ if (url.searchParams.has("callback")) {
12
+ const callback = url.searchParams.get("callback") || redirectURI;
13
+ if (config.ALTERNATIVE_REDIRECT_URLS.includes(callback)) {
14
+ redirectURI = callback;
15
+ }
16
+ }
17
+
18
+ return redirectURI;
19
+ }
20
+
21
+ // Generate a CSRF token wrapped in base64 for OAuth state parameter
22
+ export async function createOAuthState(sessionId: string, redirectURI: string): Promise<string> {
23
+ return await generateCsrfToken(sessionId, redirectURI);
24
+ }