Ejemplo n.º 1
0
    def join(self, request, token):
        token = token.upper()
        student = get_object_or_404(Student, access_token=token)
        lesson = Room.objects.filter(group=student.group).last()
        if not lesson:
            return HttpResponseRedirect(redirect_to=limbo_url(token))

        bbb_api = BigBlueButtonAPI(lesson.server_node.hostname,
                                   lesson.server_node.api_secret)
        if not bbb_api.is_meeting_running(lesson.bbb_meeting_id):
            # TODO - soft delete?
            lesson.delete()
            return HttpResponseRedirect(redirect_to=limbo_url(token))

        try:
            # TODO - where do I take pass from?
            redirect_url = bbb_api.get_join_url(
                meeting_id=lesson.bbb_meeting_id,
                password=lesson.attendee_secret,
                join_as=student.display_name,
                assing_user_id=student.uuid,
            )
        except:
            # TODO - too broad
            return HttpResponseRedirect(redirect_to=limbo_url(token))

        return HttpResponseRedirect(redirect_to=redirect_url)
Ejemplo n.º 2
0
def get_group_active_meeting(group):
    room = Room.objects.filter(group=group).last()
    if room:
        server = room.server_node
        api = BigBlueButtonAPI(server.hostname, server.api_secret)
        if api.is_meeting_running(room.bbb_meeting_id):
            return room

    return None
Ejemplo n.º 3
0
def _get_or_create_room(group):
    """"Returns active room for a group or assigns new one."""
    room = group.last_meeting_room()

    # Room already exists, got to probe it
    if room:
        server = room.server_node
        api = BigBlueButtonAPI(server.hostname, server.api_secret)

        if api.is_meeting_running(room.bbb_meeting_id):
            logger.info(f'Meeting for group {group} already in progress.')
            return room
        else:
            # Room leftover, clean it from BBB and let assign new
            logger.info(f'Cleaning leftover room for group {group}')
            Room.objects.filter(id=room.id).delete()
            room = None

    # Room not found or not active, assign new from refreshed pool
    if not room:
        server = ServerNode.assign_server(group=group)
        room, _ = Room.objects.get_or_create(server_node=server, group=group)

    return room
Ejemplo n.º 4
0
 def test_is_meeting_running_with_unreachable_server_not_rises(self):
     """Unmocked, check behavior with non-existent server."""
     api = BigBlueButtonAPI(hostname='this.hostname.is.totally.fake', api_secret='dddd')
     self.assertFalse(api.is_meeting_running('fake_meeting_id'))