user.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import asyncio
  2. from .proxy import proxy
  3. from .apikey import apikey
  4. from .password import password
  5. from .field_generator import field_generator
  6. from .model import model
  7. from .validators import validators
  8. class user(model):
  9. id = field_generator.id()
  10. nick = field_generator.nick()
  11. secret = field_generator.secret()
  12. apikey = field_generator.apikey()
  13. is_admin = field_generator.permissions()
  14. def _validators(self) -> dict:
  15. return {
  16. "nick": validators.nick,
  17. "apikey": validators.apikey
  18. }
  19. class user_proxy(proxy):
  20. @classmethod
  21. async def create(cls, nick: str, plain_password: str) -> proxy:
  22. secret = await password.from_plain_text(plain_password)
  23. key = apikey.create()
  24. return cls(user(
  25. nick = nick,
  26. secret = secret.result(),
  27. apikey = key.export(),
  28. is_admin = False
  29. ))
  30. def is_admin(self) -> bool:
  31. return self._target.is_admin
  32. def make_admin(self) -> None:
  33. self._target.is_admin = True
  34. def make_standard_user(self) -> None:
  35. self._target.is_admin = False
  36. async def set_password(self, plain_password: str) -> None:
  37. secret = await password.from_plain_text(plain_password)
  38. self._target.secret = secret.result()
  39. async def compare_password(self, target: str) -> bool:
  40. secret = await password.from_hash(self._target.secret)
  41. result = await secret.compare(target)
  42. return result
  43. def drop_sessions(self) -> None:
  44. self._target.apikey = apikey.create().export()