aboutsummaryrefslogtreecommitdiffstats
path: root/backend/routes/forms/index.py
diff options
context:
space:
mode:
authorGravatar Hassan Abouelela <[email protected]>2020-12-18 23:12:33 +0300
committerGravatar Hassan Abouelela <[email protected]>2020-12-18 23:12:33 +0300
commitd1cb4200229a7811f21ce44dc427674e4f0b4ff3 (patch)
treeb9f9d9522c3da4d4e05bc8aadfe3973b6cea16d1 /backend/routes/forms/index.py
parentUses Builtin User Class (diff)
Runs Initial Validation Asynchronously
Moves the validation code of webhook urls to an async function that is called by the route, to avoid blocking code. Signed-off-by: Hassan Abouelela <[email protected]>
Diffstat (limited to 'backend/routes/forms/index.py')
-rw-r--r--backend/routes/forms/index.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/backend/routes/forms/index.py b/backend/routes/forms/index.py
index d1373e4..0e1dee8 100644
--- a/backend/routes/forms/index.py
+++ b/backend/routes/forms/index.py
@@ -6,8 +6,10 @@ from starlette.authentication import requires
from starlette.requests import Request
from starlette.responses import JSONResponse
-from backend.route import Route
+from backend.constants import Meta, WebHook
from backend.models import Form, FormList
+from backend.models.form import validate_hook_url
+from backend.route import Route
from backend.validation import ErrorMessage, OkayResponse, api
@@ -46,6 +48,20 @@ class FormsList(Route):
"""Create a new form."""
form_data = await request.json()
+ # Verify Webhook
+ try:
+ # Get url from request
+ path = (Meta.__name__.lower(), WebHook.__name__.lower(), WebHook.URL.value)
+ url = form_data[path[0]][path[1]][path[2]]
+
+ # Validate URL
+ validation = await validate_hook_url(url)
+ if validation:
+ return JSONResponse(validation.errors(), status_code=422)
+
+ except KeyError:
+ pass
+
form = Form(**form_data)
if await request.state.db.forms.find_one({"_id": form.id}):