diff --git a/src/config.js b/src/config.js
index 5f254342c..d2a4736a3 100644
--- a/src/config.js
+++ b/src/config.js
@@ -77,11 +77,12 @@ const config = {
/**
*| Parameter | Description |Type | Required | Values|
*| --- | --- | --- | --- | --- |
- *| securitylevel | Level of trust for parsed diagram|String | Required | Strict, Loose |
+ *| securitylevel | Level of trust for parsed diagram|String | Required | Strict, Loose, antiscript |
*
***Notes:
*- **strict**: (**default**) tags in text are encoded, click functionality is disabeled
*- **loose**: tags in text are allowed, click functionality is enabled
+ *- **antiscript**: html tags in text are allowed, (only script element is removed), click functionality is enabled
*/
securityLevel: 'strict',
diff --git a/src/diagrams/common/common.js b/src/diagrams/common/common.js
index 8362449a0..238965403 100644
--- a/src/diagrams/common/common.js
+++ b/src/diagrams/common/common.js
@@ -5,6 +5,30 @@ export const getRows = s => {
return str.split('#br#');
};
+export const removeScript = txt => {
+ var rs = '';
+ var idx = 0;
+
+ while (idx >= 0) {
+ idx = txt.indexOf('');
+ if (idx >= 0) {
+ idx += 9;
+ txt = txt.substr(idx);
+ }
+ } else {
+ rs += txt;
+ idx = -1;
+ break;
+ }
+ }
+ return rs;
+};
+
export const sanitizeText = (text, config) => {
let txt = text;
let htmlLabels = true;
@@ -14,12 +38,18 @@ export const sanitizeText = (text, config) => {
)
htmlLabels = false;
- if (config.securityLevel !== 'loose' && htmlLabels) {
- // eslint-disable-line
- txt = breakToPlaceholder(txt);
- txt = txt.replace(//g, '>');
- txt = txt.replace(/=/g, '=');
- txt = placeholderToBreak(txt);
+ if (htmlLabels) {
+ var level = config.securityLevel;
+
+ if (level == 'antiscript') {
+ txt = removeScript(txt);
+ } else if (level !== 'loose') {
+ // eslint-disable-line
+ txt = breakToPlaceholder(txt);
+ txt = txt.replace(//g, '>');
+ txt = txt.replace(/=/g, '=');
+ txt = placeholderToBreak(txt);
+ }
}
return txt;
@@ -48,5 +78,6 @@ export default {
sanitizeText,
hasBreaks,
splitBreaks,
- lineBreakRegex
+ lineBreakRegex,
+ removeScript
};
diff --git a/src/diagrams/common/common.spec.js b/src/diagrams/common/common.spec.js
new file mode 100644
index 000000000..ecf2dc3d5
--- /dev/null
+++ b/src/diagrams/common/common.spec.js
@@ -0,0 +1,26 @@
+import { removeScript } from './common';
+
+describe('when securityLevel is antiscript, all script must be removed', function() {
+ it('should remove all script block, script inline.', function() {
+ const labelString = `1
+ Act1: Hello 11
+ Act2:
+ 11
+ 1`;
+
+ const result = removeScript(labelString);
+ const hasScript = (result.indexOf("script") >= 0);
+ expect(hasScript).toEqual(false);
+
+ const exactlyString = `1
+ Act1: Hello 11
+ Act2:
+ 11
+ 1`;
+
+ const isEqual = (result == exactlyString);
+ expect(isEqual).toEqual(true);
+ });
+});