Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions app/file-upload/server/startup/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ settings.addGroup('FileUpload', function() {
i18nDescription: 'FileUpload_MediaTypeWhiteListDescription',
});

this.add('FileUpload_MediaTypeBlackList', '', {
type: 'string',
public: true,
i18nDescription: 'FileUpload_MediaTypeBlackListDescription',
});

this.add('FileUpload_ProtectFiles', true, {
type: 'boolean',
public: true,
Expand Down
4 changes: 4 additions & 0 deletions app/importer/server/classes/ImporterBase.js
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,9 @@ export class Base {
this.oldSettings.FileUpload_MediaTypeWhiteList = Settings.findOneById('FileUpload_MediaTypeWhiteList').value;
Settings.updateValueById('FileUpload_MediaTypeWhiteList', '*');

this.oldSettings.FileUpload_MediaTypeBlackList = Settings.findOneById('FileUpload_MediaTypeBlackList').value;
Settings.updateValueById('FileUpload_MediaTypeBlackList', '');

this.oldSettings.UI_Allow_room_names_with_special_chars = Settings.findOneById('UI_Allow_room_names_with_special_chars').value;
Settings.updateValueById('UI_Allow_room_names_with_special_chars', true);
break;
Expand All @@ -243,6 +246,7 @@ export class Base {
Settings.updateValueById('Accounts_AllowUsernameChange', this.oldSettings.Accounts_AllowUsernameChange);
Settings.updateValueById('FileUpload_MaxFileSize', this.oldSettings.FileUpload_MaxFileSize);
Settings.updateValueById('FileUpload_MediaTypeWhiteList', this.oldSettings.FileUpload_MediaTypeWhiteList);
Settings.updateValueById('FileUpload_MediaTypeBlackList', this.oldSettings.FileUpload_MediaTypeBlackList);
Settings.updateValueById('UI_Allow_room_names_with_special_chars', this.oldSettings.UI_Allow_room_names_with_special_chars);
break;
}
Expand Down
2 changes: 2 additions & 0 deletions app/ui-message/client/messageBox/messageBoxActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ messageBox.actions.add('Create_new', 'Video_message', {
&& window.MediaRecorder
&& settings.get('FileUpload_Enabled')
&& settings.get('Message_VideoRecorderEnabled')
&& (!settings.get('FileUpload_MediaTypeBlackList')
|| !settings.get('FileUpload_MediaTypeBlackList').match(/video\/webm|video\/\*/i))
&& (!settings.get('FileUpload_MediaTypeWhiteList')
|| settings.get('FileUpload_MediaTypeWhiteList').match(/video\/webm|video\/\*/i)),
action: ({ rid, tmid, messageBox }) => (VRecDialog.opened ? VRecDialog.close() : VRecDialog.open(messageBox, { rid, tmid })),
Expand Down
2 changes: 2 additions & 0 deletions app/ui-message/client/messageBox/messageBoxAudioMessage.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ Template.messageBoxAudioMessage.helpers({
&& !Template.instance().isMicrophoneDenied.get()
&& settings.get('FileUpload_Enabled')
&& settings.get('Message_AudioRecorderEnabled')
&& (!settings.get('FileUpload_MediaTypeBlackList')
|| !settings.get('FileUpload_MediaTypeBlackList').match(/audio\/mp3|audio\/\*/i))
&& (!settings.get('FileUpload_MediaTypeWhiteList')
|| settings.get('FileUpload_MediaTypeWhiteList').match(/audio\/mp3|audio\/\*/i));
},
Expand Down
33 changes: 25 additions & 8 deletions app/utils/lib/fileUploadRestrictions.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@ const fileUploadMediaWhiteList = function(customWhiteList) {
});
};

export const fileUploadIsValidContentType = function(type, customWhiteList) {
const list = fileUploadMediaWhiteList(customWhiteList);
if (!list) {
return true;
const fileUploadMediaBlackList = function() {
const blacklist = settings.get('FileUpload_MediaTypeBlackList');
if (!blacklist) {
return;
}

if (!type) {
return false;
}
return _.map(blacklist.split(','), (item) => item.trim());
};

const isTypeOnList = function(type, list) {
if (_.contains(list, type)) {
return true;
}
Expand All @@ -39,6 +39,23 @@ export const fileUploadIsValidContentType = function(type, customWhiteList) {
if (_.contains(wildcards, type.replace(/(\/.*)$/, wildCardGlob))) {
return true;
}
};

export const fileUploadIsValidContentType = function(type, customWhiteList) {
const blackList = fileUploadMediaBlackList();
const whiteList = fileUploadMediaWhiteList(customWhiteList);

if (!type) {
return false;
}

if (blackList && isTypeOnList(type, blackList)) {
return false;
}

if (!whiteList) {
return true;
}

return false;
return isTypeOnList(type, whiteList);
};
2 changes: 2 additions & 0 deletions packages/rocketchat-i18n/i18n/en.i18n.json
Original file line number Diff line number Diff line change
Expand Up @@ -1560,6 +1560,8 @@
"FileUpload_MaxFileSize": "Maximum File Upload Size (in bytes)",
"FileUpload_MaxFileSizeDescription": "Set it to -1 to remove the file size limitation.",
"FileUpload_MediaType_NotAccepted": "Media Types Not Accepted",
"FileUpload_MediaTypeBlackList": "Blocked Media Types",
"FileUpload_MediaTypeBlackListDescription": "Comma-separated list of media types. This setting has priority over the Accepted Media Types.",
"FileUpload_MediaTypeWhiteList": "Accepted Media Types",
"FileUpload_MediaTypeWhiteListDescription": "Comma-separated list of media types. Leave it blank for accepting all media types.",
"FileUpload_ProtectFiles": "Protect Uploaded Files",
Expand Down