aboutsummaryrefslogtreecommitdiffstats
path: root/backend/routes/admin.py
diff options
context:
space:
mode:
authorGravatar ks129 <[email protected]>2020-12-24 08:09:53 +0200
committerGravatar ks129 <[email protected]>2020-12-24 08:09:53 +0200
commitd30ac683746ecf92267884c2fc1ae654a7203dd4 (patch)
treedf122bfa13147cb603e0eb626849dd5dde38273a /backend/routes/admin.py
parentCreate route for adding new admins (diff)
Use Pydantic validation instead manual validation
Diffstat (limited to 'backend/routes/admin.py')
-rw-r--r--backend/routes/admin.py11
1 files changed, 8 insertions, 3 deletions
diff --git a/backend/routes/admin.py b/backend/routes/admin.py
index ef01fbd..08e97ce 100644
--- a/backend/routes/admin.py
+++ b/backend/routes/admin.py
@@ -1,6 +1,7 @@
"""
Adds new admin user.
"""
+from pydantic import BaseModel, Field
from spectree import Response
from starlette.authentication import requires
from starlette.requests import Request
@@ -10,6 +11,10 @@ from backend.route import Route
from backend.validation import ErrorMessage, OkayResponse, api
+class AdminModel(BaseModel):
+ id: str = Field(alias="_id")
+
+
class AdminRoute(Route):
"""Adds new admin user."""
@@ -18,14 +23,14 @@ class AdminRoute(Route):
@requires(["authenticated", "admin"])
@api.validate(
+ json=AdminModel,
resp=Response(HTTP_200=OkayResponse, HTTP_400=ErrorMessage),
tags=["admin"]
)
async def post(self, request: Request) -> JSONResponse:
"""Inserts new administrator user to DB."""
data = await request.json()
- if "id" not in data:
- return JSONResponse({"error": "missing_id"}, status_code=400)
+ admin = AdminModel(**data)
- await request.state.db.admins.insert_one({"_id": str(data["id"])})
+ await request.state.db.admins.insert_one(admin.dict(by_alias=True))
return JSONResponse({"status": "ok"})