]> source.dussan.org Git - nextcloud-server.git/commitdiff
Properly escape HTML and add support for highlight links in setupchecks
authorCôme Chilliet <come.chilliet@nextcloud.com>
Thu, 11 Jan 2024 11:18:25 +0000 (12:18 +0100)
committerCôme Chilliet <come.chilliet@nextcloud.com>
Mon, 15 Jan 2024 10:50:48 +0000 (11:50 +0100)
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
core/js/setupchecks.js

index 646e583ea4539cae5ea219c61465ac1c881fdddb..99e289e5e54e04114c7b8e3fb0575f4e9e269f67 100644 (file)
                        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.
                        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);
                        }
                        }
 
                        var message = setupCheck.description;
+                       if (message) {
+                               message = this.escapeHTML(message)
+                       }
                        if (setupCheck.descriptionParameters) {
                                message = this.richToParsed(message, setupCheck.descriptionParameters);
                        }