From 31799f8fab64b7dfe401983e4890ca9a4bd818da Mon Sep 17 00:00:00 2001 From: Carlos Valente Date: Fri, 7 Feb 2025 10:35:47 +0100 Subject: [PATCH] fix: project created without extension --- apps/server/src/api-data/db/db.controller.ts | 4 ++-- apps/server/src/api-data/db/db.validation.ts | 4 ++-- apps/server/src/services/project-service/ProjectService.ts | 6 ++++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/server/src/api-data/db/db.controller.ts b/apps/server/src/api-data/db/db.controller.ts index fb346df40..8ed9fc02b 100644 --- a/apps/server/src/api-data/db/db.controller.ts +++ b/apps/server/src/api-data/db/db.controller.ts @@ -49,7 +49,7 @@ export async function patchPartialProjectFile(req: Request, res: Response) { try { - const newFileName = await projectService.createProject(req.body.filename, { + const newFileName = await projectService.createProject(req.body.filename || 'untitled', { project: { title: req.body?.title ?? '', description: req.body?.description ?? '', @@ -75,7 +75,7 @@ export async function createProjectFile(req: Request, res: Response<{ filename: */ export async function quickProjectFile(req: Request, res: Response<{ filename: string } | ErrorResponse>) { try { - const filename = await projectService.createProject(req.body.project.title, req.body); + const filename = await projectService.createProject(req.body.project.title || 'untitled', req.body); res.status(200).send({ filename, }); diff --git a/apps/server/src/api-data/db/db.validation.ts b/apps/server/src/api-data/db/db.validation.ts index 63e31054b..e864bd937 100644 --- a/apps/server/src/api-data/db/db.validation.ts +++ b/apps/server/src/api-data/db/db.validation.ts @@ -7,6 +7,7 @@ import { ensureJsonExtension } from '../../utils/fileManagement.js'; * @description Validates request for a new project. */ export const validateNewProject = [ + body('filename').optional().isString().trim(), body('title').optional().isString().trim(), body('description').optional().isString().trim(), body('publicUrl').optional().isString().trim(), @@ -132,8 +133,7 @@ export const validateFilenameParam = [ .customSanitizer((input: string) => sanitize(input)) .withMessage('Failed to sanitize the filename') .notEmpty() - .withMessage('Filename was empty or contained only invalid characters') - .customSanitizer((input: string) => ensureJsonExtension(input)), + .withMessage('Filename was empty or contained only invalid characters'), (req: Request, res: Response, next: NextFunction) => { const errors = validationResult(req); diff --git a/apps/server/src/services/project-service/ProjectService.ts b/apps/server/src/services/project-service/ProjectService.ts index 6df369401..486b35516 100644 --- a/apps/server/src/services/project-service/ProjectService.ts +++ b/apps/server/src/services/project-service/ProjectService.ts @@ -9,6 +9,7 @@ import { appendToName, dockerSafeRename, ensureDirectory, + ensureJsonExtension, generateUniqueFileName, getFileNameFromPath, removeFileExtension, @@ -20,6 +21,7 @@ import { parseRundown } from '../../utils/parserFunctions.js'; import { demoDb } from '../../models/demoProject.js'; import { config } from '../../setup/config.js'; import { getDataProvider, initPersistence } from '../../classes/data-provider/DataProvider.js'; +import { safeMerge } from '../../classes/data-provider/DataProvider.utils.js'; import { initRundown } from '../rundown-service/RundownService.js'; import { @@ -37,7 +39,6 @@ import { moveCorruptFile, parseJsonFile, } from './projectServiceUtils.js'; -import { safeMerge } from '../../classes/data-provider/DataProvider.utils.js'; // init dependencies init(); @@ -257,7 +258,8 @@ export async function renameProjectFile(originalFile: string, newFilename: strin export async function createProject(filename: string, initialData: Partial) { const data = safeMerge(dbModel, initialData); - const uniqueFileName = generateUniqueFileName(publicDir.projectsDir, filename); + const fileNameWithExtension = ensureJsonExtension(filename); + const uniqueFileName = generateUniqueFileName(publicDir.projectsDir, fileNameWithExtension); const newFile = getPathToProject(uniqueFileName); // change LowDB to point to new file