"""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}