diff options
author | Raphael <mail@raphaelkabo.com> | 2024-05-26 21:21:16 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-26 21:21:16 +0100 |
commit | d728068526f319b4b4abbdeec29da568d6892ec8 (patch) | |
tree | 8a2d887367776ec0dc396524251022a02e8569ce /src/util/validation.ts | |
parent | 43296cd88b9ab6f3ba1d5f4de5f76f44b68de82a (diff) | |
parent | 80aa81a22ef00331942fe6d066e1f9d5e58df33f (diff) |
Merge pull request #153 from lowercasename/rk/url-validation
Fix URL validation
Diffstat (limited to 'src/util/validation.ts')
-rw-r--r-- | src/util/validation.ts | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/util/validation.ts b/src/util/validation.ts index b9a0c8a..a3bea63 100644 --- a/src/util/validation.ts +++ b/src/util/validation.ts @@ -73,6 +73,20 @@ const validateEmail = (email: string) => { return re.test(email); }; +// From https://stackoverflow.com/a/43467144 +const validateUrl = (url: string) => { + if (!url) { + return false; + } + let validUrl; + try { + validUrl = new URL(url); + } catch (_) { + return false; + } + return validUrl.protocol === "http:" || validUrl.protocol === "https:"; +}; + export const validateEventTime = (start: Date, end: Date): Error | boolean => { if (moment(start).isAfter(moment(end))) { return { @@ -195,6 +209,14 @@ export const validateEventData = ( }); } } + if (validatedData.eventURL) { + if (!validateUrl(validatedData.eventURL)) { + errors.push({ + message: "Event link is invalid.", + field: "eventURL", + }); + } + } return { data: validatedData, @@ -226,6 +248,14 @@ export const validateGroupData = ( }); } } + if (groupData.eventGroupURL) { + if (!validateUrl(groupData.eventGroupURL)) { + errors.push({ + message: "Group link is invalid.", + field: "eventGroupURL", + }); + } + } const validatedData: ValidatedEventGroupData = { ...groupData, |