From b8b42b8084442cb7ee2ab77a457c46b8eedc21bc Mon Sep 17 00:00:00 2001 From: Danny Qiu Date: Fri, 1 May 2020 05:25:56 -0700 Subject: Add Google Tasks to Todo providers (#695) Also enhance URL validation --- src/features/todos/components/TodosWebview.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'src/features/todos') diff --git a/src/features/todos/components/TodosWebview.js b/src/features/todos/components/TodosWebview.js index 2626186e9..663f1e48d 100644 --- a/src/features/todos/components/TodosWebview.js +++ b/src/features/todos/components/TodosWebview.js @@ -14,13 +14,15 @@ import UpgradeButton from '../../../components/ui/UpgradeButton'; // NOTE: https://stackoverflow.com/questions/5717093/check-if-a-javascript-string-is-a-url function validURL(str) { - const pattern = new RegExp('^(https?:\\/\\/)?' // protocol - + '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' // domain name - + '((\\d{1,3}\\.){3}\\d{1,3}))' // OR ip (v4) address - + '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' // port and path - + '(\\?[;&a-z\\d%_.~+=-]*)?' // query string - + '(\\#[-a-z\\d_]*)?$', 'i'); // fragment locator - return !!pattern.test(str); + let url; + + try { + url = new URL(str); + } catch (_) { + return false; + } + + return url.protocol === 'http:' || url.protocol === 'https:'; } const messages = defineMessages({ -- cgit v1.2.3-54-g00ecf