diff --git a/back/api/script.ts b/back/api/script.ts index 1bf85565..419ace4a 100644 --- a/back/api/script.ts +++ b/back/api/script.ts @@ -24,55 +24,68 @@ const upload = multer({ storage: storage }); export default (app: Router) => { app.use('/scripts', route); - route.get('/', async (req: Request, res: Response, next: NextFunction) => { - const logger: Logger = Container.get('logger'); - try { - let result: IFile[] = []; - const blacklist = [ - 'node_modules', - '.git', - '.pnpm', - 'pnpm-lock.yaml', - 'yarn.lock', - 'package-lock.json', - ]; - if (req.query.path) { - result = await readDir( - req.query.path as string, - config.scriptPath, - blacklist, - ); - } else { - result = await readDirs( - config.scriptPath, - config.scriptPath, - blacklist, - (a, b) => { - if (a.type === b.type) { - return a.title.localeCompare(b.title); - } else { - return a.type === 'directory' ? -1 : 1; - } - }, - ); + route.get( + '/', + celebrate({ + query: Joi.object({ + path: Joi.string().optional().allow(''), + }), + }), + async (req: Request, res: Response, next: NextFunction) => { + const logger: Logger = Container.get('logger'); + try { + let result: IFile[] = []; + const blacklist = [ + 'node_modules', + '.git', + '.pnpm', + 'pnpm-lock.yaml', + 'yarn.lock', + 'package-lock.json', + ]; + if (req.query.path) { + result = await readDir( + req.query.path as string, + config.scriptPath, + blacklist, + ); + } else { + result = await readDirs( + config.scriptPath, + config.scriptPath, + blacklist, + (a, b) => { + if (a.type === b.type) { + return a.title.localeCompare(b.title); + } else { + return a.type === 'directory' ? -1 : 1; + } + }, + ); + } + res.send({ + code: 200, + data: result, + }); + } catch (e) { + logger.error('🔥 error: %o', e); + return next(e); } - res.send({ - code: 200, - data: result, - }); - } catch (e) { - logger.error('🔥 error: %o', e); - return next(e); - } - }); + }); route.get( '/detail', + celebrate({ + query: Joi.object({ + path: Joi.string().optional().allow(''), + file: Joi.string().required(), + }), + }), async (req: Request, res: Response, next: NextFunction) => { try { const scriptService = Container.get(ScriptService); const content = await scriptService.getFile( - req.query.path as string, + req.query?.path as string || '', req.query.file as string, ); res.send({ code: 200, data: content }); @@ -84,11 +97,19 @@ export default (app: Router) => { route.get( '/:file', + celebrate({ + params: Joi.object({ + file: Joi.string().required(), + }), + query: Joi.object({ + path: Joi.string().optional().allow(''), + }), + }), async (req: Request, res: Response, next: NextFunction) => { try { const scriptService = Container.get(ScriptService); const content = await scriptService.getFile( - req.query.path as string, + req.query?.path as string || '', req.params.file, ); res.send({ code: 200, data: content }); @@ -101,6 +122,15 @@ export default (app: Router) => { route.post( '/', upload.single('file'), + celebrate({ + body: Joi.object({ + filename: Joi.string().required(), + path: Joi.string().optional().allow(''), + content: Joi.string().optional().allow(''), + originFilename: Joi.string().optional().allow(''), + directory: Joi.string().optional().allow(''), + }), + }), async (req: Request, res: Response, next: NextFunction) => { try { let { filename, path, content, originFilename, directory } = @@ -201,7 +231,7 @@ export default (app: Router) => { celebrate({ body: Joi.object({ filename: Joi.string().required(), - path: Joi.string().allow(''), + path: Joi.string().optional().allow(''), type: Joi.string().optional(), }), }), @@ -211,6 +241,9 @@ export default (app: Router) => { filename: string; path: string; }; + if (!path) { + path = ''; + } const scriptService = Container.get(ScriptService); const filePath = scriptService.checkFilePath(path, filename); if (!filePath) { @@ -276,6 +309,9 @@ export default (app: Router) => { const logger: Logger = Container.get('logger'); try { let { filename, content, path } = req.body; + if (!path) { + path = ''; + } const { name, ext } = parse(filename); const filePath = join(config.scriptPath, path, `${name}.swap${ext}`); await writeFileWithLock(filePath, content || ''); @@ -301,6 +337,9 @@ export default (app: Router) => { async (req: Request, res: Response, next: NextFunction) => { try { let { filename, path, pid } = req.body; + if (!path) { + path = ''; + } const { name, ext } = parse(filename); const filePath = join(config.scriptPath, path, `${name}.swap${ext}`); const logPath = join(config.logPath, path, `${name}.swap`); @@ -328,12 +367,14 @@ export default (app: Router) => { }), async (req: Request, res: Response, next: NextFunction) => { try { - let { filename, path, type, newFilename } = req.body as { + let { filename, path, newFilename } = req.body as { filename: string; path: string; - type: string; newFilename: string; }; + if (!path) { + path = ''; + } const filePath = join(config.scriptPath, path, filename); const newPath = join(config.scriptPath, path, newFilename); await fs.rename(filePath, newPath);