58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 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, '<');
 | 
						|
      }
 | 
						|
    }
 | 
						|
  });
 | 
						|
}
 |