multimodalart's picture
Upload 121 files
f555806 verified
raw
history blame
1.25 kB
import { randomUUID } from 'crypto';
import { NextRequest, NextResponse } from 'next/server';
const HF_AUTHORIZE_URL = 'https://huggingface.co/oauth/authorize';
const STATE_COOKIE = 'hf_oauth_state';
export async function GET(request: NextRequest) {
const clientId = process.env.HF_OAUTH_CLIENT_ID || process.env.NEXT_PUBLIC_HF_OAUTH_CLIENT_ID;
if (!clientId) {
return NextResponse.json({ error: 'OAuth client ID not configured' }, { status: 500 });
}
const state = randomUUID();
const origin = request.nextUrl.origin;
const redirectUri = `${origin}/api/auth/hf/callback`;
const authorizeUrl = new URL(HF_AUTHORIZE_URL);
authorizeUrl.searchParams.set('response_type', 'code');
authorizeUrl.searchParams.set('client_id', clientId);
authorizeUrl.searchParams.set('redirect_uri', redirectUri);
authorizeUrl.searchParams.set('scope', 'openid profile read-repos');
authorizeUrl.searchParams.set('state', state);
const response = NextResponse.redirect(authorizeUrl.toString(), { status: 302 });
response.cookies.set({
name: STATE_COOKIE,
value: state,
httpOnly: true,
sameSite: 'lax',
secure: process.env.NODE_ENV === 'production',
maxAge: 60 * 5,
path: '/',
});
return response;
}