[NEW] [Apps] IPreFileUpload event (#20285)

Co-authored-by: Guilherme Gazzo <guilhermegazzo@gmail.com>
Co-authored-by: Douglas Gubert <douglas.gubert@gmail.com>
pull/20221/head^2
Shiqi Mei 4 years ago committed by GitHub
parent e15a88e903
commit 818d707a2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      app/apps/server/bridges/listeners.js
  2. 21
      app/file-upload/server/lib/FileUpload.js
  3. 2
      app/ui/client/lib/fileUpload.js
  4. 6
      package-lock.json
  5. 2
      package.json

@ -41,10 +41,7 @@ export class AppListenerBridge {
case AppInterface.IPostLivechatGuestSaved:
case AppInterface.IPostLivechatRoomSaved:
return 'livechatEvent';
case AppInterface.IUIKitInteractionHandler:
case AppInterface.IUIKitLivechatInteractionHandler:
case AppInterface.IPostExternalComponentOpened:
case AppInterface.IPostExternalComponentClosed:
default:
return 'defaultEvent';
}
})();

@ -10,6 +10,7 @@ import { UploadFS } from 'meteor/jalik:ufs';
import { Match } from 'meteor/check';
import { TAPi18n } from 'meteor/rocketchat:tap-i18n';
import filesize from 'filesize';
import { AppsEngineException } from '@rocket.chat/apps-engine/definition/exceptions';
import { settings } from '../../../settings/server';
import Uploads from '../../../models/server/models/Uploads';
@ -25,6 +26,7 @@ import { canAccessRoom } from '../../../authorization/server/functions/canAccess
import { fileUploadIsValidContentType } from '../../../utils/lib/fileUploadRestrictions';
import { isValidJWT, generateJWT } from '../../../utils/server/lib/JWTHelper';
import { Messages } from '../../../models/server';
import { AppEvents, Apps } from '../../../apps/server';
const cookie = new Cookies();
let maxFileSize = 0;
@ -55,7 +57,7 @@ export const FileUpload = {
}, options, FileUpload[`default${ type }`]()));
},
validateFileUpload(file) {
validateFileUpload({ file, stream }) {
if (!Match.test(file.rid, String)) {
return false;
}
@ -93,10 +95,21 @@ export const FileUpload = {
throw new Meteor.Error('error-invalid-file-type', reason);
}
// App IPreFileUpload event hook
try {
Promise.await(Apps.triggerEvent(AppEvents.IPreFileUpload, { file, stream }));
} catch (error) {
if (error instanceof AppsEngineException) {
throw new Meteor.Error('error-app-prevented', error.message);
}
throw error;
}
return true;
},
validateAvatarUpload(file) {
validateAvatarUpload({ file }) {
if (!Match.test(file.rid, String) && !Match.test(file.userId, String)) {
return false;
}
@ -177,7 +190,7 @@ export const FileUpload = {
};
},
avatarsOnValidate(file) {
avatarsOnValidate({ file }) {
if (settings.get('Accounts_AvatarResize') !== true) {
return;
}
@ -588,7 +601,7 @@ export class FileUploadClass {
// Check if the fileData matches store filter
const filter = this.store.getFilter();
if (filter && filter.check) {
filter.check(fileData);
filter.check({ file: fileData, stream: streamOrBuffer });
}
return this._doInsert(fileData, streamOrBuffer, cb);

@ -232,7 +232,7 @@ export const fileUpload = async (files, input, { rid, tmid }) => {
return;
}
if (!fileUploadIsValidContentType(file.file.type)) {
if (file.file.type && !fileUploadIsValidContentType(file.file.type)) {
modal.open({
title: t('FileUpload_MediaType_NotAccepted'),
text: file.file.type || `*.${ s.strRightBack(file.file.name, '.') }`,

6
package-lock.json generated

@ -5907,9 +5907,9 @@
}
},
"@rocket.chat/apps-engine": {
"version": "1.22.0-alpha.4445",
"resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.22.0-alpha.4445.tgz",
"integrity": "sha512-MQEjFE7h9BeG9L90cUcvqSPbHMlKX7tw+yWHdiWxcp1tFIYAp+vW0FRgaGMEZyl3XncqEmnIIUbdKSEFvaekgw==",
"version": "1.22.0-alpha.4469",
"resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.22.0-alpha.4469.tgz",
"integrity": "sha512-Shw5bDSvk5SlVG2/Z6w1uFjDn1R5GTfvBcJGKK+6o0KZ0EU9sdPrCy79JiQY8c68wppWsln79PfHmPlj9CLK+A==",
"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.4445",
"@rocket.chat/apps-engine": "1.22.0-alpha.4469",
"@rocket.chat/css-in-js": "^0.20.1",
"@rocket.chat/emitter": "^0.20.1",
"@rocket.chat/fuselage": "^0.6.3-dev.164",

Loading…
Cancel
Save