mirror of
https://git.selfprivacy.org/SelfPrivacy/selfprivacy-rest-api.git
synced 2024-11-25 13:31:27 +00:00
7935de0fe1
Co-authored-by: inexcode <inex.code@selfprivacy.org> Reviewed-on: https://git.selfprivacy.org/SelfPrivacy/selfprivacy-rest-api/pulls/13
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
"""Users management module"""
|
|
from typing import Optional
|
|
from fastapi import APIRouter, Body, Depends, HTTPException
|
|
from pydantic import BaseModel
|
|
|
|
import selfprivacy_api.actions.users as users_actions
|
|
|
|
from selfprivacy_api.dependencies import get_token_header
|
|
|
|
router = APIRouter(
|
|
prefix="/users",
|
|
tags=["users"],
|
|
dependencies=[Depends(get_token_header)],
|
|
responses={404: {"description": "Not found"}},
|
|
)
|
|
|
|
|
|
@router.get("")
|
|
async def get_users(withMainUser: bool = False):
|
|
"""Get the list of users"""
|
|
users: list[users_actions.UserDataUser] = users_actions.get_users(
|
|
exclude_primary=not withMainUser, exclude_root=True
|
|
)
|
|
|
|
return [user.username for user in users]
|
|
|
|
|
|
class UserInput(BaseModel):
|
|
"""User input"""
|
|
|
|
username: str
|
|
password: str
|
|
|
|
|
|
@router.post("", status_code=201)
|
|
async def create_user(user: UserInput):
|
|
try:
|
|
users_actions.create_user(user.username, user.password)
|
|
except users_actions.PasswordIsEmpty as e:
|
|
raise HTTPException(status_code=400, detail=str(e))
|
|
except users_actions.UsernameForbidden as e:
|
|
raise HTTPException(status_code=409, detail=str(e))
|
|
except users_actions.UsernameNotAlphanumeric as e:
|
|
raise HTTPException(status_code=400, detail=str(e))
|
|
except users_actions.UsernameTooLong as e:
|
|
raise HTTPException(status_code=400, detail=str(e))
|
|
except users_actions.UserAlreadyExists as e:
|
|
raise HTTPException(status_code=409, detail=str(e))
|
|
|
|
return {"result": 0, "username": user.username}
|
|
|
|
|
|
@router.delete("/{username}")
|
|
async def delete_user(username: str):
|
|
try:
|
|
users_actions.delete_user(username)
|
|
except users_actions.UserNotFound as e:
|
|
raise HTTPException(status_code=404, detail=str(e))
|
|
except users_actions.UserIsProtected as e:
|
|
raise HTTPException(status_code=400, detail=str(e))
|
|
|
|
return {"result": 0, "username": username}
|