33 lines
1.0 KiB
Python
33 lines
1.0 KiB
Python
from django.utils import timezone
|
|
|
|
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."""
|
|
request.session.cycle_key()
|
|
request.session[MAGIC_LINK_SESSION_KEY] = link.pk
|
|
remaining = max(1, int((link.expires_at - timezone.now()).total_seconds()))
|
|
request.session.set_expiry(remaining)
|
|
|
|
|
|
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
|