add dashboard

This commit is contained in:
Litlyx
2024-06-01 15:27:40 +02:00
parent 75f0787c3b
commit df4faf366f
201 changed files with 91267 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
import { OAuth2Client } from 'google-auth-library';
import { createUserJwt } from '~/server/AuthManager';
import { UserModel } from '@schema/UserSchema';
import { sendWelcomeEmail } from '@services/EmailService';
const { GOOGLE_AUTH_CLIENT_SECRET, GOOGLE_AUTH_CLIENT_ID } = useRuntimeConfig()
const client = new OAuth2Client({
clientId: GOOGLE_AUTH_CLIENT_ID,
clientSecret: GOOGLE_AUTH_CLIENT_SECRET
});
export default defineEventHandler(async event => {
const body = await readBody(event)
const origin = event.headers.get('origin');
const tokenResponse = await client.getToken({
code: body.code,
redirect_uri: origin || ''
});
const tokens = tokenResponse.tokens;
const ticket = await client.verifyIdToken({
idToken: tokens.id_token || '',
audience: GOOGLE_AUTH_CLIENT_ID,
});
const payload = ticket.getPayload();
if (!payload) return { error: true, access_token: '' };
const user = await UserModel.findOne({ email: payload.email });
if (user) return { error: false, access_token: createUserJwt({ email: user.email, name: user.name }) }
const newUser = new UserModel({
email: payload.email,
given_name: payload.given_name,
name: payload.name,
locale: payload.locale,
picture: payload.picture,
created_at: Date.now()
});
const savedUser = await newUser.save();
setImmediate(() => {
if (payload.email) sendWelcomeEmail(payload.email);
});
return { error: false, access_token: createUserJwt({ email: savedUser.email, name: savedUser.name }) }
});