forked from CGM_Public/pretix_original
Make attendee_name accessible to secret generators
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import base64
|
import base64
|
||||||
|
import inspect
|
||||||
import struct
|
import struct
|
||||||
|
|
||||||
from cryptography.hazmat.backends.openssl.backend import Backend
|
from cryptography.hazmat.backends.openssl.backend import Backend
|
||||||
@@ -52,10 +53,10 @@ class BaseTicketSecretGenerator:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def generate_secret(self, item: Item, variation: ItemVariation = None, subevent: SubEvent = None,
|
def generate_secret(self, item: Item, variation: ItemVariation = None, subevent: SubEvent = None,
|
||||||
current_secret: str = None, force_invalidate=False) -> str:
|
attendee_name: str = None, current_secret: str = None, force_invalidate=False) -> str:
|
||||||
"""
|
"""
|
||||||
Generate a new secret for a ticket with product ``item``, variation ``variation``, subevent ``subevent``,
|
Generate a new secret for a ticket with product ``item``, variation ``variation``, subevent ``subevent``,
|
||||||
and the current secret ``current_secret`` (if any).
|
attendee name ``attendee_name`` (can be ``None``) and the current secret ``current_secret`` (if any).
|
||||||
|
|
||||||
The result must be a string that should only contain the characters ``A-Za-z0-9+/=``.
|
The result must be a string that should only contain the characters ``A-Za-z0-9+/=``.
|
||||||
|
|
||||||
@@ -70,6 +71,11 @@ class BaseTicketSecretGenerator:
|
|||||||
If ``force_invalidate`` is set to ``False`` and ``item``, ``variation`` and ``subevent`` have a different value
|
If ``force_invalidate`` is set to ``False`` and ``item``, ``variation`` and ``subevent`` have a different value
|
||||||
as when ``current_secret`` was generated, then this method MAY OR MAY NOT return ``current_secret`` unchanged,
|
as when ``current_secret`` was generated, then this method MAY OR MAY NOT return ``current_secret`` unchanged,
|
||||||
depending on the semantics of the method.
|
depending on the semantics of the method.
|
||||||
|
|
||||||
|
.. note:: While it is guaranteed that ``generate_secret`` and the revocation list process are called every
|
||||||
|
time the ``item``, ``variation``, or ``subevent`` parameters change, it is currently **NOT**
|
||||||
|
guaranteed that this process is triggered if the ``attendee_name`` parameter changes. You should
|
||||||
|
therefore not rely on this value for more than informational or debugging purposes.
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
@@ -80,7 +86,7 @@ class RandomTicketSecretGenerator(BaseTicketSecretGenerator):
|
|||||||
use_revocation_list = False
|
use_revocation_list = False
|
||||||
|
|
||||||
def generate_secret(self, item: Item, variation: ItemVariation = None, subevent: SubEvent = None,
|
def generate_secret(self, item: Item, variation: ItemVariation = None, subevent: SubEvent = None,
|
||||||
current_secret: str = None, force_invalidate=False):
|
attendee_name: str = None, current_secret: str = None, force_invalidate=False):
|
||||||
if current_secret and not force_invalidate:
|
if current_secret and not force_invalidate:
|
||||||
return current_secret
|
return current_secret
|
||||||
return get_random_string(
|
return get_random_string(
|
||||||
@@ -187,12 +193,17 @@ def assign_ticket_secret(event, position, force_invalidate_if_revokation_list_us
|
|||||||
gen = event.ticket_secret_generator
|
gen = event.ticket_secret_generator
|
||||||
if gen.use_revocation_list and force_invalidate_if_revokation_list_used:
|
if gen.use_revocation_list and force_invalidate_if_revokation_list_used:
|
||||||
force_invalidate = True
|
force_invalidate = True
|
||||||
|
|
||||||
|
kwargs = {}
|
||||||
|
if 'attendee_name' in inspect.signature(gen.generate_secret).parameters:
|
||||||
|
kwargs['attendee_name'] = position.attendee_name
|
||||||
secret = gen.generate_secret(
|
secret = gen.generate_secret(
|
||||||
item=position.item,
|
item=position.item,
|
||||||
variation=position.variation,
|
variation=position.variation,
|
||||||
subevent=position.subevent,
|
subevent=position.subevent,
|
||||||
current_secret=position.secret,
|
current_secret=position.secret,
|
||||||
force_invalidate=force_invalidate
|
force_invalidate=force_invalidate,
|
||||||
|
**kwargs
|
||||||
)
|
)
|
||||||
changed = position.secret != secret
|
changed = position.secret != secret
|
||||||
if position.secret and changed and gen.use_revocation_list:
|
if position.secret and changed and gen.use_revocation_list:
|
||||||
|
|||||||
Reference in New Issue
Block a user