diff options
Diffstat (limited to 'src/features/todos/components/TodosWebview.js')
-rw-r--r-- | src/features/todos/components/TodosWebview.js | 16 |
1 files changed, 9 insertions, 7 deletions
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'; | |||
14 | 14 | ||
15 | // NOTE: https://stackoverflow.com/questions/5717093/check-if-a-javascript-string-is-a-url | 15 | // NOTE: https://stackoverflow.com/questions/5717093/check-if-a-javascript-string-is-a-url |
16 | function validURL(str) { | 16 | function validURL(str) { |
17 | const pattern = new RegExp('^(https?:\\/\\/)?' // protocol | 17 | let url; |
18 | + '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' // domain name | 18 | |
19 | + '((\\d{1,3}\\.){3}\\d{1,3}))' // OR ip (v4) address | 19 | try { |
20 | + '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' // port and path | 20 | url = new URL(str); |
21 | + '(\\?[;&a-z\\d%_.~+=-]*)?' // query string | 21 | } catch (_) { |
22 | + '(\\#[-a-z\\d_]*)?$', 'i'); // fragment locator | 22 | return false; |
23 | return !!pattern.test(str); | 23 | } |
24 | |||
25 | return url.protocol === 'http:' || url.protocol === 'https:'; | ||
24 | } | 26 | } |
25 | 27 | ||
26 | const messages = defineMessages({ | 28 | const messages = defineMessages({ |