fix: unit test + sanitize uploaded filename

This commit is contained in:
Mohamed Marrouchi 2024-10-18 18:02:23 +01:00
parent 85cc85e4db
commit 879f5be1c2
5 changed files with 27 additions and 8 deletions

22
api/package-lock.json generated
View File

@ -51,6 +51,7 @@
"patch-package": "^8.0.0", "patch-package": "^8.0.0",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"rxjs": "^7.8.1", "rxjs": "^7.8.1",
"sanitize-filename": "^1.6.3",
"slug": "^8.2.2", "slug": "^8.2.2",
"ts-migrate-mongoose": "^3.8.4", "ts-migrate-mongoose": "^3.8.4",
"uuid": "^9.0.1" "uuid": "^9.0.1"
@ -16980,6 +16981,14 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
}, },
"node_modules/sanitize-filename": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz",
"integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==",
"dependencies": {
"truncate-utf8-bytes": "^1.0.0"
}
},
"node_modules/sax": { "node_modules/sax": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz",
@ -18114,6 +18123,14 @@
"tree-kill": "cli.js" "tree-kill": "cli.js"
} }
}, },
"node_modules/truncate-utf8-bytes": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
"integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==",
"dependencies": {
"utf8-byte-length": "^1.0.1"
}
},
"node_modules/ts-api-utils": { "node_modules/ts-api-utils": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz",
@ -18657,6 +18674,11 @@
"punycode": "^2.1.0" "punycode": "^2.1.0"
} }
}, },
"node_modules/utf8-byte-length": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz",
"integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA=="
},
"node_modules/util-deprecate": { "node_modules/util-deprecate": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",

View File

@ -72,6 +72,7 @@
"patch-package": "^8.0.0", "patch-package": "^8.0.0",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"rxjs": "^7.8.1", "rxjs": "^7.8.1",
"sanitize-filename": "^1.6.3",
"slug": "^8.2.2", "slug": "^8.2.2",
"ts-migrate-mongoose": "^3.8.4", "ts-migrate-mongoose": "^3.8.4",
"uuid": "^9.0.1" "uuid": "^9.0.1"

View File

@ -27,8 +27,6 @@ import { ChannelSetting } from '../types';
import EventWrapper from './EventWrapper'; import EventWrapper from './EventWrapper';
import EventWrapper from './EventWrapper';
@Injectable() @Injectable()
export default abstract class ChannelHandler<N extends string = string> { export default abstract class ChannelHandler<N extends string = string> {
private readonly name: N; private readonly name: N;

View File

@ -66,9 +66,6 @@ import { FileType } from '../schemas/types/attachment';
import { Context } from '../schemas/types/context'; import { Context } from '../schemas/types/context';
import { PayloadType, StdOutgoingListMessage } from '../schemas/types/message'; import { PayloadType, StdOutgoingListMessage } from '../schemas/types/message';
import { SubscriberContext } from '../schemas/types/subscriberContext'; import { SubscriberContext } from '../schemas/types/subscriberContext';
import { CategoryRepository } from './../repositories/category.repository';
import { BlockService } from './block.service';
import { CategoryService } from './category.service';
import { CategoryRepository } from './../repositories/category.repository'; import { CategoryRepository } from './../repositories/category.repository';
import { BlockService } from './block.service'; import { BlockService } from './block.service';

View File

@ -13,6 +13,7 @@ import { Injectable } from '@nestjs/common';
import { EventEmitter2, OnEvent } from '@nestjs/event-emitter'; import { EventEmitter2, OnEvent } from '@nestjs/event-emitter';
import { Request, Response } from 'express'; import { Request, Response } from 'express';
import multer, { diskStorage } from 'multer'; import multer, { diskStorage } from 'multer';
import sanitize from 'sanitize-filename';
import { Socket } from 'socket.io'; import { Socket } from 'socket.io';
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
@ -684,9 +685,9 @@ export default class BaseWebChannelHandler<
// Store file as attachment // Store file as attachment
const dirPath = path.join(config.parameters.uploadDir); const dirPath = path.join(config.parameters.uploadDir);
const filename = `${req.session.offline.profile.id}_${+new Date()}_${ const filename = sanitize(
upload.name `${req.session.offline.profile.id}_${+new Date()}_${upload.name}`,
}`; );
if ('isSocket' in req && req.isSocket) { if ('isSocket' in req && req.isSocket) {
// @TODO : test this // @TODO : test this
try { try {