| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | import asynciofrom .proxy import proxyfrom .apikey import apikeyfrom .password import passwordfrom .field_generator import field_generatorfrom .model import modelfrom .validators import validatorsclass user(model):    id = field_generator.id()    nick = field_generator.nick()    secret = field_generator.secret()    apikey = field_generator.apikey()    is_admin = field_generator.permissions()    def _validators(self) -> dict:        return {            "nick": validators.nick,            "apikey": validators.apikey        }       class user_proxy(proxy):    @classmethod    async def create(cls, nick: str, plain_password: str) -> proxy:        secret = await password.from_plain_text(plain_password)        key = apikey.create()        return cls(user(            nick = nick,            secret = secret.result(),            apikey = key.export(),            is_admin = False        ))    def is_admin(self) -> bool:        return self._target.is_admin    def make_admin(self) -> None:        self._target.is_admin = True       def make_standard_user(self) -> None:        self._target.is_admin = False    async def set_password(self, plain_password: str) -> None:        secret = await password.from_plain_text(plain_password)        self._target.secret = secret.result()    async def compare_password(self, target: str) -> bool:        secret = await password.from_hash(self._target.secret)        result = await secret.compare(target)        return result    def drop_sessions(self) -> None:        self._target.apikey = apikey.create().export()
 |