diff options
author | 2020-12-26 23:13:53 +0000 | |
---|---|---|
committer | 2020-12-26 23:13:53 +0000 | |
commit | ff914d45be250081bb321d7637364d1550edaf6b (patch) | |
tree | cad1fe0200ac407730e9b49664e73814487f2561 /backend | |
parent | Let Pydantic validate bulk responses delete data (diff) | |
parent | Merge pull request #44 from python-discord/ks123/admin-adding (diff) |
Merge branch 'main' into ks123/responses-bulk-delete
Diffstat (limited to 'backend')
-rw-r--r-- | backend/routes/admin.py | 41 |
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"}) |