frontend/src/routes/oauth/+server.ts
2024-06-20 12:52:34 +02:00

86 lines
2.5 KiB
TypeScript

import { redirect } from '@sveltejs/kit';
export const config = {
runtime: 'nodejs20.x',
};
export const GET = async ({locals, url, cookies}) => {
//console.log(url.searchParams);
const redirectURL = `${url.origin}/oauth`;
//const expectedState = cookies.get('state');
//const expectedVerifier = cookies.get('verifier');
let newUser;
let expectedState = cookies?.get('state');
let expectedVerifier = cookies?.get('verifier');
let providerSelected = cookies?.get('provider');
const state = await url.searchParams.get('state');
const code = await url.searchParams.get('code');
//console.log('returned state',state)
//console.log('returned code',code)
//as a side effect this will generate a new code verifier, hence why we need to pass the verifier back in through the cookie
const authMethods = await locals.pb?.collection('users')?.listAuthMethods();
if (!authMethods?.authProviders) {
console.log('No Auth Providers');
redirect(301, '/register');
}
const targetItem = authMethods.authProviders.findIndex(item => item.name === providerSelected);
const provider = authMethods.authProviders[targetItem];
if (!provider) {
console.log('Provider Not Found');
redirect(301, '/register');
}
if (expectedState !== state) {
console.log('Returned State Does not Match Expected', expectedState, state);
redirect(301, '/register');
}
try {
//console.log(provider)
newUser = await locals.pb?.collection('users')
.authWithOAuth2Code(provider.name, code, expectedVerifier, redirectURL);
//oauthUsername = generateUsername(newUser['meta']['name'].split(' ').join('')).toLowerCase();
// Check if user was created or existed already
if(newUser?.meta?.isNew === true) {
await locals.pb?.collection('users').update(
newUser['record']['id'], {
'freeTrial' : true,
'tier': 'Pro', //Give new users a free trial for the Pro Subscription
});
}
} catch (err) {
console.log('Error logging in with OAuth2 user', err);
redirect(302, "/register");
}
if(cookies?.get('path')) {
redirect(301, cookies?.get('path'));
} else {
redirect(301,"/");
}
//Login user automatically
//const avatarUrl = newUser['meta']['avatarUrl'];
//console.log(avatarUrl);
};