diff --git a/bigbluebutton/api/bigbluebutton.py b/bigbluebutton/api/bigbluebutton.py index 6871d4a6593b2fa81ad0e0c245f9242a6abd4320..99a47adf461fb56bc5c554d5330d2b9c5ded4ab1 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 b625553902d84b73a073339b3ad4168a43cf7603..402645afc3a6cdc02a4372b1c5efbaac02482239 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"