86 lines
2.5 KiB
TypeScript
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);
|
|
|
|
|
|
}; |