mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-23 17:19:37 +02:00
Migrate inviteToProject to zod
GitOrigin-RevId: 9c755d0f922bbef44b6f95a06ec448eb8d2c1840
This commit is contained in:
@@ -11,6 +11,7 @@ import EditorRealTimeController from '../Editor/EditorRealTimeController.js'
|
||||
import AnalyticsManager from '../Analytics/AnalyticsManager.js'
|
||||
import SessionManager from '../Authentication/SessionManager.js'
|
||||
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
|
||||
import { z, zz, validateReq } from '../../infrastructure/Validation.js'
|
||||
import { expressify } from '@overleaf/promise-utils'
|
||||
import ProjectAuditLogHandler from '../Project/ProjectAuditLogHandler.mjs'
|
||||
import Errors from '../Errors/Errors.js'
|
||||
@@ -80,9 +81,24 @@ async function _checkRateLimit(userId) {
|
||||
return true
|
||||
}
|
||||
|
||||
const inviteToProjectSchema = z.object({
|
||||
params: z.object({
|
||||
Project_id: zz.objectId(),
|
||||
}),
|
||||
body: z.object({
|
||||
email: z.string(),
|
||||
privileges: z.enum([
|
||||
PrivilegeLevels.READ_ONLY,
|
||||
PrivilegeLevels.READ_AND_WRITE,
|
||||
PrivilegeLevels.REVIEW,
|
||||
]),
|
||||
}),
|
||||
})
|
||||
|
||||
async function inviteToProject(req, res) {
|
||||
const projectId = req.params.Project_id
|
||||
let { email, privileges } = req.body
|
||||
const { params, body } = validateReq(req, inviteToProjectSchema)
|
||||
const projectId = params.Project_id
|
||||
let { email, privileges } = body
|
||||
const sendingUser = SessionManager.getSessionUser(req.session)
|
||||
const sendingUserId = sendingUser._id
|
||||
req.logger.addFields({ email, sendingUserId })
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
import CollaboratorsController from './CollaboratorsController.mjs'
|
||||
import AuthenticationController from '../Authentication/AuthenticationController.js'
|
||||
import AuthorizationMiddleware from '../Authorization/AuthorizationMiddleware.mjs'
|
||||
import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
|
||||
import CollaboratorsInviteController from './CollaboratorsInviteController.mjs'
|
||||
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
|
||||
import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.js'
|
||||
import CaptchaMiddleware from '../Captcha/CaptchaMiddleware.mjs'
|
||||
import AnalyticsRegistrationSourceMiddleware from '../Analytics/AnalyticsRegistrationSourceMiddleware.js'
|
||||
import { Joi, validate } from '../../infrastructure/Validation.js'
|
||||
|
||||
const rateLimiters = {
|
||||
inviteToProjectByProjectId: new RateLimiter(
|
||||
@@ -80,18 +78,6 @@ export default {
|
||||
}),
|
||||
CaptchaMiddleware.validateCaptcha('invite'),
|
||||
AuthenticationController.requireLogin(),
|
||||
validate({
|
||||
body: Joi.object({
|
||||
email: Joi.string().required(),
|
||||
privileges: Joi.string()
|
||||
.valid(
|
||||
PrivilegeLevels.READ_ONLY,
|
||||
PrivilegeLevels.READ_AND_WRITE,
|
||||
PrivilegeLevels.REVIEW
|
||||
)
|
||||
.required(),
|
||||
}),
|
||||
}),
|
||||
AuthorizationMiddleware.ensureUserCanAdminProject,
|
||||
CollaboratorsInviteController.inviteToProject
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user