fix(utils/encode-decode): Use lodash replace
_.replace is harded against undefined/null
This commit is contained in:
committed by
mrugesh mohapatra
parent
f6e4bf74cb
commit
e8dcc43e23
@ -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
|
||||||
]);
|
);
|
||||||
|
70
common/utils/encode-decode.test.js
Normal file
70
common/utils/encode-decode.test.js
Normal 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
|
||||||
|
);
|
||||||
|
});
|
Reference in New Issue
Block a user