aboutsummaryrefslogtreecommitdiffstats
path: root/backend
diff options
context:
space:
mode:
authorGravatar Joe Banks <[email protected]>2020-12-26 23:13:39 +0000
committerGravatar GitHub <[email protected]>2020-12-26 23:13:39 +0000
commitb87d9191131a6b084bf95849995df64b7895f65b (patch)
treed3d40258810efe721bd39907cea5910bce59e74a /backend
parentMerge pull request #45 from python-discord/renovate/pyjwt-2.x (diff)
parentMerge branch 'main' into ks123/admin-adding (diff)
Merge pull request #44 from python-discord/ks123/admin-adding
Diffstat (limited to 'backend')
-rw-r--r--backend/routes/admin.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/backend/routes/admin.py b/backend/routes/admin.py
new file mode 100644
index 0000000..5254f8b
--- /dev/null
+++ b/backend/routes/admin.py
@@ -0,0 +1,41 @@
+"""
+Adds new admin user.
+"""
+from pydantic import BaseModel, Field
+from spectree import Response
+from starlette.authentication import requires
+from starlette.requests import Request
+from starlette.responses import JSONResponse
+
+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."""
+
+ name = "admin"
+ path = "/admin"
+
+ @requires(["authenticated", "admin"])
+ @api.validate(
+ json=AdminModel,
+ resp=Response(HTTP_200=OkayResponse, HTTP_400=ErrorMessage),
+ tags=["admin"]
+ )
+ async def post(self, request: Request) -> JSONResponse:
+ """Grant a user administrator privileges."""
+ data = await request.json()
+ admin = AdminModel(**data)
+
+ if await request.state.db.admins.find_one(
+ {"_id": admin.id}
+ ):
+ return JSONResponse({"error": "already_exists"}, status_code=400)
+
+ await request.state.db.admins.insert_one(admin.dict(by_alias=True))
+ return JSONResponse({"status": "ok"})