From f670fbc93abba0ad7811fe7a2cec35cd1f52a779 Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Tue, 7 Jan 2025 10:27:11 -0500 Subject: [PATCH] feat: enhance superuser creation with email verification and update settings for two-factor authentication --- backend/entrypoint.sh | 25 ++++++++++++++++++++--- backend/server/main/settings.py | 6 +++--- frontend/src/locales/en.json | 1 + frontend/src/routes/settings/+page.svelte | 12 ++++++++--- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/backend/entrypoint.sh b/backend/entrypoint.sh index 48adee3..26c3e0d 100644 --- a/backend/entrypoint.sh +++ b/backend/entrypoint.sh @@ -20,19 +20,38 @@ done python manage.py migrate # Create superuser if environment variables are set and there are no users present at all. -if [ -n "$DJANGO_ADMIN_USERNAME" ] && [ -n "$DJANGO_ADMIN_PASSWORD" ]; then +if [ -n "$DJANGO_ADMIN_USERNAME" ] && [ -n "$DJANGO_ADMIN_PASSWORD" ] && [ -n "$DJANGO_ADMIN_EMAIL" ]; then echo "Creating superuser..." python manage.py shell << EOF from django.contrib.auth import get_user_model +from allauth.account.models import EmailAddress + User = get_user_model() -if User.objects.count() == 0: - User.objects.create_superuser('$DJANGO_ADMIN_USERNAME', '$DJANGO_ADMIN_EMAIL', '$DJANGO_ADMIN_PASSWORD') + +# Check if the user already exists +if not User.objects.filter(username='$DJANGO_ADMIN_USERNAME').exists(): + # Create the superuser + superuser = User.objects.create_superuser( + username='$DJANGO_ADMIN_USERNAME', + email='$DJANGO_ADMIN_EMAIL', + password='$DJANGO_ADMIN_PASSWORD' + ) print("Superuser created successfully.") + + # Create the EmailAddress object for AllAuth + EmailAddress.objects.create( + user=superuser, + email='$DJANGO_ADMIN_EMAIL', + verified=True, + primary=True + ) + print("EmailAddress object created successfully for AllAuth.") else: print("Superuser already exists.") EOF fi + # Sync the countries and world travel regions python manage.py download-countries diff --git a/backend/server/main/settings.py b/backend/server/main/settings.py index 349f7bc..aa57388 100644 --- a/backend/server/main/settings.py +++ b/backend/server/main/settings.py @@ -42,7 +42,7 @@ INSTALLED_APPS = ( 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites', - "allauth_ui", + # "allauth_ui", 'rest_framework', 'rest_framework.authtoken', 'allauth', @@ -59,8 +59,8 @@ INSTALLED_APPS = ( 'users', 'integrations', 'django.contrib.gis', - 'widget_tweaks', - 'slippers', + # 'widget_tweaks', + # 'slippers', ) diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 050ae37..b3a1f43 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -307,6 +307,7 @@ "settings_page": "Settings Page", "account_settings": "User Account Settings", "update": "Update", + "no_verified_email_warning": "You must have a verified email address to enable two-factor authentication.", "password_change": "Change Password", "new_password": "New Password", "confirm_new_password": "Confirm New Password", diff --git a/frontend/src/routes/settings/+page.svelte b/frontend/src/routes/settings/+page.svelte index 65b0905..cdba5c3 100644 --- a/frontend/src/routes/settings/+page.svelte +++ b/frontend/src/routes/settings/+page.svelte @@ -416,9 +416,15 @@
{#if !data.props.authenticators}

{$t('settings.mfa_not_enabled')}

- + {#if !emails.some((e) => e.verified)} +
+ {$t('settings.no_verified_email_warning')} +
+ {:else} + + {/if} {:else}