From aee69f3b9636a3481fbc92d6dfdddf108ca783b9 Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Mon, 12 Oct 2020 17:09:13 +0200 Subject: [PATCH] Support passing redirect from join in handle_from_data --- bigbluebutton/api/bigbluebutton.py | 30 ++++++++++++++++++------------ bigbluebutton/django/views.py | 7 ++++++- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/bigbluebutton/api/bigbluebutton.py b/bigbluebutton/api/bigbluebutton.py index 6871d4a..99a47ad 100644 --- a/bigbluebutton/api/bigbluebutton.py +++ b/bigbluebutton/api/bigbluebutton.py @@ -637,19 +637,25 @@ class BigBlueButtonGroup: meeting = self._find_meeting(attrs["meetingID"], filter_meta) if meeting: kwargs = Attendee.get_kwargs_from_url_args(attrs, meeting) + + do_join = not (attrs.get("redirect", "true") == "true") + attendee = Attendee(meeting=meeting, **kwargs) - attendee.join() - - # We need to construct this one response manually, because for some inobvious - # reason the designers of the BBB API changed their minds and started using - # snake_case instead of dromedarCase - return { - "meeting_id": meeting.meeting_id, - "user_id": attendee.user_id, - "auth_token": attendee.auth_token, - "session_token": attendee.session_token, - "url": attendee.url, - } + res = attendee.join(do_join=do_join) + + if do_join: + # We need to construct this one response manually, because for some inobvious + # reason the designers of the BBB API changed their minds and started using + # snake_case instead of dromedarCase + return { + "meeting_id": meeting.meeting_id, + "user_id": attendee.user_id, + "auth_token": attendee.auth_token, + "session_token": attendee.session_token, + "url": attendee.url, + } + else: + return res else: raise KeyError("Meeting not found.") elif method == "isMeetingRunning": diff --git a/bigbluebutton/django/views.py b/bigbluebutton/django/views.py index b625553..402645a 100644 --- a/bigbluebutton/django/views.py +++ b/bigbluebutton/django/views.py @@ -3,6 +3,7 @@ from typing import Optional from django.contrib.sites.shortcuts import get_current_site from django.db.models import QuerySet from django.http import HttpRequest, HttpResponse +from django.shortcuts import redirect from django.views import View from defusedxml import minidom @@ -61,7 +62,11 @@ class APIView(View): res = api_token.server_group.api_group.handle_from_data( method, attrs, request.body, filter_meta ) - return self._success("", res) + + if isinstance(res, dict): + return self._success("", res) + elif isinstance(res, str): + return redirect(res) except NotImplementedError: return self._error( 404, "xInfraBlueUnknownAPICall", f"The API call {method} is not known" -- GitLab