schon/engine/vibes_auth/utils/emailing.py
Egor fureunoir Gorbunov ee25bb67f0 Features: 1) Introduced STOREFRONT_DOMAIN in settings as a replacement for FRONTEND_DOMAIN;
Fixes: 1) Updated email templates to use `STOREFRONT_DOMAIN` instead of `FRONTEND_DOMAIN`; 2) Added a missing import for `settings` in emailing utilities;

Extra: 1) Removed unused configuration keys `FRONTEND_DOMAIN` and `BASE_DOMAIN`; 2) Cleaned up obsolete imports and formatting in serializers; 3) Adjusted environment file generation scripts to use `STOREFRONT_DOMAIN`.
2025-11-11 16:12:48 +03:00

92 lines
3.2 KiB
Python

from celery.app import shared_task
from constance import config
from django.conf import settings
from django.contrib.auth.tokens import PasswordResetTokenGenerator
from django.core.mail import EmailMessage
from django.template.loader import render_to_string
from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_encode
from django.utils.translation import activate
from django.utils.translation import gettext_lazy as _
from engine.core.utils import get_dynamic_email_connection
from engine.vibes_auth.models import User
@shared_task(queue="default")
def send_verification_email_task(user_pk: str) -> tuple[bool, str]:
try:
user = User.objects.get(pk=user_pk)
user.refresh_from_db()
activate(user.language)
email_subject = _(f"{config.PROJECT_NAME} | Activate Account")
email_body = render_to_string(
"../templates/user_verification_email.html",
{
"user_first_name": user.first_name,
"activation_link": f"https://{settings.STOREFRONT_DOMAIN}/{user.language}/activate-user?uid={urlsafe_base64_encode(force_bytes(user.uuid))}"
f"&token={urlsafe_base64_encode(force_bytes(user.activation_token))}",
"project_name": config.PROJECT_NAME,
},
)
email = EmailMessage(
subject=email_subject,
body=email_body,
from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>",
to=[user.email],
connection=get_dynamic_email_connection(),
)
email.content_subtype = "html"
email.send()
except User.DoesNotExist:
return False, f"User not found with the given pk: {user_pk}"
except Exception as e:
return False, f"Something went wrong while sending an email: {e!s}"
else:
return True, str(user.uuid)
@shared_task(queue="default")
def send_reset_password_email_task(user_pk: str) -> tuple[bool, str]:
try:
user = User.objects.get(pk=user_pk)
user.refresh_from_db()
activate(user.language)
email_subject = _(f"{config.PROJECT_NAME} | Reset Password")
email_body = render_to_string(
"../templates/user_reset_password_email.html",
{
"user_first_name": user.first_name,
"reset_link": f"https://{settings.STOREFRONT_DOMAIN}/{user.language}/reset-password?uid="
f"{urlsafe_base64_encode(force_bytes(user.pk))}"
f"&token={PasswordResetTokenGenerator().make_token(user)}",
"project_name": config.PROJECT_NAME,
},
)
email = EmailMessage(
subject=email_subject,
body=email_body,
from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>",
to=[user.email],
connection=get_dynamic_email_connection(),
)
email.content_subtype = "html"
email.send()
except User.DoesNotExist:
return False, f"User not found with the given pk: {user_pk}"
except Exception as e:
return False, f"Something went wrong while sending an email: {e!s}"
else:
return True, str(user.uuid)