from fooder.controller.base import ModelController from fooder.controller.token import TokenController from fooder.domain import User from fooder.context import Context from fooder.exc import Unauthorized 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)