[FIX] Bad words falling if message is empty (#22930)

Co-authored-by: Diego Sampaio <chinello@gmail.com>
pull/22977/head^2
Guilherme Gazzo 4 years ago committed by GitHub
parent 717461d58b
commit ac7ae55ddd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 29
      app/lib/server/methods/filterBadWords.js
  2. 56
      app/lib/server/methods/filterBadWords.ts
  3. 5
      package-lock.json
  4. 1
      package.json

@ -1,29 +0,0 @@
import Filter from 'bad-words';
import { settings } from '../../../settings';
import { callbacks } from '../../../callbacks';
callbacks.add('beforeSaveMessage', function(message) {
if (settings.get('Message_AllowBadWordsFilter')) {
const badWordsList = settings.get('Message_BadWordsFilterList');
let whiteList = settings.get('Message_BadWordsWhitelist');
let options;
// Add words to the blacklist
if (!!badWordsList && badWordsList.length) {
options = {
list: badWordsList.split(','),
};
}
const filter = new Filter(options);
if (whiteList?.length) {
whiteList = whiteList.split(',').map((word) => word.trim());
filter.removeWords(...whiteList);
}
message.msg = filter.clean(message.msg);
}
return message;
}, 1, 'filterBadWords');

@ -0,0 +1,56 @@
import { Meteor } from 'meteor/meteor';
import { Tracker } from 'meteor/tracker';
import Filter from 'bad-words';
import { settings } from '../../../settings/server';
import { callbacks } from '../../../callbacks/server';
import { IMessage } from '../../../../definition/IMessage';
const Dep = new Tracker.Dependency();
Meteor.startup(() => {
settings.get(/Message_AllowBadWordsFilter|Message_BadWordsFilterList|Message_BadWordsWhitelist/, () => {
Dep.changed();
});
Tracker.autorun(() => {
Dep.depend();
const allowBadWordsFilter = settings.get('Message_AllowBadWordsFilter');
callbacks.remove('beforeSaveMessage', 'filterBadWords');
if (!allowBadWordsFilter) {
return;
}
const badWordsList = settings.get('Message_BadWordsFilterList') as string | undefined;
const whiteList = settings.get('Message_BadWordsWhitelist') as string | undefined;
const options = {
list: badWordsList?.split(',').map((word) => word.trim()).filter(Boolean) || [],
// library definition does not allow optional definition
exclude: undefined,
splitRegex: undefined,
placeHolder: undefined,
regex: undefined,
replaceRegex: undefined,
emptyList: undefined,
};
const filter = new Filter(options);
if (whiteList?.length) {
filter.removeWords(...whiteList.split(',').map((word) => word.trim()));
}
callbacks.add('beforeSaveMessage', function(message: IMessage) {
if (!message.msg) {
return message;
}
try {
message.msg = filter.clean(message.msg);
} finally {
// eslint-disable-next-line no-unsafe-finally
return message;
}
}, callbacks.priority.HIGH, 'filterBadWords');
});
});

5
package-lock.json generated

@ -9247,6 +9247,11 @@
"@types/node": "*"
}
},
"@types/bad-words": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@types/bad-words/-/bad-words-3.0.1.tgz",
"integrity": "sha512-7la3ZDJG1tlRqySO+pnXycZpacaMEw/iLEm8kc4l+I+jN8KjBfoQVwO6jm98xzXVLrxV8vDrB5TaMoop8sKclQ=="
},
"@types/bcrypt": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.0.tgz",

@ -60,6 +60,7 @@
"@storybook/addons": "^6.3.6",
"@storybook/react": "^6.3.6",
"@types/agenda": "^2.0.9",
"@types/bad-words": "^3.0.1",
"@types/bcrypt": "^5.0.0",
"@types/body-parser": "^1.19.0",
"@types/chai": "^4.2.19",

Loading…
Cancel
Save