|
@@ -11,6 +11,7 @@ import EditorRealTimeController from '../Editor/EditorRealTimeController.js'
|
|
|
import AnalyticsManager from '../Analytics/AnalyticsManager.js'
|
|
import AnalyticsManager from '../Analytics/AnalyticsManager.js'
|
|
|
import SessionManager from '../Authentication/SessionManager.js'
|
|
import SessionManager from '../Authentication/SessionManager.js'
|
|
|
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
|
|
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
|
|
|
|
|
+import { z, zz, validateReq } from '../../infrastructure/Validation.js'
|
|
|
import { expressify } from '@overleaf/promise-utils'
|
|
import { expressify } from '@overleaf/promise-utils'
|
|
|
import ProjectAuditLogHandler from '../Project/ProjectAuditLogHandler.mjs'
|
|
import ProjectAuditLogHandler from '../Project/ProjectAuditLogHandler.mjs'
|
|
|
import Errors from '../Errors/Errors.js'
|
|
import Errors from '../Errors/Errors.js'
|
|
@@ -80,9 +81,24 @@ async function _checkRateLimit(userId) {
|
|
|
return true
|
|
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) {
|
|
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 sendingUser = SessionManager.getSessionUser(req.session)
|
|
|
const sendingUserId = sendingUser._id
|
|
const sendingUserId = sendingUser._id
|
|
|
req.logger.addFields({ email, sendingUserId })
|
|
req.logger.addFields({ email, sendingUserId })
|