summaryrefslogtreecommitdiffstats
path: root/core/js
diff options
context:
space:
mode:
authorCôme Chilliet <come.chilliet@nextcloud.com>2024-01-11 12:18:25 +0100
committerCôme Chilliet <come.chilliet@nextcloud.com>2024-01-15 11:50:48 +0100
commit8766a90cffbc9ba0dd6f36c744f3f91968d8b65c (patch)
tree7fb86e75e9bb916cbe7ae59ef3d20f3344e7ba2d /core/js
parentd48151508146f38847125f857e0fcf5499514d64 (diff)
downloadnextcloud-server-8766a90cffbc9ba0dd6f36c744f3f91968d8b65c.tar.gz
nextcloud-server-8766a90cffbc9ba0dd6f36c744f3f91968d8b65c.zip
Properly escape HTML and add support for highlight links in setupchecks
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Diffstat (limited to 'core/js')
-rw-r--r--core/js/setupchecks.js20
1 files changed, 17 insertions, 3 deletions
diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js
index 646e583ea45..99e289e5e54 100644
--- a/core/js/setupchecks.js
+++ b/core/js/setupchecks.js
@@ -307,6 +307,15 @@
return deferred.promise();
},
+ escapeHTML: function(text) {
+ return text.toString()
+ .split('&').join('&amp;')
+ .split('<').join('&lt;')
+ .split('>').join('&gt;')
+ .split('"').join('&quot;')
+ .split('\'').join('&#039;')
+ },
+
/**
* @param message The message string containing placeholders.
* @param parameters An object with keys as placeholders and values as their replacements.
@@ -317,11 +326,13 @@
for (var [placeholder, parameter] of Object.entries(parameters)) {
var replacement;
if (parameter.type === 'user') {
- replacement = '@' + parameter.name;
+ replacement = '@' + this.escapeHTML(parameter.name);
} else if (parameter.type === 'file') {
- replacement = parameter.path || parameter.name;
+ replacement = this.escapeHTML(parameter.path) || this.escapeHTML(parameter.name);
+ } else if (parameter.type === 'highlight') {
+ replacement = '<a href="' + encodeURI(parameter.link) + '">' + this.escapeHTML(parameter.name) + '</a>';
} else {
- replacement = parameter.name;
+ replacement = this.escapeHTML(parameter.name);
}
message = message.replace('{' + placeholder + '}', replacement);
}
@@ -340,6 +351,9 @@
}
var message = setupCheck.description;
+ if (message) {
+ message = this.escapeHTML(message)
+ }
if (setupCheck.descriptionParameters) {
message = this.richToParsed(message, setupCheck.descriptionParameters);
}