summaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorRaphael <mail@raphaelkabo.com>2024-05-26 21:21:16 +0100
committerGitHub <noreply@github.com>2024-05-26 21:21:16 +0100
commitd728068526f319b4b4abbdeec29da568d6892ec8 (patch)
tree8a2d887367776ec0dc396524251022a02e8569ce /src/util
parent43296cd88b9ab6f3ba1d5f4de5f76f44b68de82a (diff)
parent80aa81a22ef00331942fe6d066e1f9d5e58df33f (diff)
Merge pull request #153 from lowercasename/rk/url-validation
Fix URL validation
Diffstat (limited to 'src/util')
-rw-r--r--src/util/validation.ts30
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,