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