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)
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
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')
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
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')
def get_instance(self): return BigBlueButton(self.url, self.api_key)
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
def __init__(self, bbbUrl, bbbSecret): logging.info("setup BBB connection") self.bbb = BigBlueButton(bbbUrl, bbbSecret)