mirror of
https://github.com/pretix/pretix.git
synced 2026-05-04 15:04:03 +00:00
Store all check-in attempts, not only successful ones (#2074)
This commit is contained in:
@@ -22,6 +22,8 @@
|
||||
import base64
|
||||
import inspect
|
||||
import struct
|
||||
from collections import namedtuple
|
||||
from typing import Optional
|
||||
|
||||
from cryptography.hazmat.backends.openssl.backend import Backend
|
||||
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
|
||||
@@ -37,6 +39,8 @@ from pretix.base.models import Item, ItemVariation, SubEvent
|
||||
from pretix.base.secretgenerators import pretix_sig1_pb2
|
||||
from pretix.base.signals import register_ticket_secret_generators
|
||||
|
||||
ParsedSecret = namedtuple('AnalyzedSecret', 'item variation subevent attendee_name opaque_id')
|
||||
|
||||
|
||||
class BaseTicketSecretGenerator:
|
||||
"""
|
||||
@@ -72,6 +76,14 @@ class BaseTicketSecretGenerator:
|
||||
"""
|
||||
return False
|
||||
|
||||
def parse_secret(self, secret: str) -> Optional[ParsedSecret]:
|
||||
"""
|
||||
Given a ``secret``, return an ``ParsedSecret`` with the information decoded from the secret, if possible.
|
||||
Any value of ``ParsedSecret`` may be ``None``, and if parsing is not possible at all, you can ``None`` (as
|
||||
the default implementation does).
|
||||
"""
|
||||
return None
|
||||
|
||||
def generate_secret(self, item: Item, variation: ItemVariation = None, subevent: SubEvent = None,
|
||||
attendee_name: str = None, current_secret: str = None, force_invalidate=False) -> str:
|
||||
"""
|
||||
@@ -181,6 +193,15 @@ class Sig1TicketSecretGenerator(BaseTicketSecretGenerator):
|
||||
except:
|
||||
return None
|
||||
|
||||
def parse_secret(self, secret: str) -> Optional[ParsedSecret]:
|
||||
ticket = self._parse(secret)
|
||||
if ticket:
|
||||
item = self.event.items.filter(pk=ticket.item).first() if ticket.item else None
|
||||
subevent = self.event.subevents.filter(pk=ticket.subevent).first() if ticket.subevent else None
|
||||
variation = item.variations.filter(pk=ticket.variation).first() if item and ticket.subevent else None
|
||||
opaque_id = ticket.seed
|
||||
return self.ParsedSecret(item=item, subevent=subevent, variation=variation, opaque_id=opaque_id, attendee_name=None)
|
||||
|
||||
def generate_secret(self, item: Item, variation: ItemVariation = None, subevent: SubEvent = None,
|
||||
current_secret: str = None, force_invalidate=False):
|
||||
if current_secret and not force_invalidate:
|
||||
|
||||
Reference in New Issue
Block a user