47 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | import flow from 'lodash/flow'; | ||
|  | 
 | ||
|  | // we don't store loop protect disable key
 | ||
|  | export function removeNoprotect(val) { | ||
|  |   return val.replace(/noprotect/gi, ''); | ||
|  | } | ||
|  | 
 | ||
|  | export function encodeScriptTags(val) { | ||
|  |   return val | ||
|  |     .replace(/<script>/gi, 'fccss') | ||
|  |     .replace(/<\/script>/gi, 'fcces'); | ||
|  | } | ||
|  | 
 | ||
|  | export function decodeScriptTags(val) { | ||
|  |   return val | ||
|  |     .replace(/fccss/gi, '<script>') | ||
|  |     .replace(/fcces/gi, '</script>'); | ||
|  | } | ||
|  | 
 | ||
|  | export function encodeFormAction(val) { | ||
|  |   return val.replace( | ||
|  |     // look for attributes in a form
 | ||
|  |     /<form[^>]*>/, | ||
|  |     // val is the string within the opening form tag
 | ||
|  |     // look for an `action` attribute, replace it with a fcc tag
 | ||
|  |     val => val.replace(/action(\s*?)=/, 'fccfaa$1=') | ||
|  |   ); | ||
|  | } | ||
|  | 
 | ||
|  | export function decodeFormAction(val) { | ||
|  |   return val.replace( | ||
|  |     /<form[^>]*>/, | ||
|  |     val => val.replace(/fccfaa(\s*?)=/, 'action$1=') | ||
|  |   ); | ||
|  | } | ||
|  | 
 | ||
|  | export const encodeFcc = flow([ | ||
|  |   removeNoprotect, | ||
|  |   encodeFormAction, | ||
|  |   encodeScriptTags | ||
|  | ]); | ||
|  | 
 | ||
|  | export const decodeFcc = flow([ | ||
|  |   decodeFormAction, | ||
|  |   decodeScriptTags | ||
|  | ]); |