1 import express from 'express'
2 import { HttpStatusCode } from '@shared/models'
3 import { CONFIG } from '../../../initializers/config'
4 import { sendVerifyRegistrationEmail, sendVerifyUserEmail } from '../../../lib/user'
5 import { asyncMiddleware, buildRateLimiter } from '../../../middlewares'
7 registrationVerifyEmailValidator,
8 usersAskSendVerifyEmailValidator,
9 usersVerifyEmailValidator
10 } from '../../../middlewares/validators'
12 const askSendEmailLimiter = buildRateLimiter({
13 windowMs: CONFIG.RATES_LIMIT.ASK_SEND_EMAIL.WINDOW_MS,
14 max: CONFIG.RATES_LIMIT.ASK_SEND_EMAIL.MAX
17 const emailVerificationRouter = express.Router()
19 emailVerificationRouter.post([ '/ask-send-verify-email', '/registrations/ask-send-verify-email' ],
21 asyncMiddleware(usersAskSendVerifyEmailValidator),
22 asyncMiddleware(reSendVerifyUserEmail)
25 emailVerificationRouter.post('/:id/verify-email',
26 asyncMiddleware(usersVerifyEmailValidator),
27 asyncMiddleware(verifyUserEmail)
30 emailVerificationRouter.post('/registrations/:registrationId/verify-email',
31 asyncMiddleware(registrationVerifyEmailValidator),
32 asyncMiddleware(verifyRegistrationEmail)
35 // ---------------------------------------------------------------------------
38 emailVerificationRouter
41 async function reSendVerifyUserEmail (req: express.Request, res: express.Response) {
42 const user = res.locals.user
43 const registration = res.locals.userRegistration
45 if (user) await sendVerifyUserEmail(user)
46 else if (registration) await sendVerifyRegistrationEmail(registration)
48 return res.status(HttpStatusCode.NO_CONTENT_204).end()
51 async function verifyUserEmail (req: express.Request, res: express.Response) {
52 const user = res.locals.user
53 user.emailVerified = true
55 if (req.body.isPendingEmail === true) {
56 user.email = user.pendingEmail
57 user.pendingEmail = null
62 return res.status(HttpStatusCode.NO_CONTENT_204).end()
65 async function verifyRegistrationEmail (req: express.Request, res: express.Response) {
66 const registration = res.locals.userRegistration
67 registration.emailVerified = true
69 await registration.save()
71 return res.status(HttpStatusCode.NO_CONTENT_204).end()