Example #1
0
def join_room():
    """View to let user join a virtual room"""

    form = RoomForm()

    # if the form is submitted and valid
    if form.validate_on_submit():
        roomId = form.roomId.data.strip()
        password = form.password.data
        username = form.username.data.strip().replace(" ", "_")

        b = BigBlueButton(BBB_SERVER_URL, BBB_SERVER_SECRET)

        r = b.is_meeting_running(roomId)

        active_room = json.loads(r['xml']['running'].lower())

        # check if the meeting exists
        if not active_room:
            return render_template('conference/join_conference.html',
                                   form=form,
                                   existingId=True)
        else:
            # get room url
            room_url = b.get_join_meeting_url(username, roomId, password)

            # redirect to the room
            return redirect(room_url)

    return render_template('conference/join_conference.html', form=form)
Example #2
0
 async def execute_request():
     b = BigBlueButton(server.url, server.secret)
     try:
         b.get_meeting_info(meeting_id)
     except Exception:
         await asyncio.sleep(0.01)
         return False
     await asyncio.sleep(0.01)
     return True
Example #3
0
def create_room():
    """View to let user create a virtual room"""

    if current_user.is_authenticated:
        if ('admin' in current_user.roles) | ('roomCreator'
                                              in current_user.roles):
            form = RoomForm()

            # if the form is submitted and valid
            if form.validate_on_submit():
                roomId = form.roomId.data.strip()
                password = form.password.data
                username = form.username.data.strip().replace(" ", "_")
                modPassword = secrets.token_urlsafe(64)

                b = BigBlueButton(BBB_SERVER_URL, BBB_SERVER_SECRET)

                # params
                dict = {
                    'name': username,
                    'attendeePW': password,
                    'moderatorPW': modPassword,
                    'record': True
                }

                if os.getenv('CURRENT_HOST'):
                    dict['logoutURL'] = os.getenv('CURRENT_HOST')

                try:
                    # use create meeting
                    b.create_meeting(roomId, params=dict)
                except BBBException:
                    return render_template('conference/create_conference.html',
                                           form=form,
                                           existingId=True)

                # get room url
                room_url = b.get_join_meeting_url(username, roomId,
                                                  modPassword)

                # redirect to the created room
                return redirect(room_url)

            return render_template('conference/create_conference.html',
                                   form=form)
        else:
            return render_template('conference/info_create.html')
    else:
        return render_template('conference/info_create.html')
Example #4
0
 def init_bbb(self, server):
     servers = {}
     res = self.r.get("server:{}".format(server))
     if res:
         servers[server] = json.loads(res)
         BBB_URL = servers[server]['BBB_URL']
         BBB_SECRET = servers[server]['BBB_SECRET']
         self.bbb = BigBlueButton(BBB_URL, BBB_SECRET)
         self.bbbUrl = bbbUtil.UrlBuilder(BBB_URL, BBB_SECRET)
         self.logger.debug("connected to bbb server: {}".format(server))
         return True
     else:
         self.logger.error(
             "could not connect to bbb server: {}".format(server))
         return False
Example #5
0
    def post(self, request, cid="", *args, **kwargs):
        try:
            campaign = CampaignModel.objects.get(id=cid)
        except CampaignModel.DoesNotExist:
            return Http404
        try:
            account = AccountModel.objects.get(user__username=request.user)
        except AccountModel.DoesNotExist:
            return Http404

        bbb = BigBlueButton(settings.BBB_HOST, settings.BBB_SECRET)
        # TODO: INSECURE AS SHIT
        attendee = hashlib.md5(
            (campaign.name + "mod").encode("utf-8")).hexdigest().replace(
                "&", "-")
        moderator = hashlib.md5(
            (campaign.name + "att").encode("utf-8")).hexdigest().replace(
                "&", "-")
        meeting_id = hashlib.md5(
            campaign.name.encode("utf-8")).hexdigest().replace("&", "-")

        try:
            bbb.create_meeting(meeting_id,
                               params={
                                   "attendeePW": attendee,
                                   "moderatorPW": moderator
                               })
        except Exception:
            pass

        is_moderator = request.user.id in [
            x.user.id for x in campaign.game_master.all()
        ] or request.user.is_superuser
        url = bbb.get_join_meeting_url(request.POST["name"], meeting_id,
                                       moderator if is_moderator else attendee)
        return redirect(url)
                    help="attendee password (required to create meetings)")
parser.add_argument("-M",
                    "--moderatorPassword",
                    help="moderator password (required to create a meeting)")
parser.add_argument("-T",
                    "--meetingTitle",
                    help="meeting title (required to create a meeting)")
parser.add_argument("-u",
                    "--user",
                    help="Name to join the meeting",
                    default="Live")
parser.add_argument("-t", "--target", help="RTMP Streaming URL")
parser.add_argument("-c", "--chat", help="Show the chat", action="store_true")
args = parser.parse_args()

bbb = BigBlueButton(args.server, args.secret)


def set_up():
    global browser

    options = Options()
    options.add_argument('--disable-infobars')
    options.add_argument('--no-sandbox')
    options.add_argument('--kiosk')
    options.add_argument('--window-size=1920,1080')
    options.add_argument('--window-position=0,0')
    options.add_experimental_option("excludeSwitches", ['enable-automation'])
    options.add_argument('--shm-size=1gb')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--start-fullscreen')
Example #7
0
 def get_instance(self):
     return BigBlueButton(self.url, self.api_key)
Example #8
0
from django.conf import settings

from api.models import Chat

from bigbluebutton_api_python import BigBlueButton


bbb_api = BigBlueButton(settings.BBB_URL, settings.BBB_SECRET)


class State:
    """
    A cache for the Chat model, to decrease db load
    """

    instance = None

    def __init__(self):
        self.internal = {}
        """Mapping from internal meeting id to chat object"""

        self.external = {}
        """Mapping from external meeting id to chat object"""

        for chat in Chat.objects.all():
            self._add(chat)

    def _add(self, chat):
        self.external[chat.external_meeting_id] = chat
        self.internal[chat.internal_meeting_id] = chat
Example #9
0
 def __init__(self, bbbUrl, bbbSecret):
     logging.info("setup BBB connection")
     self.bbb = BigBlueButton(bbbUrl, bbbSecret)