2021-12-18 19:04:36 -09:00
|
|
|
import random
|
|
|
|
|
import shutil
|
|
|
|
|
|
2022-05-07 20:08:04 -08:00
|
|
|
from pydantic import UUID4
|
|
|
|
|
|
2021-12-18 19:04:36 -09:00
|
|
|
from mealie.assets import users as users_assets
|
|
|
|
|
from mealie.schema.user.user import PrivateUser, User
|
2021-08-27 20:27:20 -08:00
|
|
|
|
2021-12-18 20:52:36 -09:00
|
|
|
from .repository_generic import RepositoryGeneric
|
2021-08-22 16:08:37 -08:00
|
|
|
|
|
|
|
|
|
2021-12-18 20:52:36 -09:00
|
|
|
class RepositoryUsers(RepositoryGeneric[PrivateUser, User]):
|
2021-10-07 09:39:47 -08:00
|
|
|
def update_password(self, id, password: str):
|
2021-09-19 15:31:34 -08:00
|
|
|
entry = self._query_one(match_value=id)
|
2021-08-22 16:08:37 -08:00
|
|
|
entry.update_password(password)
|
2021-10-07 09:39:47 -08:00
|
|
|
self.session.commit()
|
2021-08-22 16:08:37 -08:00
|
|
|
|
|
|
|
|
return self.schema.from_orm(entry)
|
2021-12-18 19:04:36 -09:00
|
|
|
|
2022-05-30 10:30:54 -08:00
|
|
|
def create(self, user: PrivateUser | dict): # type: ignore
|
2021-12-18 19:04:36 -09:00
|
|
|
new_user = super().create(user)
|
|
|
|
|
|
|
|
|
|
# Select Random Image
|
|
|
|
|
all_images = [
|
|
|
|
|
users_assets.img_random_1,
|
|
|
|
|
users_assets.img_random_2,
|
|
|
|
|
users_assets.img_random_3,
|
|
|
|
|
]
|
|
|
|
|
random_image = random.choice(all_images)
|
|
|
|
|
shutil.copy(random_image, new_user.directory() / "profile.webp")
|
|
|
|
|
|
|
|
|
|
return new_user
|
|
|
|
|
|
2022-05-07 20:08:04 -08:00
|
|
|
def delete(self, value: str | UUID4, match_key: str | None = None) -> User:
|
|
|
|
|
entry = super().delete(value, match_key)
|
2021-12-18 19:04:36 -09:00
|
|
|
# Delete the user's directory
|
2022-05-07 20:08:04 -08:00
|
|
|
shutil.rmtree(PrivateUser.get_directory(value))
|
|
|
|
|
return entry # type: ignore
|
2022-03-15 23:28:42 +01:00
|
|
|
|
2022-08-13 13:18:12 -08:00
|
|
|
def get_by_username(self, username: str) -> PrivateUser | None:
|
2022-03-15 23:28:42 +01:00
|
|
|
dbuser = self.session.query(User).filter(User.username == username).one_or_none()
|
2022-08-13 13:18:12 -08:00
|
|
|
return None if dbuser is None else self.schema.from_orm(dbuser)
|
|
|
|
|
|
|
|
|
|
def get_locked_users(self) -> list[PrivateUser]:
|
|
|
|
|
results = self.session.query(User).filter(User.locked_at != None).all() # noqa E711
|
|
|
|
|
return [self.schema.from_orm(x) for x in results]
|