fix(utils/encode-decode): Use lodash replace

_.replace is harded against undefined/null
This commit is contained in:
Berkeley Martinez
2018-01-16 20:02:35 -08:00
committed by mrugesh mohapatra
parent f6e4bf74cb
commit e8dcc43e23
2 changed files with 95 additions and 33 deletions

View File

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

View File

@ -0,0 +1,70 @@
import test from 'tape';
import {
encodeScriptTags,
decodeScriptTags,
encodeFormAction,
decodeFormAction,
encodeFcc,
decodeFcc
} from './encode-decode.js';
const scriptDecoded = `
<script>console.log('foo')</script>
`;
const scriptEncoded = `
fccssconsole.log('foo')fcces
`;
test('encodeScriptTags', t => {
t.plan(1);
t.equal(
encodeScriptTags(scriptDecoded),
scriptEncoded
);
});
test('decodeScriptTags', t => {
t.plan(1);
t.equal(
decodeScriptTags(scriptEncoded),
scriptDecoded
);
});
const formDecoded = `
<form action ='path'>foo</form>
`;
const formEncoded = `
<form fccfaa ='path'>foo</form>
`;
test('encodeFormAction', t => {
t.plan(1);
t.equal(
encodeFormAction(formDecoded),
formEncoded
);
});
test('decodeFormAction', t => {
t.plan(1);
t.equal(
decodeFormAction(formEncoded),
formDecoded
);
});
test('encodeFcc', t => {
t.plan(1);
t.equal(
encodeFcc('//noprotect' + scriptDecoded + formDecoded),
'//' + scriptEncoded + formEncoded
);
});
test('decodeFcc', t => {
t.plan(1);
t.equal(
decodeFcc(scriptEncoded + formEncoded),
scriptDecoded + formDecoded
);
});