|
|
import { redirect, type RequestHandler } from '@sveltejs/kit'; |
|
|
import { randomBytes } from 'crypto'; |
|
|
|
|
|
export const GET: RequestHandler = async ({ url, cookies }) => { |
|
|
|
|
|
const state = randomBytes(32).toString('hex'); |
|
|
|
|
|
|
|
|
cookies.set('oauth_state', state, { |
|
|
path: '/', |
|
|
httpOnly: true, |
|
|
secure: process.env.NODE_ENV === 'production', |
|
|
sameSite: 'lax', |
|
|
maxAge: 60 * 10, |
|
|
}); |
|
|
|
|
|
|
|
|
const clientId = process.env.OAUTH_CLIENT_ID; |
|
|
const redirectUri = process.env.OAUTH_REDIRECT_URI || `${url.origin}/oauth/callback`; |
|
|
const scope = 'openid profile email'; |
|
|
|
|
|
if (!clientId) { |
|
|
throw new Error('OAUTH_CLIENT_ID environment variable is not set'); |
|
|
} |
|
|
|
|
|
const authUrl = new URL('https://huggingface.co/oauth/authorize'); |
|
|
authUrl.searchParams.set('client_id', clientId); |
|
|
authUrl.searchParams.set('redirect_uri', redirectUri); |
|
|
authUrl.searchParams.set('scope', scope); |
|
|
authUrl.searchParams.set('state', state); |
|
|
authUrl.searchParams.set('response_type', 'code'); |
|
|
|
|
|
|
|
|
throw redirect(303, authUrl.toString()); |
|
|
}; |
|
|
|