mirror of
https://github.com/suitenumerique/meet.git
synced 2026-08-06 08:57:46 +00:00
c5c96369c8
Email addresses are PII and should not appear in technical or error logs. Sanitize logging to avoid exposing sensitive user data when invitation sending fails.
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
"""Invitation Service."""
|
|
|
|
import smtplib
|
|
from logging import getLogger
|
|
|
|
from django.conf import settings
|
|
from django.core.mail import EmailMultiAlternatives
|
|
from django.template.loader import render_to_string
|
|
from django.utils.translation import get_language, override
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
logger = getLogger(__name__)
|
|
|
|
|
|
class InvitationError(Exception):
|
|
"""Exception raised when invitation emails cannot be sent."""
|
|
|
|
status_code = 500
|
|
|
|
|
|
class InvitationService:
|
|
"""Service for invitations to users."""
|
|
|
|
@staticmethod
|
|
def invite_to_room(room, sender, emails):
|
|
"""Send invitation emails to join a room."""
|
|
|
|
language = get_language()
|
|
|
|
context = {
|
|
"brandname": settings.EMAIL_BRAND_NAME,
|
|
"logo_img": settings.EMAIL_LOGO_IMG,
|
|
"domain": settings.EMAIL_DOMAIN,
|
|
"room_url": f"{settings.EMAIL_APP_BASE_URL}/{room.slug}",
|
|
"room_link": f"{settings.EMAIL_DOMAIN}/{room.slug}",
|
|
"sender_email": sender.email,
|
|
}
|
|
|
|
with override(language):
|
|
msg_html = render_to_string("mail/html/invitation.html", context)
|
|
msg_plain = render_to_string("mail/text/invitation.txt", context)
|
|
subject = str(
|
|
_(
|
|
f"Video call in progress: {sender.email} is waiting for you to connect"
|
|
)
|
|
) # Force translation
|
|
|
|
email = EmailMultiAlternatives(
|
|
subject=subject,
|
|
body=msg_plain,
|
|
from_email=settings.EMAIL_FROM,
|
|
to=[],
|
|
bcc=emails,
|
|
)
|
|
|
|
email.attach_alternative(msg_html, "text/html")
|
|
|
|
try:
|
|
email.send()
|
|
except smtplib.SMTPException as e:
|
|
logger.error("invitations were not sent: %s", e)
|
|
raise InvitationError("Could not send invitation") from e
|