user_loader.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import sqlmodel
  2. from .user import user
  3. from .user import user_builder
  4. from .password import password
  5. class user_loader(sqlmodel.Session):
  6. def login(self, nick: str, secret: str) -> user | None:
  7. """
  8. This get new user by nick and password. If user does not exists,
  9. then return None. It also return None when user password is not
  10. correct.
  11. nick: str - Nick of the user
  12. secret: str - Password of the user
  13. return: user | None - Logged user, or None when not exists
  14. """
  15. nick = nick.upper()
  16. result = self.get_by_nick(nick)
  17. if result is None:
  18. return None
  19. if not password(secret).validate(result.password):
  20. return None
  21. return result
  22. def register(self, target: user) -> bool:
  23. """
  24. This function register new user. It also check that user with given
  25. apikey or nick not exists. If user had been created, then return True.
  26. When something went wront, return False.
  27. target: user - User to register in database
  28. return: bool - True when registered new user, False when failed
  29. """
  30. if target.in_database:
  31. return False
  32. if not target.ready:
  33. return False
  34. if self.nick_in_use(target.nick):
  35. return False
  36. if self.apikey_in_use(target.apikey):
  37. return False
  38. self.add(target)
  39. self.commit()
  40. self.refresh(target)
  41. return True
  42. def unregister(self, target: user) -> bool:
  43. """
  44. This function remove user from database.
  45. target: user - User to remove from database
  46. return: bool - True when removed, Falsd when something failed
  47. """
  48. if not self.is_registered(target):
  49. return False
  50. self.delete(target)
  51. self.commit()
  52. return True
  53. def save(self, target: user) -> bool:
  54. """
  55. This function save already registered user to database, after changes.
  56. target: user - User to save
  57. return: bool - True when saved successfull, False when failed
  58. """
  59. if not self.is_registered(user):
  60. return False
  61. self.add(target)
  62. self.commit()
  63. self.refresh(target)
  64. return True
  65. def nick_in_use(self, nick: str) -> bool:
  66. """
  67. This function check that nick is already in use.
  68. nick: str - Nick to check
  69. return: bool - True when nick in use, False if not
  70. """
  71. return self.get_by_nick(nick.upper()) is not None
  72. def get_by_apikey(self, apikey: str) -> user | None:
  73. """
  74. This get user from database by apikey, or return None when not exists.
  75. apikey: str - Apikey of the user to load
  76. return: user | None - User with given apikey, or none when not exists
  77. """
  78. query = sqlmodel.select(user).where(user.apikey == apikey).limit(1)
  79. result = self.exec(query)
  80. return result.first()
  81. def apikey_in_use(self, apikey: str) -> bool:
  82. """
  83. This function check that apikey is already in use.
  84. apikey: str - Apikey to check
  85. return: bool - True when apikey is in use or False when not
  86. """
  87. return self.get_by_apikey(apikey) is not None
  88. def get_by_nick(self, nick: str) -> user | None:
  89. """
  90. This get user from database by nick.
  91. nick: str - Nick of the user to load
  92. return: user | None - Loaded user or None when not exists.
  93. """
  94. query = sqlmodel.select(user).where(user.nick == nick).limit(1)
  95. result = self.exec(query)
  96. return result.first()
  97. def get_by_id(self, id: int) -> user | None:
  98. """
  99. This function select user from database by ID.
  100. id: int - ID of the user to select
  101. return: user | None - Selected user or None when not exists
  102. """
  103. query = sqlmodel.select(user).where(user.id == id).limit(1)
  104. result = self.exec(query)
  105. return result.first()
  106. def is_registered(self, target: user) -> bool:
  107. """
  108. This function check that user is registered.
  109. target: user - User to check
  110. return: bool - True when user is registered, False when not
  111. """
  112. if target.id is None:
  113. return False
  114. return self.get_by_id(target.id) is not None