You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
import express from 'express'
|
|||
import { HttpStatusCode } from '@peertube/peertube-models'
|
|||
import { CONFIG } from '../../../initializers/config.js'
|
|||
import { sendVerifyRegistrationEmail, sendVerifyUserEmail } from '../../../lib/user.js'
|
|||
import { asyncMiddleware, buildRateLimiter } from '../../../middlewares/index.js'
|
|||
import {
|
|||
registrationVerifyEmailValidator,
|
|||
usersAskSendVerifyEmailValidator,
|
|||
usersVerifyEmailValidator
|
|||
} from '../../../middlewares/validators/index.js'
|
|||
|
|||
const askSendEmailLimiter = buildRateLimiter({
|
|||
windowMs: CONFIG.RATES_LIMIT.ASK_SEND_EMAIL.WINDOW_MS,
|
|||
max: CONFIG.RATES_LIMIT.ASK_SEND_EMAIL.MAX
|
|||
})
|
|||
|
|||
const emailVerificationRouter = express.Router()
|
|||
|
|||
emailVerificationRouter.post([ '/ask-send-verify-email', '/registrations/ask-send-verify-email' ],
|
|||
askSendEmailLimiter,
|
|||
asyncMiddleware(usersAskSendVerifyEmailValidator),
|
|||
asyncMiddleware(reSendVerifyUserEmail)
|
|||
)
|
|||
|
|||
emailVerificationRouter.post('/:id/verify-email',
|
|||
asyncMiddleware(usersVerifyEmailValidator),
|
|||
asyncMiddleware(verifyUserEmail)
|
|||
)
|
|||
|
|||
emailVerificationRouter.post('/registrations/:registrationId/verify-email',
|
|||
asyncMiddleware(registrationVerifyEmailValidator),
|
|||
asyncMiddleware(verifyRegistrationEmail)
|
|||
)
|
|||
|
|||
// ---------------------------------------------------------------------------
|
|||
|
|||
export {
|
|||
emailVerificationRouter
|
|||
}
|
|||
|
|||
async function reSendVerifyUserEmail (req: express.Request, res: express.Response) {
|
|||
const user = res.locals.user
|
|||
const registration = res.locals.userRegistration
|
|||
|
|||
if (user) await sendVerifyUserEmail(user)
|
|||
else if (registration) await sendVerifyRegistrationEmail(registration)
|
|||
|
|||
return res.status(HttpStatusCode.NO_CONTENT_204).end()
|
|||
}
|
|||
|
|||
async function verifyUserEmail (req: express.Request, res: express.Response) {
|
|||
const user = res.locals.user
|
|||
user.emailVerified = true
|
|||
|
|||
if (req.body.isPendingEmail === true) {
|
|||
user.email = user.pendingEmail
|
|||
user.pendingEmail = null
|
|||
}
|
|||
|
|||
await user.save()
|
|||
|
|||
return res.status(HttpStatusCode.NO_CONTENT_204).end()
|
|||
}
|
|||
|
|||
async function verifyRegistrationEmail (req: express.Request, res: express.Response) {
|
|||
const registration = res.locals.userRegistration
|
|||
registration.emailVerified = true
|
|||
|
|||
await registration.save()
|
|||
|
|||
return res.status(HttpStatusCode.NO_CONTENT_204).end()
|
|||
}
|