py-scopes/scopes/api/auth/user.py

39 lines
894 B
Python

# scopes.api.auth user
from fastapi import APIRouter
from pwdlib import PasswordHash
from pydantic import BaseModel, Field
from typing import List
from scopes.api import deps
from scopes.storage import user as st_user
class User(BaseModel):
uid: str | None = None
name: str
login: str
display_name: str
email: str | None = None
pw_hash: str | None = Field(exclude=True, default=None)
groups: List[str] = Field(default_factory=list)
# password handling
pw_hash = PasswordHash.recommended()
def hashPassword(pw):
return pw_hash.hash(pw)
def verifyPassword(plain, hashed):
return pw_hash.verify(plain, hashed)
# routes
router = APIRouter()
@router.get('/users', response_model=list[User])
async def get_users(storage: deps.Storage):
users = storage.create(st_user.Users)
result = [tr.toObject(User) for tr in users.query()]
return result