| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- import sqlmodel
- from .user import user
- from .user import user_builder
- from .password import password
- class user_loader(sqlmodel.Session):
- def login(self, nick: str, secret: str) -> user | None:
- """
- This get new user by nick and password. If user does not exists,
- then return None. It also return None when user password is not
- correct.
- nick: str - Nick of the user
- secret: str - Password of the user
- return: user | None - Logged user, or None when not exists
- """
- nick = nick.upper()
- result = self.get_by_nick(nick)
- if result is None:
- return None
- if not password(secret).validate(result.password):
- return None
- return result
- def register(self, target: user) -> bool:
- """
- This function register new user. It also check that user with given
- apikey or nick not exists. If user had been created, then return True.
- When something went wront, return False.
- target: user - User to register in database
- return: bool - True when registered new user, False when failed
- """
- if target.in_database:
- return False
- if not target.ready:
- return False
- if self.nick_in_use(target.nick):
- return False
- if self.apikey_in_use(target.apikey):
- return False
- self.add(target)
- self.commit()
- self.refresh(target)
- return True
- def unregister(self, target: user) -> bool:
- """
- This function remove user from database.
- target: user - User to remove from database
- return: bool - True when removed, Falsd when something failed
- """
- if not self.is_registered(target):
- return False
- self.delete(target)
- self.commit()
- return True
- def save(self, target: user) -> bool:
- """
- This function save already registered user to database, after changes.
- target: user - User to save
- return: bool - True when saved successfull, False when failed
- """
- if not self.is_registered(user):
- return False
- self.add(target)
- self.commit()
- self.refresh(target)
- return True
- def nick_in_use(self, nick: str) -> bool:
- """
- This function check that nick is already in use.
- nick: str - Nick to check
- return: bool - True when nick in use, False if not
- """
- return self.get_by_nick(nick.upper()) is not None
- def get_by_apikey(self, apikey: str) -> user | None:
- """
- This get user from database by apikey, or return None when not exists.
- apikey: str - Apikey of the user to load
- return: user | None - User with given apikey, or none when not exists
- """
- query = sqlmodel.select(user).where(user.apikey == apikey).limit(1)
- result = self.exec(query)
- return result.first()
- def apikey_in_use(self, apikey: str) -> bool:
- """
- This function check that apikey is already in use.
- apikey: str - Apikey to check
- return: bool - True when apikey is in use or False when not
- """
- return self.get_by_apikey(apikey) is not None
- def get_by_nick(self, nick: str) -> user | None:
- """
- This get user from database by nick.
- nick: str - Nick of the user to load
- return: user | None - Loaded user or None when not exists.
- """
- query = sqlmodel.select(user).where(user.nick == nick).limit(1)
- result = self.exec(query)
- return result.first()
- def get_by_id(self, id: int) -> user | None:
- """
- This function select user from database by ID.
- id: int - ID of the user to select
- return: user | None - Selected user or None when not exists
- """
- query = sqlmodel.select(user).where(user.id == id).limit(1)
- result = self.exec(query)
- return result.first()
- def is_registered(self, target: user) -> bool:
- """
- This function check that user is registered.
- target: user - User to check
- return: bool - True when user is registered, False when not
- """
- if target.id is None:
- return False
- return self.get_by_id(target.id) is not None
|