first
This commit is contained in:
commit
fa9d154db9
260 files changed
+17643
No files matched your search
@@ -0,0 +1,32 @@
|
||||
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
|
||||
Reference in new issue
Block a user