Regression: Apps-Engine - Convert streams to buffers on file upload (#20523)

Co-authored-by: Diego Sampaio <chinello@gmail.com>
pull/20535/head
Douglas Gubert 5 years ago committed by GitHub
parent 2c81c0ead1
commit d420c21396
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      app/file-upload/server/lib/FileUpload.js
  2. 11
      app/file-upload/server/lib/streamToBuffer.ts
  3. 2
      client/views/admin/apps/AppPermissionsReviewModal.js
  4. 6
      package-lock.json
  5. 2
      package.json
  6. 4
      packages/rocketchat-i18n/i18n/en.i18n.json

@ -27,6 +27,7 @@ import { fileUploadIsValidContentType } from '../../../utils/lib/fileUploadRestr
import { isValidJWT, generateJWT } from '../../../utils/server/lib/JWTHelper';
import { Messages } from '../../../models/server';
import { AppEvents, Apps } from '../../../apps/server';
import { streamToBuffer } from './streamToBuffer';
const cookie = new Cookies();
let maxFileSize = 0;
@ -57,7 +58,7 @@ export const FileUpload = {
}, options, FileUpload[`default${ type }`]()));
},
validateFileUpload({ file, stream }) {
validateFileUpload({ file, content }) {
if (!Match.test(file.rid, String)) {
return false;
}
@ -97,7 +98,7 @@ export const FileUpload = {
// App IPreFileUpload event hook
try {
Promise.await(Apps.triggerEvent(AppEvents.IPreFileUpload, { file, stream }));
Promise.await(Apps.triggerEvent(AppEvents.IPreFileUpload, { file, content }));
} catch (error) {
if (error instanceof AppsEngineException) {
throw new Meteor.Error('error-app-prevented', error.message);
@ -596,12 +597,14 @@ export class FileUploadClass {
}
insert(fileData, streamOrBuffer, cb) {
fileData.size = parseInt(fileData.size) || 0;
if (streamOrBuffer instanceof stream) {
streamOrBuffer = Promise.await(streamToBuffer(streamOrBuffer));
}
// Check if the fileData matches store filter
const filter = this.store.getFilter();
if (filter && filter.check) {
filter.check({ file: fileData, stream: streamOrBuffer });
filter.check({ file: fileData, content: streamOrBuffer });
}
return this._doInsert(fileData, streamOrBuffer, cb);

@ -0,0 +1,11 @@
import { Readable } from 'stream';
export const streamToBuffer = (stream: Readable): Promise<Buffer> => new Promise((resolve) => {
const chunks: Array<Buffer> = [];
stream
.on('data', (data) => chunks.push(data))
.on('end', () => resolve(Buffer.concat(chunks)))
// force stream to resume data flow in case it was explicitly paused before
.resume();
});

@ -37,7 +37,7 @@ const AppPermissionsReviewModal = ({
? appPermissions.map((permission) =>
<li key={permission.name}>
<b>{ t(`Apps_Permissions_${ permission.name.replace('.', '_') }`) }</b>
{ permission.required && <span style={{ color: 'red' }}> ({ t('Required') })</span> }
{ permission.required && <span style={{ color: 'red' }}> ({ t('required') })</span> }
</li>)
: t('Apps_Permissions_No_Permissions_Required')
}

6
package-lock.json generated

@ -5907,9 +5907,9 @@
}
},
"@rocket.chat/apps-engine": {
"version": "1.22.0-alpha.4545",
"resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.22.0-alpha.4545.tgz",
"integrity": "sha512-RlibX/xJxnO5LzENCePpLiNEZjiD4r4AP0AEQQTYeWLqy58FR75wQnnNL7otyWDKnB55wfdnufbqw7OpqVbpEg==",
"version": "1.22.1",
"resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.22.1.tgz",
"integrity": "sha512-i1F0fvPegTmYrDdDY/XgW6SC6ez69QjkbN13rGVpzOmTXeAJAXovdMDMCTD4UaV3WNo+9ghMfsIlRbMIHeM6/g==",
"requires": {
"adm-zip": "^0.4.9",
"cryptiles": "^4.1.3",

@ -135,7 +135,7 @@
"@nivo/heatmap": "^0.61.0",
"@nivo/line": "^0.61.1",
"@nivo/pie": "^0.61.1",
"@rocket.chat/apps-engine": "1.22.0-alpha.4545",
"@rocket.chat/apps-engine": "1.22.1",
"@rocket.chat/css-in-js": "^0.21.0",
"@rocket.chat/emitter": "^0.21.0",
"@rocket.chat/fuselage": "^0.21.0",

@ -489,8 +489,6 @@
"Apps_Permissions_persistence": "Store internal data in the database",
"Apps_Permissions_scheduler": "Register and maintain scheduled jobs",
"Apps_Permissions_ui_interact": "Interact with the UI",
"Required": "required",
"Apps_Settings": "App's Settings",
"Apps_User_Already_Exists": "The username \"__username__\" is already being used. Rename or remove the user using it to install this App",
"Apps_WhatIsIt": "Apps: What Are They?",
@ -3209,6 +3207,8 @@
"Requested_At": "Requested At",
"Requested_By": "Requested By",
"Require": "Require",
"Required": "Required",
"required": "required",
"Require_all_tokens": "Require all tokens",
"Require_any_token": "Require any token",
"Require_password_change": "Require password change",

Loading…
Cancel
Save