diff options
Diffstat (limited to 'src/util')
| -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,  | 
