33 lines
863 B
TypeScript
33 lines
863 B
TypeScript
import type { RequestHandler } from './$types';
|
|
import { generateCodeVerifier, generateState } from 'arctic';
|
|
import { google } from '$lib/server/oauth';
|
|
|
|
export const GET: RequestHandler = ({ url, cookies }) => {
|
|
const inviteToken = url.searchParams.get('invite');
|
|
|
|
const state = generateState();
|
|
const codeVerifier = generateCodeVerifier();
|
|
const scopes = ['openid', 'profile', 'email'];
|
|
const authUrl = google.createAuthorizationURL(state + inviteToken, codeVerifier, scopes);
|
|
|
|
cookies.set('google_oauth_state', state, {
|
|
path: '/',
|
|
httpOnly: true,
|
|
maxAge: 60 * 10, // 10 minutes
|
|
sameSite: 'lax',
|
|
});
|
|
cookies.set('google_code_verifier', codeVerifier, {
|
|
path: '/',
|
|
httpOnly: true,
|
|
maxAge: 60 * 10, // 10 minutes
|
|
sameSite: 'lax',
|
|
});
|
|
|
|
return new Response(null, {
|
|
status: 302,
|
|
headers: {
|
|
Location: authUrl.toString(),
|
|
},
|
|
});
|
|
};
|