import dbConnect from 'configs/dbConnect' import sendMail from 'configs/sendMail' import User from 'models/User' import withSession from 'hocs/withSession' import mailData from 'helpers/email' import log from 'helpers/log' export default withSession(async (req, res) => { await dbConnect() switch (req.method) { case 'GET': try { const { email, language: l } = req.session.get('user') if (!email) { throw new Error('Something went wrong') } const key = await User.getVerificationKey(email) if (!key) { throw new Error('Something went wrong') } const response = await sendMail({to: email, ...mailData('v', l, key)}) if (!response?.accepted?.length) { throw new Error('Something went wrong') } log({ email, action: 'verify_mail' }) res.status(204).send() } catch (error) { log({ email: req.session.get('user'), action: 'verify_mail', error }) res.status(400).send() } break case 'POST': try { if (req.body.key) { const user = await User.verifyUser(req.body._id, req.body.key) req.session.set('user', user) await req.session.save() log({ email: user.email, action: 'verify' }) res.status(200).json(user) } } catch (error) { log({ email: req.session.get('user')?.email, action: 'verify', error, }) res.status(400).send() } break default: res.status(400).send() break } })