]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/api/users/email-verification.ts
Set actor preferred name case insensitive
[github/Chocobozzz/PeerTube.git] / server / controllers / api / users / email-verification.ts
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 }