Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import json
from django import forms
from django.dispatch import receiver
from django.urls import resolve, reverse
from django.utils.translation import gettext_noop, ugettext_lazy as _
from i18nfield.strings import LazyI18nString
from pretix.base.settings import settings_hierarkey
from pretix.base.signals import (
order_modified,
order_placed,
)
from pretix.base.templatetags.rich_text import rich_text_snippet
from pretix.control.signals import nav_event_settings
from pretix.presale.signals import question_form_fields
from .tasks import keycloak_create_user
settings_hierarkey.add_default("keycloak_create_user_items", [], list)
settings_hierarkey.add_default("keycloak_create_user_authorization_token", "", str)
settings_hierarkey.add_default("keycloak_create_user_realm_url", "", str)
settings_hierarkey.add_default(
"keycloak_create_user_hint",
LazyI18nString.from_gettext(
gettext_noop("Your keycloak user will be created.")
),
LazyI18nString,
)
settings_hierarkey.add_default(
"keycloak_create_user_reason",
"",
LazyI18nString,
)
@receiver(question_form_fields, dispatch_uid="keycloak_create_user_questions")
def add_keycloak_username_question(sender, position, **kwargs):
if str(position.item.pk) not in sender.settings.get("keycloak_create_user_items"):
return {}
if (
not sender.settings.keycloak_create_user_authorization_token
and not sender.settings.keycloak_create_user_realm_url
):
return {}
return {
"keycloak_create_user_keycloak_username": forms.RegexField(
label=_("Username"),
required=False,
regex="[a-z0-9._=/-]+",
strip=True,
error_messages={
"invalid": _("Enter a valid username")
},
help_text=rich_text_snippet(sender.settings.keycloak_create_user_hint),
)
}
@receiver(order_placed, dispatch_uid="keycloak_create_user_order_placed")
@receiver(order_modified, dispatch_uid="keycloak_create_user_order_modified")
def keycloak_create_user_create_async(sender, order, **kwargs):
if (
not sender.settings.keycloak_create_user_authorization_token
and not sender.settings.keycloak_create_user_realm_url
):
return
for order_position in order.positions.all():
if str(order_position.item.pk) not in sender.settings.get(
"keycloak_create_user_items"
):
continue
if not order_position.meta_info_data.get("question_form_data", {}).get(
"keycloak_create_user_keycloak_username"
):
continue
keycloak_create_user.apply_async(
args=(
sender.pk,
order.pk,
order_position.pk
)
)
@receiver(nav_event_settings, dispatch_uid="keycloak_create_user_keycloak_username_nav_settings")
def navbar_settings(sender, request=None, **kwargs):
url = resolve(request.path_info)
return [
{
"label": _("Create User"),
"url": reverse(
"plugins:pretix_keycloak_create_user:settings",
kwargs={
"event": request.event.slug,
"organizer": request.organizer.slug,
},
),
"active": url.namespace == "plugins:pretix_keycloak_create_user"
and url.url_name == "settings",
}
]