diff --git a/pretix_matrix_inviter/forms.py b/pretix_matrix_inviter/forms.py index 679eb613592840ddeee37c4c3dfbd3fe3f9495b0..2268b80eacdfcc117ecb4e062c2e0ec1c8b59f65 100644 --- a/pretix_matrix_inviter/forms.py +++ b/pretix_matrix_inviter/forms.py @@ -23,7 +23,7 @@ class MatrixInviterForm(SettingsForm): ) matrix_inviter_matrix_room = forms.RegexField( label=_("Matrix room"), - regex="![^:]+:.+", + regex="(!|#)[^:]+:.+", strip=True, ) matrix_inviter_hint = I18nFormField( diff --git a/pretix_matrix_inviter/helpers.py b/pretix_matrix_inviter/helpers.py new file mode 100644 index 0000000000000000000000000000000000000000..4a7613c36bc9762256cabe25e591db1a2f1b8662 --- /dev/null +++ b/pretix_matrix_inviter/helpers.py @@ -0,0 +1,20 @@ +import requests +from urllib.parse import quote as url_quote + + +def matrix_room_id(server, room_id_or_alias): + if room_id_or_alias.startswith("!"): + return room_id_or_alias + else: + return matrix_room_id_from_alias(server, room_id_or_alias) + + +def matrix_room_id_from_alias(server, alias): + r = requests.get( + "https://{}/_matrix/client/v3/directory/room/{}".format( + url_quote(server), + url_quote(alias), + ), + ) + + return r.json().get("room_id") diff --git a/pretix_matrix_inviter/tasks.py b/pretix_matrix_inviter/tasks.py index e1af05dd2f85b370835560a89672cdcb64356595..92681caf3e600a17906cacf16b024307278cf0a9 100644 --- a/pretix_matrix_inviter/tasks.py +++ b/pretix_matrix_inviter/tasks.py @@ -6,6 +6,8 @@ from pretix.base.services.tasks import TransactionAwareTask from pretix.celery_app import app from urllib.parse import quote as url_quote +from .helpers import matrix_room_id + logger = logging.getLogger(__name__) @@ -30,7 +32,9 @@ def matrix_inviter_invite( event = Event.objects.get(pk=event) order = Order.objects.get(pk=order) - room_matrix_id = event.settings.matrix_inviter_matrix_room + server = event.settings.matrix_inviter_matrix_server + token = event.settings.matrix_inviter_authorization_token + room_id = matrix_room_id(server, event.settings.matrix_inviter_matrix_room) payload = {"user_id": user_matrix_id} if invitation_reason: payload["reason"] = invitation_reason @@ -38,13 +42,11 @@ def matrix_inviter_invite( try: r = requests.post( "https://{}/_matrix/client/v3/rooms/{}/invite".format( - url_quote(event.settings.matrix_inviter_matrix_server), - url_quote(room_matrix_id), + url_quote(server), + url_quote(room_id), ), headers={ - "Authorization": "Bearer {}".format( - event.settings.matrix_inviter_authorization_token - ), + "Authorization": "Bearer {}".format(token), }, json=payload, ) @@ -55,7 +57,7 @@ def matrix_inviter_invite( "pretix_matrix_inviter.error", data={ "matrix_id": user_matrix_id, - "matrix_room": room_matrix_id, + "matrix_room": room_id, "error": "HTTP Code {} ({})".format( r.status_code, r.json()["error"] ), @@ -73,7 +75,7 @@ def matrix_inviter_invite( "pretix_matrix_inviter.error", data={ "matrix_id": user_matrix_id, - "matrix_room": room_matrix_id, + "matrix_room": room_id, "error": "HTTP Code {}".format(r.status_code), }, ) @@ -83,6 +85,6 @@ def matrix_inviter_invite( "pretix_matrix_inviter.invite_sent", data={ "matrix_id": user_matrix_id, - "matrix_room": room_matrix_id, + "matrix_room": room_id, }, )