86 lines
3.0 KiB
Python
86 lines
3.0 KiB
Python
from celery import shared_task
|
|
from celery.utils.log import get_task_logger
|
|
from django.core.mail import send_mail
|
|
from django.conf import settings
|
|
from django.utils.http import urlsafe_base64_encode
|
|
from django.utils.encoding import force_bytes
|
|
from django.template.loader import render_to_string
|
|
from .tokens import *
|
|
from .models import CustomUser
|
|
|
|
logger = get_task_logger(__name__)
|
|
|
|
@shared_task
|
|
def send_password_reset_email_task(user_id):
|
|
try:
|
|
user = CustomUser.objects.get(pk=user_id)
|
|
except CustomUser.DoesNotExist:
|
|
error_msg = f"Task send_password_reset_email has failed. Invalid User ID was sent."
|
|
logger.error(error_msg)
|
|
raise Exception(error_msg)
|
|
uid = urlsafe_base64_encode(force_bytes(user.pk))
|
|
token = password_reset_token.make_token(user)
|
|
reset_url = f"{settings.FRONTEND_URL}/reset-password/{uid}/{token}"
|
|
html_message = render_to_string(
|
|
'emails/password_reset.html',
|
|
{'reset_url': reset_url}
|
|
)
|
|
if settings.EMAIL_BACKEND == 'django.core.mail.backends.console.EmailBackend':
|
|
logger.debug("\nEMAIL OBSAH:\n", html_message, "\nKONEC OBSAHU")
|
|
send_email_with_context(
|
|
recipients=user.email,
|
|
subject="Obnova hesla",
|
|
message=None,
|
|
html_message=html_message
|
|
)
|
|
|
|
# Only email verification for user registration
|
|
@shared_task
|
|
def send_email_verification_task(user_id):
|
|
try:
|
|
user = CustomUser.objects.get(pk=user_id)
|
|
except CustomUser.DoesNotExist:
|
|
error_msg = f"Task send_email_verification_task has failed. Invalid User ID was sent."
|
|
logger.error(error_msg)
|
|
raise Exception(error_msg)
|
|
uid = urlsafe_base64_encode(force_bytes(user.pk))
|
|
token = account_activation_token.make_token(user)
|
|
verification_url = f"{settings.FRONTEND_URL}/email-verification/?uidb64={uid}&token={token}"
|
|
html_message = render_to_string(
|
|
'emails/email_verification.html',
|
|
{'verification_url': verification_url}
|
|
)
|
|
if settings.EMAIL_BACKEND == 'django.core.mail.backends.console.EmailBackend':
|
|
logger.debug("\nEMAIL OBSAH:\n", html_message, "\nKONEC OBSAHU")
|
|
send_email_with_context(
|
|
recipients=user.email,
|
|
subject="Ověření e-mailu",
|
|
message=None,
|
|
html_message=html_message
|
|
)
|
|
|
|
|
|
|
|
def send_email_with_context(recipients, subject, message=None, html_message=None):
|
|
"""
|
|
General function to send emails with a specific context.
|
|
"""
|
|
if isinstance(recipients, str):
|
|
recipients = [recipients]
|
|
|
|
try:
|
|
send_mail(
|
|
subject=subject,
|
|
message=message if message else '',
|
|
from_email=None,
|
|
recipient_list=recipients,
|
|
fail_silently=False,
|
|
html_message=html_message
|
|
)
|
|
if settings.EMAIL_BACKEND == 'django.core.mail.backends.console.EmailBackend':
|
|
logger.debug("\nEMAIL OBSAH:\n", html_message if html_message else message, "\nKONEC OBSAHU")
|
|
return True
|
|
except Exception as e:
|
|
logger.error(f"E-mail se neodeslal: {e}")
|
|
return False
|