From 0796c4353d3d8f4bb3eb73c44bbece7b04dd8bf7 Mon Sep 17 00:00:00 2001 From: Eden Yemini Date: Sat, 25 Jan 2025 23:23:25 +0200 Subject: [PATCH] Detect URLs in monitor descriptions --- src/pages/Details.vue | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/pages/Details.vue b/src/pages/Details.vue index 17d32365c..f060dc81e 100644 --- a/src/pages/Details.vue +++ b/src/pages/Details.vue @@ -9,7 +9,7 @@
{{ monitor.id }}
-

{{ monitor.description }}

+

@@ -399,6 +399,19 @@ export default { screenshotURL() { return getResBaseURL() + this.monitor.screenshot + "?time=" + this.cacheTime; + }, + + processedDescription() { + if (!this.monitor.description) { + return ''; + } + + const urlPattern = /(\b(?:https?|ftp|file|smb|ssh|telnet|ldap|git):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi; + const processed = this.monitor.description.replace( + urlPattern, + url => `${this.escapeHtml(url)}` + ); + return processed; } }, @@ -656,6 +669,20 @@ export default { .replace("https://example.com/api/push/key?status=up&msg=OK&ping=", this.pushURL); this.pushMonitor.code = code; }); + }, + + /** + * Escape HTML + * @param {string} unsafe Unsafe string + * @returns {string} Safe string + */ + escapeHtml(unsafe) { + return unsafe + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); } }, };