2023-04-29 04:19:24 +08:00
|
|
|
import logging
|
|
|
|
|
2024-07-24 04:30:01 +08:00
|
|
|
from felicity.apps.user import schemas
|
2024-07-28 03:52:31 +08:00
|
|
|
from felicity.apps.user.services import (GroupService, UserPreferenceService,
|
|
|
|
UserService)
|
2024-01-27 01:08:02 +08:00
|
|
|
from felicity.core.config import get_settings
|
2024-07-28 03:52:31 +08:00
|
|
|
from .groups_perms import seed_groups, seed_permissions, seed_group_permissions_defaults
|
2024-02-16 23:48:19 +08:00
|
|
|
|
2024-01-28 21:17:16 +08:00
|
|
|
from .groups_perms import FGroup
|
|
|
|
|
2024-01-26 01:52:03 +08:00
|
|
|
settings = get_settings()
|
2023-04-29 04:19:24 +08:00
|
|
|
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
2024-01-28 21:17:16 +08:00
|
|
|
async def seed_daemon_user() -> None:
|
2023-10-28 17:34:50 +08:00
|
|
|
logger.info("Setting up system-daemon - System Daemon - .....")
|
2024-07-24 04:30:01 +08:00
|
|
|
user_service = UserService()
|
|
|
|
group_service = GroupService()
|
|
|
|
preference_service = UserPreferenceService()
|
2023-04-29 04:19:24 +08:00
|
|
|
|
2024-07-28 03:52:31 +08:00
|
|
|
system_daemon = await user_service.get_related(related=["groups"], email=settings.SYSTEM_DAEMON_EMAIL)
|
2023-04-29 04:19:24 +08:00
|
|
|
if not system_daemon:
|
|
|
|
su_in = schemas.UserCreate(
|
|
|
|
first_name="System",
|
|
|
|
last_name="Daemon",
|
2024-07-24 04:30:01 +08:00
|
|
|
user_name=settings.SYSTEM_DAEMON_USERNAME,
|
|
|
|
password=settings.SYSTEM_DAEMON_PASSWORD,
|
2024-01-26 01:52:03 +08:00
|
|
|
email=settings.SYSTEM_DAEMON_EMAIL,
|
2024-07-24 04:30:01 +08:00
|
|
|
login_retry=0,
|
2023-04-29 04:19:24 +08:00
|
|
|
is_superuser=True,
|
|
|
|
)
|
2024-07-28 03:52:31 +08:00
|
|
|
system_daemon = await user_service.create(user_in=su_in, related=["groups"])
|
2023-04-29 04:19:24 +08:00
|
|
|
|
2024-07-24 17:04:53 +08:00
|
|
|
admin_group = await group_service.get(name=FGroup.ADMINISTRATOR)
|
|
|
|
if admin_group.uid not in [g.uid for g in system_daemon.groups]:
|
|
|
|
system_daemon.groups.append(admin_group)
|
|
|
|
await user_service.save(system_daemon)
|
2023-04-29 04:19:24 +08:00
|
|
|
|
2024-07-24 17:04:53 +08:00
|
|
|
# initial user-preferences
|
|
|
|
if not system_daemon.preference_uid:
|
2023-09-11 13:02:05 +08:00
|
|
|
pref_in = schemas.UserPreferenceCreate(expanded_menu=False, theme="light")
|
2024-07-24 17:04:53 +08:00
|
|
|
preference = await preference_service.create(pref_in)
|
2023-04-29 04:19:24 +08:00
|
|
|
logger.info(
|
|
|
|
f"linking system daemon {system_daemon.uid} to preference {preference.uid}"
|
|
|
|
)
|
2024-07-24 04:30:01 +08:00
|
|
|
await user_service.link_preference(system_daemon.uid, preference.uid)
|
2023-04-29 04:19:24 +08:00
|
|
|
|
2024-07-24 04:30:01 +08:00
|
|
|
logger.info(f"Done Setting up system daemon")
|
2023-04-29 04:19:24 +08:00
|
|
|
|
|
|
|
|
2024-01-28 21:17:16 +08:00
|
|
|
async def seed_super_user() -> None:
|
2024-07-24 04:30:01 +08:00
|
|
|
logger.info("Setting up super user - Felicity User - .....")
|
|
|
|
user_service = UserService()
|
|
|
|
group_service = GroupService()
|
|
|
|
preference_service = UserPreferenceService()
|
2023-04-29 04:19:24 +08:00
|
|
|
|
2024-07-28 03:52:31 +08:00
|
|
|
super_user = await user_service.get_related(related=["groups"], email=settings.FIRST_SUPERUSER_EMAIL)
|
2024-07-24 04:30:01 +08:00
|
|
|
if not super_user:
|
2023-04-29 04:19:24 +08:00
|
|
|
su_in = schemas.UserCreate(
|
|
|
|
first_name="System",
|
2024-07-24 04:30:01 +08:00
|
|
|
last_name="Admin",
|
|
|
|
user_name=settings.FIRST_SUPERUSER_USERNAME,
|
|
|
|
password=settings.FIRST_SUPERUSER_PASSWORD,
|
2023-04-29 04:19:24 +08:00
|
|
|
email=settings.FIRST_SUPERUSER_EMAIL,
|
2024-07-24 04:30:01 +08:00
|
|
|
login_retry=0,
|
2023-04-29 04:19:24 +08:00
|
|
|
is_superuser=True,
|
|
|
|
)
|
2024-07-28 03:52:31 +08:00
|
|
|
super_user = await user_service.create(user_in=su_in, related=["groups"])
|
|
|
|
|
2024-07-24 17:04:53 +08:00
|
|
|
admin_group = await group_service.get(name=FGroup.ADMINISTRATOR)
|
2024-07-28 03:52:31 +08:00
|
|
|
|
|
|
|
if admin_group and admin_group.uid not in [g.uid for g in super_user.groups]:
|
2024-07-24 17:04:53 +08:00
|
|
|
super_user.groups.append(admin_group)
|
|
|
|
await user_service.save(super_user)
|
|
|
|
|
|
|
|
# initial user-preferences
|
|
|
|
if not super_user.preference_uid:
|
2023-09-11 13:02:05 +08:00
|
|
|
pref_in = schemas.UserPreferenceCreate(expanded_menu=False, theme="light")
|
2024-07-24 17:04:53 +08:00
|
|
|
preference = await preference_service.create(pref_in)
|
2024-07-24 04:30:01 +08:00
|
|
|
await user_service.link_preference(super_user.uid, preference.uid)
|
2023-04-29 04:19:24 +08:00
|
|
|
|
2024-07-24 04:30:01 +08:00
|
|
|
logger.info(f"Done Setting up system admin")
|