from .base import ModelController from ..domain import User from ..context import Context from ..exc import Unauthorized from .token import TokenController class UserController(ModelController[User]): @classmethod async def session_start( cls, ctx: Context, username: str, password: str, ) -> "UserController": obj = await ctx.repo.user.get(User.username == username) if obj is None or not obj.verify_password(password): raise Unauthorized() return cls(ctx, obj) def token_ctrl(self) -> TokenController: return TokenController(ctx=self.ctx, entity_id=self.obj.id)