Implement new endpoint allowing admin/owner to invite participants via email. Provides explicit way to search users and send meeting invitations with direct links. In upcoming commits, frontend will call ResourceAccess endpoint to add invited people as members if they exist in visio, bypassing waiting room for a smoother experience.
60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
"""Invitation Service."""
|
|
|
|
import smtplib
|
|
from logging import getLogger
|
|
|
|
from django.conf import settings
|
|
from django.core.mail import send_mail
|
|
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
|
|
|
|
try:
|
|
send_mail(
|
|
subject,
|
|
msg_plain,
|
|
settings.EMAIL_FROM,
|
|
emails,
|
|
html_message=msg_html,
|
|
fail_silently=False,
|
|
)
|
|
except smtplib.SMTPException as e:
|
|
logger.error("invitation to %s was not sent: %s", emails, e)
|
|
raise InvitationError("Could not send invitation") from e
|