Skip to content
Snippets Groups Projects
Commit 9af3979b authored by Luca's avatar Luca
Browse files

Check if username is already registered

parent 79919c90
No related branches found
No related tags found
No related merge requests found
Pipeline #148904 failed
import json import json
import requests
from django import forms from django import forms
from django.dispatch import receiver from django.dispatch import receiver
from django.urls import resolve, reverse from django.urls import resolve, reverse
...@@ -8,10 +9,13 @@ from pretix.base.settings import settings_hierarkey ...@@ -8,10 +9,13 @@ from pretix.base.settings import settings_hierarkey
from pretix.base.signals import ( from pretix.base.signals import (
order_modified, order_modified,
order_placed, order_placed,
validate_order,
) )
from pretix.base.templatetags.rich_text import rich_text_snippet from pretix.base.templatetags.rich_text import rich_text_snippet
from pretix.control.signals import nav_event_settings from pretix.control.signals import nav_event_settings
from pretix.presale.signals import question_form_fields from pretix.presale.signals import question_form_fields
from pretix.base.services.orders import OrderError
from .tasks import keycloak_create_user from .tasks import keycloak_create_user
...@@ -103,3 +107,47 @@ def navbar_settings(sender, request=None, **kwargs): ...@@ -103,3 +107,47 @@ def navbar_settings(sender, request=None, **kwargs):
and url.url_name == "settings", and url.url_name == "settings",
} }
] ]
@receiver(validate_order, dispatch_uid="keycloak_create_user_validate_order")
def validate_order(sender, positions, **kwargs):
if (
not sender.settings.keycloak_create_user_authorization_token
and not sender.settings.keycloak_create_user_realm_url
):
return
for order_position in 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
event = sender
server = event.settings.keycloak_create_user_realm_url
token = event.settings.keycloak_create_user_authorization_token
username = order_position.meta_info_data.get("question_form_data", {}).get(
"keycloak_create_user_keycloak_username"
)
response = requests.get(
"{}/users/count?username={}".format(
server,
username # TODO verify that this is not a security issue
),
headers={
"Authorization": "Bearer {}".format(token),
},
)
if response.status_code == 200:
if json.loads(response.text) > 0:
raise OrderError(
_("Username already taken. Please choose another username.")
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment