This adds a simple email-based mechanism to report profiles for abuse. An email with text from the report is sent to Free Code Camp's support account with the reporter's account in copy. This also adds the reporter's details to the report for follow ups.
56 lines
1.6 KiB
JavaScript
56 lines
1.6 KiB
JavaScript
import validator from 'express-validator';
|
|
import { isPoly } from '../../common/utils/polyvinyl';
|
|
|
|
const isObject = val => !!val && typeof val === 'object';
|
|
|
|
export default function() {
|
|
return validator({
|
|
customValidators: {
|
|
matchRegex(param, regex) {
|
|
return regex.test(param);
|
|
},
|
|
isString(value) {
|
|
return typeof value === 'string';
|
|
},
|
|
isNumber(value) {
|
|
return typeof value === 'number';
|
|
},
|
|
isFiles(value) {
|
|
if (!isObject(value)) {
|
|
return false;
|
|
}
|
|
const keys = Object.keys(value);
|
|
return !!keys.length &&
|
|
// every key is a file
|
|
keys.every(key => isObject(value[key])) &&
|
|
// every file has contents
|
|
keys.map(key => value[key]).every(file => isPoly(file));
|
|
}
|
|
},
|
|
customSanitizers: {
|
|
// Refer : http://stackoverflow.com/a/430240/1932901
|
|
trimTags(value) {
|
|
const tagBody = '(?:[^"\'>]|"[^"]*"|\'[^\']*\')*';
|
|
const tagOrComment = new RegExp(
|
|
'<(?:'
|
|
// Comment body.
|
|
+ '!--(?:(?:-*[^->])*--+|-?)'
|
|
// Special "raw text" elements whose content should be elided.
|
|
+ '|script\\b' + tagBody + '>[\\s\\S]*?</script\\s*'
|
|
+ '|style\\b' + tagBody + '>[\\s\\S]*?</style\\s*'
|
|
// Regular name
|
|
+ '|/?[a-z]'
|
|
+ tagBody
|
|
+ ')>',
|
|
'gi');
|
|
let rawValue;
|
|
do {
|
|
rawValue = value;
|
|
value = value.replace(tagOrComment, '');
|
|
} while (value !== rawValue);
|
|
return value.replace(/</g, '<');
|
|
}
|
|
}
|
|
});
|
|
}
|