diff --git a/backend/models/form.py b/backend/models/form.py index f19ed85d..838cd68c 100644 --- a/backend/models/form.py +++ b/backend/models/form.py @@ -1,4 +1,5 @@ import typing as t +import re import httpx from pydantic import constr, BaseModel, Field, root_validator, validator @@ -17,6 +18,10 @@ "discord_role" ] +WEBHOOK_PATTERN = "(?Phttps?)://(?P(?:ptb.|canary.)?discord(?:app)?.com)" \ + "/api(?:/)?(?Pv\\d{1,2})?/webhooks/" \ + "(?P\\d{17,21})/(?P[\\w-]{68})" + class _WebHook(BaseModel): """Schema model of discord webhooks.""" @@ -26,7 +31,7 @@ class _WebHook(BaseModel): @validator("url") def validate_url(cls, url: str) -> str: """Validates URL parameter.""" - if "discord.com/api/webhooks/" not in url: + if not re.match(WEBHOOK_PATTERN, url): raise ValueError("URL must be a discord webhook.") return url