From b2f4914fffafed6d038298616f76e6c9c4658f37 Mon Sep 17 00:00:00 2001 From: Eric Mc Sween <5454374+emcsween@users.noreply.github.com> Date: Thu, 3 Jul 2025 17:43:20 -0400 Subject: [PATCH] Migrate createLinkedFile to zod GitOrigin-RevId: 68175ddc002f1e968cd7155aa2327686772b3cc8 --- .../LinkedFiles/LinkedFilesController.mjs | 18 ++++++++++++++++-- .../Features/LinkedFiles/LinkedFilesRouter.mjs | 7 ------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/services/web/app/src/Features/LinkedFiles/LinkedFilesController.mjs b/services/web/app/src/Features/LinkedFiles/LinkedFilesController.mjs index 1873d2f3cd..da8c54e88c 100644 --- a/services/web/app/src/Features/LinkedFiles/LinkedFilesController.mjs +++ b/services/web/app/src/Features/LinkedFiles/LinkedFilesController.mjs @@ -37,6 +37,7 @@ import { } from '../Errors/Errors.js' import Modules from '../../infrastructure/Modules.js' import { plainTextResponse } from '../../infrastructure/Response.js' +import { z, zz, validateReq } from '../../infrastructure/Validation.js' import ReferencesHandler from '../References/ReferencesHandler.mjs' import EditorRealTimeController from '../Editor/EditorRealTimeController.js' import { expressify } from '@overleaf/promise-utils' @@ -46,9 +47,22 @@ import UrlAgent from './UrlAgent.mjs' let LinkedFilesController +const createLinkedFileSchema = z.object({ + params: z.object({ + project_id: zz.objectId(), + }), + body: z.object({ + name: z.string(), + provider: z.string(), + data: z.object({}).passthrough(), + parent_folder_id: zz.objectId(), + }), +}) + async function createLinkedFile(req, res, next) { - const { project_id: projectId } = req.params - const { name, provider, data, parent_folder_id: parentFolderId } = req.body + const { params, body } = validateReq(req, createLinkedFileSchema) + const { project_id: projectId } = params + const { name, provider, data, parent_folder_id: parentFolderId } = body const userId = SessionManager.getLoggedInUserId(req.session) const Agent = await LinkedFilesController._getAgent(provider) diff --git a/services/web/app/src/Features/LinkedFiles/LinkedFilesRouter.mjs b/services/web/app/src/Features/LinkedFiles/LinkedFilesRouter.mjs index 6868244311..66007aec52 100644 --- a/services/web/app/src/Features/LinkedFiles/LinkedFilesRouter.mjs +++ b/services/web/app/src/Features/LinkedFiles/LinkedFilesRouter.mjs @@ -3,7 +3,6 @@ import AuthenticationController from '../Authentication/AuthenticationController import { RateLimiter } from '../../infrastructure/RateLimiter.js' import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.js' import LinkedFilesController from './LinkedFilesController.mjs' -import { validate, Joi } from '../../infrastructure/Validation.js' const rateLimiters = { createLinkedFile: new RateLimiter('create-linked-file', { @@ -25,12 +24,6 @@ export default { RateLimiterMiddleware.rateLimit(rateLimiters.createLinkedFile, { params: ['project_id'], }), - validate({ - body: { - name: Joi.string().required(), - // TODO: validate the remaining properties - }, - }), LinkedFilesController.createLinkedFile )