From b1ffeb1f24b0b840c78210b5155763a2d4f19977 Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Fri, 15 May 2020 02:10:26 -0400 Subject: [PATCH 1/2] Updated URL validation regex to be more lenient --- functions/utils/valid.js | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/functions/utils/valid.js b/functions/utils/valid.js index 3ca6c461d..1969969f2 100644 --- a/functions/utils/valid.js +++ b/functions/utils/valid.js @@ -1,11 +1,6 @@ -function generateIPRE(protocol) { +function generateREForProtocol(protocol) { return new RegExp( - `${protocol}(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$` - ) -} -function generateHostnameRE(protocol) { - return new RegExp( - `${protocol}(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]).)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9/])$` + `${protocol}[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&\\/\\/=]*)` ) } @@ -14,9 +9,7 @@ function generateHostnameRE(protocol) { */ export function wsValid(url) { const protocol = "^(wss?:\\/\\/)?" - const validIP = generateIPRE(protocol) - const validHostname = generateHostnameRE(protocol) - return validIP.test(url) || validHostname.test(url) + return generateREForProtocol(protocol).test(url) } /** @@ -24,9 +17,7 @@ export function wsValid(url) { */ export function sseValid(url) { const protocol = "^(https?:\\/\\/)?" - const validIP = generateIPRE(protocol) - const validHostname = generateHostnameRE(protocol) - return validIP.test(url) || validHostname.test(url) + return generateREForProtocol(protocol).test(url) } /** @@ -34,7 +25,5 @@ export function sseValid(url) { */ export function socketioValid(url) { const protocol = "^((wss?:\\/\\/)|(https?:\\/\\/))?" - const validIP = generateIPRE(protocol) - const validHostname = generateHostnameRE(protocol) - return validIP.test(url) || validHostname.test(url) + return generateREForProtocol(protocol).test(url) } From b49e215617fc16d63d5795fd9ef6dd1f5794b1e7 Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Fri, 15 May 2020 02:14:24 -0400 Subject: [PATCH 2/2] Refactor Realtime URL validation functions --- functions/utils/valid.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/functions/utils/valid.js b/functions/utils/valid.js index 1969969f2..745872e45 100644 --- a/functions/utils/valid.js +++ b/functions/utils/valid.js @@ -1,3 +1,7 @@ +const wsRegex = generateREForProtocol("^(wss?:\\/\\/)?") +const sseRegex = generateREForProtocol("^(https?:\\/\\/)?") +const socketioRegex = generateREForProtocol("^((wss?:\\/\\/)|(https?:\\/\\/))?") + function generateREForProtocol(protocol) { return new RegExp( `${protocol}[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&\\/\\/=]*)` @@ -8,22 +12,19 @@ function generateREForProtocol(protocol) { * valid url for ws/wss */ export function wsValid(url) { - const protocol = "^(wss?:\\/\\/)?" - return generateREForProtocol(protocol).test(url) + return wsRegex.test(url) } /** * valid url for http/https */ export function sseValid(url) { - const protocol = "^(https?:\\/\\/)?" - return generateREForProtocol(protocol).test(url) + return sseRegex.test(url) } /** * valid url for ws/wss/http/https */ export function socketioValid(url) { - const protocol = "^((wss?:\\/\\/)|(https?:\\/\\/))?" - return generateREForProtocol(protocol).test(url) + return socketioRegex.test(url) }