Files
customerTicket/apps/accounts/magic_access.py
T
2026-10-06 10:03:22 +03:30

31 lines
1001 B
Python

from django.utils import timezone
from apps.core.session_access import grant_scoped_session_access
from .models import TicketMagicLink
MAGIC_LINK_SESSION_KEY = "ticket_magic_link_id"
def grant_ticket_magic_access(request, link):
"""Grant an anonymous session access to exactly one ticket until link expiry."""
grant_scoped_session_access(request, MAGIC_LINK_SESSION_KEY, link.pk, link.expires_at)
def get_ticket_magic_access(request, ticket=None):
link_id = request.session.get(MAGIC_LINK_SESSION_KEY)
if not link_id:
return None
filters = {
"pk": link_id,
"revoked_at__isnull": True,
"expires_at__gt": timezone.now(),
"customer__is_active": True,
}
if ticket is not None:
filters["ticket_id"] = ticket.pk
link = TicketMagicLink.objects.select_related("customer", "ticket").filter(**filters).first()
if link is None and ticket is None:
request.session.pop(MAGIC_LINK_SESSION_KEY, None)
return link