]>
Commit | Line | Data |
---|---|---|
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' | |
6 | import { | |
7 | registrationVerifyEmailValidator, | |
8 | usersAskSendVerifyEmailValidator, | |
9 | usersVerifyEmailValidator | |
10 | } from '../../../middlewares/validators' | |
11 | ||
12 | const askSendEmailLimiter = buildRateLimiter({ | |
13 | windowMs: CONFIG.RATES_LIMIT.ASK_SEND_EMAIL.WINDOW_MS, | |
14 | max: CONFIG.RATES_LIMIT.ASK_SEND_EMAIL.MAX | |
15 | }) | |
16 | ||
17 | const emailVerificationRouter = express.Router() | |
18 | ||
19 | emailVerificationRouter.post([ '/ask-send-verify-email', '/registrations/ask-send-verify-email' ], | |
20 | askSendEmailLimiter, | |
21 | asyncMiddleware(usersAskSendVerifyEmailValidator), | |
22 | asyncMiddleware(reSendVerifyUserEmail) | |
23 | ) | |
24 | ||
25 | emailVerificationRouter.post('/:id/verify-email', | |
26 | asyncMiddleware(usersVerifyEmailValidator), | |
27 | asyncMiddleware(verifyUserEmail) | |
28 | ) | |
29 | ||
30 | emailVerificationRouter.post('/registrations/:registrationId/verify-email', | |
31 | asyncMiddleware(registrationVerifyEmailValidator), | |
32 | asyncMiddleware(verifyRegistrationEmail) | |
33 | ) | |
34 | ||
35 | // --------------------------------------------------------------------------- | |
36 | ||
37 | export { | |
38 | emailVerificationRouter | |
39 | } | |
40 | ||
41 | async function reSendVerifyUserEmail (req: express.Request, res: express.Response) { | |
42 | const user = res.locals.user | |
43 | const registration = res.locals.userRegistration | |
44 | ||
45 | if (user) await sendVerifyUserEmail(user) | |
46 | else if (registration) await sendVerifyRegistrationEmail(registration) | |
47 | ||
48 | return res.status(HttpStatusCode.NO_CONTENT_204).end() | |
49 | } | |
50 | ||
51 | async function verifyUserEmail (req: express.Request, res: express.Response) { | |
52 | const user = res.locals.user | |
53 | user.emailVerified = true | |
54 | ||
55 | if (req.body.isPendingEmail === true) { | |
56 | user.email = user.pendingEmail | |
57 | user.pendingEmail = null | |
58 | } | |
59 | ||
60 | await user.save() | |
61 | ||
62 | return res.status(HttpStatusCode.NO_CONTENT_204).end() | |
63 | } | |
64 | ||
65 | async function verifyRegistrationEmail (req: express.Request, res: express.Response) { | |
66 | const registration = res.locals.userRegistration | |
67 | registration.emailVerified = true | |
68 | ||
69 | await registration.save() | |
70 | ||
71 | return res.status(HttpStatusCode.NO_CONTENT_204).end() | |
72 | } |