# scopes.api.auth user from fastapi import APIRouter import jwt 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, authentication pw_hash = PasswordHash.recommended() def hashPassword(pw): return pw_hash.hash(pw) def verifyPassword(plain, hashed): return pw_hash.verify(plain, hashed) async def authenticate(storage: deps.Storage, token: deps.Auth): payload = jwt.decode(token, settings.jwt_key, algorithms=[settings.jwt_algorithm]) userName = payload.get('sub') user = getUser(storage, userName) return user # 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