[FIX] Bad words falling if message is empty (#22930)
Co-authored-by: Diego Sampaio <chinello@gmail.com>pull/22977/head^2
parent
717461d58b
commit
ac7ae55ddd
@ -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'); |
||||
}); |
||||
}); |
||||
Loading…
Reference in new issue