Code Monkey home page Code Monkey logo

bigbluebutton_rails's Introduction

BigBlueButton on Rails

BigBlueButton integration for Ruby on Rails 4.

Features:

  • Allows multiple servers and multiple conference rooms.
  • Full API access using bigbluebutton-api-ruby.
  • Easy way to join conferences: simply create a room and call the join action.
  • Easy integration with authentication and authorization mechanisms, such as Devise and CanCan.
  • Support for recordings: meetings can be recorded, the list of recordings retrieved and recordings can be played.
  • Possibility to create private rooms, that require a password to join.
  • Deals with visitors (users that are not logged), allowing (or forbidding) them to join rooms.
  • Uses static meeting IDs generated as a globally unique identifier (e.g. 36mskja87-029i-lsk9-b96e-98278407e145-1365703324).
  • Stores a registry of meetings that happened and associates them with the recording that was generated for it (if any).
  • Allows rooms to be configured dynamically using the {config.xml}[https://code.google.com/p/bigbluebutton/wiki/ClientConfigura tion] feature.
  • Automatic detection of the user-agent to automatically trigger the mobile client when joining a conference from a mobile device.

Possible future features:

  • Limit the number of users per room and rooms per server.
  • Server administration (use bbb-conf, etc).
  • Pre-upload of slides.
  • See TODO.md.

Supported versions

This gem is mainly used with Mconf-Web. You can always use it as a reference for verions of dependencies and examples of how to use the gem.

BigBlueButton

The current version of this gem supports all the following versions of BigBlueButton:

  • 1.0
  • 0.9
  • 0.81
  • 0.8

Ruby

Tested in rubies:

Requires ruby >= 1.9.3.

  • ruby-2.3 recommended
  • ruby-2.2
  • ruby-2.1
  • ruby-1.9.3 (last tested with p484)

Use these versions to be sure it will work. Other patches of these versions should work as well.

Rails

To be used with Rails 4 only. Currently tested with Rails 4.1.

Version 1.4.0 was the last one to support Rails 3.2. To use it, use the tag v1.4.0.

Database

We recommend the use of MySQL in your application, since this gem is developed and tested using it.

Upgrade

When updating the gem to a newer version, there are usually extra steps you'll have to take in order to have the database migrated, the dependencies updated, and others. These steps are described in our wiki. See:

Installation

You can install the latest version of BigbluebuttonRails using RubyGems:

gem install bigbluebutton_rails

Or simply add the following line in your Gemfile:

gem "bigbluebutton_rails"

After installing, you need to run the generator:

rails generate bigbluebutton_rails:install

This generator will create the files needed to setup the gem in your application. You should take some time to open all the files generated and analyze them.

By default the gem will use the views it provides, but it is strongly recommended that you adapt them for your needs! The views provided are just an example of how they can be implemented in your application and they depend on jQuery (use the gem jquery-rails) and on a css file provided by this gem. You can easily generate the views and the css file in your application to later customize them with:

rails generate bigbluebutton_rails:views

To now more about the generators see How to: Generators

Dependencies

Since version 1.4.0, this gem depends on Resque, and since 2.0.0 it also uses Resque-scheduler.

These gems are used to run background jobs. The ones we have right now are: update the list of recordings, check for meetings that started or ended to update the database.

The gem already requires all dependencies, so you don't have to include them in your Gemfile. But you need to configure your application to use Resque and Resque-scheduler.

To do so, copy the following files to your application:

  • config/resque/resque.rake to your application's lib/tasks/;
  • config/resque/workers_schedule.yml to your application's config/.

The first is a rake task to trigger Resque and Resque-scheduler. The second is the scheduling of tasks used by Resque-scheduler. If you already use these gems in your application, you probably already have these files. So you can just merge them together.

To run Resque and Resque-scheduler you will need to run the take tasks:

QUEUE="bigbluebutton_rails" rake resque:work
rake resque:scheduler

These gems use redis to store their data, so you will need it in your server. If you're on Ubuntu, you can install it with:

apt-get install redis-server

Please refer to the documentation of Resque and Resque-scheduler to learn more about them and how to use them in development or production.

Routes

The routes to BigbluebuttonRails can be generated with the helper bigbluebutton_routes. See the example below:

bigbluebutton_routes :default

It will generate the default routes. You need to call it at least once and the routes will be scoped with 'bigbluebutton'. They will look like:

/bigbluebutton/servers
/bigbluebutton/servers/my-server/new
/bigbluebutton/servers/my-server/rooms
/bigbluebutton/rooms
/bigbluebutton/rooms/my-room/join

You can also make the routes use custom controllers:

bigbluebutton_routes :default, :controllers => {
  :servers => 'custom_servers',
  :rooms => 'custom_rooms',
  :recordings => 'custom_recordings'
}

To generate routes for a single controller:

bigbluebutton_routes :default, :only => 'servers'

You may also want shorter routes to access conference rooms. For that, use the option room_matchers:

resources :users do
  bigbluebutton_routes :room_matchers
end

It creates routes to the actions used to access a conference room, so you can allow access to webconference rooms using URLs such as:

http://myserver.com/my-community/room-name/join
http://myserver.com/user-name/room-name/join

For more information see:

Basic configuration

There are some basic assumptions made by BigbluebuttonRails:

  • You have a method called current_user that returns the current user;
  • The current_user has an attribute or method called "name" that returns his/her fullname and an attribute or method "id" that returns the ID.

If you don't, you can change this behaviour easily, keep reading.

BigbluebuttonRails uses the methods bigbluebutton_user and bigbluebutton_role(room) to get the current user and to get the permission that the current user has in the room, respectively. These methods are defined in {lib/bigbluebutton_rails/controller_methods.rb}[https://github.com/mconf/bigb luebutton_rails/blob/master/lib/bigbluebutton_rails/controller_methods.rb] and you can reimplement them in your application controller to change their behaviour as shown below.

class ApplicationController < ActionController::Base

  # overriding bigbluebutton_rails function
  def bigbluebutton_user
    current_user && current_user.is_a?(User) ? current_user : nil
  end

  def bigbluebutton_role(room)
    ...
  end

end

Updating the recordings

Since this task can consume quite some time if your server has a lot of recordings, it is recommended to run it periodically in the background. It is already done by the application if you are running Resque and Resque-scheduler properly. But this gem also provides a rake task to fetch the recordings from the web conference servers and update the application database.

The command below will fetch recordings for all servers and update the database with all recordings found:

rake bigbluebutton_rails:recordings:update

Updating the list of meetings

Meetings (BigbluebuttonMeeting models) in BigbluebuttonRails are instances of meetings that were held in web conference rooms. A meeting is created whenever the application detects that a user joined a room and that he's the first user. Meetings are never removed, they are kept as a registry of what happened in the web conference servers connected to BigbluebuttonRails.

The creating of these objects is done in background using a gem called resque. Whenever a user clicks in the button to join a meeting, a resque worker is scheduled. This worker will wait for a while until the meeting is created and running in the web conference server, and will then create the corresponding BigbluebuttonMeeting object.

To keep track of meetings, you have to run the resque workers (this is needed both in development and in production):

rake resque:work QUEUE='bigbluebutton_rails'

The list of meetings is also periodically synchronized using Resque-scheduler (see the sections above).

Associating rooms and servers

Rooms must be associated with a server to function. When a meeting is created, it is created in the server that's associated with the room. By default, this gem automatically selects a server if one is needed and the room has no server yet.

To change this behavior, applications can override the configuration BigbluebuttonRails.configuration.select_server. This attribute receives a function that will be called inside all methods that trigger API calls, methods that need a server to work properly. It receives a parameter that indicates which API call will be sent to the server and expects the function to return a BigbluebuttonServer.

One common use would be to override this method to always select a new server when a meeting is created (when the argument received is :create). This would allow the implementation of a simple load balancing mechanism.

To configure it, add a code like the one below to one initializer in your application:

BigbluebuttonRails.configure do |config|
  config.select_server = Proc.new do |room, api_method=nil|
    if room.name == 'special-room'
      BigbluebuttonServer.find_by(name: 'special-server')
    else
      BigbluebuttonServer.first
    end
  end
end

Example application

If you need more help to set up the gem or just want to see an example of it working, check out the test application at spec/rails_app/!

See also

Contributing/Development

To setup an environment, first copy spec/rails_app/config/database.yml.example to spec/rails_app/config/database.yml. It uses MySQL since this is the database recommended for the applications that use this gem.

You can start the example application (from spec/rails_app) with:

docker-compose up dev

It will probably not work straight away, because you need to setup the application first. Do so with:

docker-compose run dev rake rails_app:install
docker-compose run dev rake rails_app:db

# optionally:
docker-compose run dev rake rails_app:populate # to create fake data

Then try the up dev command again and it should open up a server. Access localhost:3000 to see it.

To run the tests the process is exactly the same, just replace the dev target with test:

docker-compose up test

If you're adding migrations to the gem, test them with:

docker-compose run test rake spec:migrations

If you need to keep track of meetings, run the resque workers with:

docker-compose run dev rake resque:work QUEUE='bigbluebutton_rails'

If you want your code to be integrated in this repository, please fork it, create a branch with your modifications and submit a pull request.

Test Coverage

Coverage is analyzed by default when you run:

docker-compose up test

Run it and look at the file coverage/index.html.

Best Practices

We use the gem rails_best_practices to get some nice tips on how to improve the code.

Run:

docker-compose run dev rake best_practices

And look at the file rails_best_practices_output.html to see the tips.

License

Distributed under The MIT License (MIT). See LICENSE.

Contact

This project is developed as part of Mconf (http://mconf.org).

Mailing list:

Contact:

bigbluebutton_rails's People

Contributors

amreis avatar caetanojs avatar christopherpottesc avatar cristiansilvagrosseli avatar daronco avatar fbottin avatar gmiotto avatar gscariott avatar joaocaralmsilva avatar leonardoeich avatar lfzawacki avatar lucas-schell avatar merqlove avatar mktn87 avatar mswlandi avatar orthographic-pedant avatar pacluke avatar rafafp avatar tcaddy avatar vitoriamr avatar vitorvanacor avatar wpramio avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bigbluebutton_rails's Issues

Activity monitor refresh not working


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 158, http://dev.mconf.org/redmine/issues/158

Original Assignee: Fernando Bottin


@google user: [email protected]@

The activity monitor (for a BBB server) renders a countdown to refresh the page after 30 seconds, but this refresh is not working as expected.

The refresh should only render the partial that contains the list of active rooms, but instead it is rendering the entire page. This is also causing the effect of "a page inside a page", since the refreshed content is rendered inside a div in the first page.

Rooms model's method select_server gives error on postgres

Just to let you know this method on postgres gives error

This method can be overridden to change the way the server is selected

before a room is created

This one selects the server with less rooms in it

def select_server
BigbluebuttonServer.
select("bigbluebutton_servers.*, count(bigbluebutton_rooms.id) as room_count").
joins(:rooms).group(:server_id).order("room_count ASC").first
end

Error:
ActiveRecord::StatementInvalid (PG::Error: ERROR: column "bigbluebutton_servers.id" must appear in the GROUP BY clause or be used in an aggregate function

Add :password in bigbluebutton_role and block access


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 148, http://dev.mconf.org/redmine/issues/148

Original Assignee: Leonardo Daronco


@google user: [email protected]@

Add the possibility to return :password in the bigbluebutton_role(room) method. Returning this would require a password to join the room (renders the invite view, requires a password).

This is currently done returning "nil", so the "nil" return should be changed to block any access to the room. Returning it represents that the room cannot be accessed by the current user, not even with a password.

Support to BBB 0.8 in bigbluebutton_rails

QR code in join_mobile does not check for permissions


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 149, http://dev.mconf.org/redmine/issues/149


@google user: [email protected]@

The QR code in the view "join_mobile" points directly to the BBB API. It should point to an internal action, such as #join, to be able to check if the user has permissions to join the conference or not.

For now, anyone that has access to the QR code will be able to join the conference.

Idea:

For QR code:

  • create a temporary random hash and attach it as a parameter in the #join URL (e.g. "server.com/room/1/join?hash=879617lkahs9087").
  • when someone scans it, the server receives the request, searches for the hash and then finds the user that's accessing the room, so it can check for his permissions.

For the link with "bigbluebutton://":

  • the user in the mobile devise will click in the link, so his permissions were already checked.
  • we just need to add some parameter to the URL to indicate that the response should use the protocol "bigbluebutton://" instead of HTTP. Something like: "server.com/room/1/join?mobile=1"

Add the website domain to logout_url before creating a meeting


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 155, http://dev.mconf.org/redmine/issues/155

Original Assignee: Leonardo Daronco


@google user: [email protected]@

If a BigbluebuttonRoom is being created in the BBB server and it's logout_url is not a complete URL, it should be automatically completed before creating the room.

This way the user can set partial paths like "/space/mconf/" in the logout_url and the meeting will actually be created in the BBB server with a valid logout_url e.g. ""http://mconfweb.inf.ufrgs.br/space/mconf/" rel="nofollow":http://mconfweb.inf.ufrgs.br/space/mconf/ ".

Add the "invite" feature


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 146, http://dev.mconf.org/redmine/issues/146

Original Assignee: Leonardo Daronco


@google user: [email protected]@

A room should have an action such as "room/invite" to be used to invite someone to the conference.

The invited can be registered or not.
If the invited is logged, it acts like join.
If the invited is not logged, should ask for a name and, optionally, a password (if the room is private).

Consider storing all fetched attributes in the DB


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 154, http://dev.mconf.org/redmine/issues/154


@google user: [email protected]@

Consider if all the information fetched from a BBB server should be saved in the DB or not. Some of this information is stored only in instance variables in the models, so they are lost between requests. Saving them is the only way to fully compare models between two requests.

  • For rooms the attributes are: running, participant_count, moderator_count, attendees, has_been_forcibly_ended, start_time, end_time.
  • Servers have only the attribute "meetings", but it is already saved as BigbluebuttonRoom's models.

There are some complications in saving "attendees", since they are objects with their own attributes. It would require another table for attendees and the setting up of the relationship between attendees and rooms.

Disable auto-saving new meetings fetched


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 156, http://dev.mconf.org/redmine/issues/156

Original Assignee: Leonardo Daronco


@google user: [email protected]@

Auto-saving every room fetched is generating a lot of unwanted rooms in the DB, due to randomize_meetingid being enabled. Example:

  • The user joins a room called "my-room" that has randomize_meetingid enabled
    • The room is created in the BBB server with a random meeting_id (say "my-room-1234")
  • The user leaves and the meeting is finished
  • The user joins the room "my-room" again
    • The room is created (again) in the BBB server with a new random meeting_id ("my-room-9876")

Only 1 room was created, but there will be 2 rooms fetched from the BBB server: "my-room-1234" (not running) and "my-room-9876" (running). The second ("my-room-9876") is the current meeting_id of "my-room", so there's no need to created a new record. But the first room "my-room-1234" has no related record in the DB, so it will generate a new record.

After some time this will generate several useless and unwanted rooms in the DB.

Disable auto-saving new meetings fetched


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 156, http://dev.mconf.org/redmine/issues/156

Original Assignee: Leonardo Daronco


@google user: [email protected]@

Auto-saving every room fetched is generating a lot of unwanted rooms in the DB, due to randomize_meetingid being enabled. Example:

  • The user joins a room called "my-room" that has randomize_meetingid enabled
    • The room is created in the BBB server with a random meeting_id (say "my-room-1234")
  • The user leaves and the meeting is finished
  • The user joins the room "my-room" again
    • The room is created (again) in the BBB server with a new random meeting_id ("my-room-9876")

Only 1 room was created, but there will be 2 rooms fetched from the BBB server: "my-room-1234" (not running) and "my-room-9876" (running). The second ("my-room-9876") is the current meeting_id of "my-room", so there's no need to created a new record. But the first room "my-room-1234" has no related record in the DB, so it will generate a new record.

After some time this will generate several useless and unwanted rooms in the DB.

Activity monitor refresh not working


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 158, http://dev.mconf.org/redmine/issues/158

Original Assignee: Fernando Bottin


@google user: [email protected]@

The activity monitor (for a BBB server) renders a countdown to refresh the page after 30 seconds, but this refresh is not working as expected.

The refresh should only render the partial that contains the list of active rooms, but instead it is rendering the entire page. This is also causing the effect of "a page inside a page", since the refreshed content is rendered inside a div in the first page.

Fallback webconf server


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 419, http://dev.mconf.org/redmine/issues/419
Original Date: 2012-09-18


Implement a way to have a fallback web conference server in case the target server fails. This options should be configurable by the application that's using the gem.

Add :password in bigbluebutton_role and block access


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 148, http://dev.mconf.org/redmine/issues/148

Original Assignee: Leonardo Daronco


@google user: [email protected]@

Add the possibility to return :password in the bigbluebutton_role(room) method. Returning this would require a password to join the room (renders the invite view, requires a password).

This is currently done returning "nil", so the "nil" return should be changed to block any access to the room. Returning it represents that the room cannot be accessed by the current user, not even with a password.

Show links with "bigbluebutton://" when the user is in a mobile device


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 147, http://dev.mconf.org/redmine/issues/147

Original Assignee: Leonardo Daronco


@google user: [email protected]@

All links to the BBB API use the HTTP protocol.
When a mobile client is accessing the website, the links should use "bigbluebutton://" instead of "http:// so that the BBB session will be opened in the native client and not in the browser.

Only links to API calls need to be changed. I believe that only bigbluebutton_rails will be affected, but maybe mconf-web will need some modifications as well.

Add the website domain to logout_url before creating a meeting


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 155, http://dev.mconf.org/redmine/issues/155

Original Assignee: Leonardo Daronco


@google user: [email protected]@

If a BigbluebuttonRoom is being created in the BBB server and it's logout_url is not a complete URL, it should be automatically completed before creating the room.

This way the user can set partial paths like "/space/mconf/" in the logout_url and the meeting will actually be created in the BBB server with a valid logout_url e.g. ""http://mconfweb.inf.ufrgs.br/space/mconf/" rel="nofollow":http://mconfweb.inf.ufrgs.br/space/mconf/ ".

Consider storing all fetched attributes in the DB


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 154, http://dev.mconf.org/redmine/issues/154


@google user: [email protected]@

Consider if all the information fetched from a BBB server should be saved in the DB or not. Some of this information is stored only in instance variables in the models, so they are lost between requests. Saving them is the only way to fully compare models between two requests.

  • For rooms the attributes are: running, participant_count, moderator_count, attendees, has_been_forcibly_ended, start_time, end_time.
  • Servers have only the attribute "meetings", but it is already saved as BigbluebuttonRoom's models.

There are some complications in saving "attendees", since they are objects with their own attributes. It would require another table for attendees and the setting up of the relationship between attendees and rooms.

Rails 4.2.0?

This is probably not the place for questions. Is there a mailing list for asking questions?

It mentioned in manual that only Rails 4 supported. Is it including Rails 4.2.0? Is Ruby 2.2.3 OK as well? Thanks.

Rails 3 BigbluebuttonRails::ServerRequired in Bigbluebutton

Hi,

Iam getting the following error when I used below gem

" gem "bigbluebutton_rails","~> 1.3.0" "

BigbluebuttonRails::ServerRequired in Bigbluebutton
translation missing: en.bigbluebutton_rails.rooms.errors.server.not_set

bigbluebutton_rails (1.3.0) app/models/bigbluebutton_room.rb:263:in require_server' bigbluebutton_rails (1.3.0) app/models/bigbluebutton_room.rb:115:infetch_is_running?'
bigbluebutton_rails (1.3.0) app/controllers/bigbluebutton/rooms_controller.rb:327:in join_internal' bigbluebutton_rails (1.3.0) app/controllers/bigbluebutton/rooms_controller.rb:121:injoin'
actionpack (3.2.13) lib/action_controller/metal/implicit_render.rb:4:in send_action' actionpack (3.2.13) lib/abstract_controller/base.rb:167:inprocess_action'
actionpack (3.2.13) lib/action_controller/metal/rendering.rb:10:in process_action' actionpack (3.2.13) lib/abstract_controller/callbacks.rb:18:inblock in process_action'
activesupport (3.2.13) lib/active_support/callbacks.rb:502:in `_run__114511248122689171__process_action__4511386445062351138__callbacks'

How to create new servers?

Hello,

I integrated the bigbluebutton into my rails app with following gem

gem 'bigbluebutton_rails', github: 'mconf/bigbluebutton_rails'

I get all routes and views but when i create a new server it giving me an error like below

PG::UndefinedTable: ERROR: relation "bigbluebutton_server_configs" does not exist LINE 5: WHERE a.attrelid = '"bigbluebutton_server_con... ^ : SELECT a.attname, format_type(a.atttypid, a.atttypmod), pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = '"bigbluebutton_server_configs"'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum

It may be with database tables.
How can i solve this problem?

Help me!
bbb

Add the join_mobile icon in the invite view


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 150, http://dev.mconf.org/redmine/issues/150


@google user: [email protected]@

The invite view should show the join_mobile icon, so that unregistered users can see the QR code and mobile link to join the conference.

It has to be considered that the user must type a user name and/or a password before he can join the conference. So the join_mobile should consider it and only show the QR code and link when everything is properly filled and validated.

security check

Hello ,

I have created a Server and then room
but when i am trying to join the room it giving me error message
Error:
"You did not pass the checksum security check, messageKey: checksumError"

can any body help and let me know what am i doing wrong

License missing from gemspec

RubyGems.org doesn't report a license for your gem. This is because it is not specified in the gemspec of your last release.

via e.g.

spec.license = 'MIT'
# or
spec.licenses = ['MIT', 'GPL-2']

Including a license in your gemspec is an easy way for rubygems.org and other tools to check how your gem is licensed. As you can image, scanning your repository for a LICENSE file or parsing the README, and then attempting to identify the license or licenses is much more difficult and more error prone. So, even for projects that already specify a license, including a license in your gemspec is a good practice. See, for example, how rubygems.org uses the gemspec to display the rails gem license.

There is even a License Finder gem to help companies/individuals ensure all gems they use meet their licensing needs. This tool depends on license information being available in the gemspec. This is an important enough issue that even Bundler now generates gems with a default 'MIT' license.

I hope you'll consider specifying a license in your gemspec. If not, please just close the issue with a nice message. In either case, I'll follow up. Thanks for your time!

Appendix:

If you need help choosing a license (sorry, I haven't checked your readme or looked for a license file), GitHub has created a license picker tool. Code without a license specified defaults to 'All rights reserved'-- denying others all rights to use of the code.
Here's a list of the license names I've found and their frequencies

p.s. In case you're wondering how I found you and why I made this issue, it's because I'm collecting stats on gems (I was originally looking for download data) and decided to collect license metadata,too, and make issues for gemspecs not specifying a license as a public service :). See the previous link or my blog post aobut this project for more information.

Problems for bigbluebutton_rails when meetings are created from another system


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 153, http://dev.mconf.org/redmine/issues/153


@google user: [email protected]@

This ticket was created to keep track of potencial problems for bigbluebutton_rails when another system is also used to create/manage BBB meetings.

When the list of meetings is fetched from a BBB server, any meeting that is not yet in the database will be created and saved. If the room is already in the DB, its attributes will be updated. See "02b472f" rel="nofollow":02b472f

If the meeting was not in the DB it means that it was created from another application (BBB demos, Android client, etc). This raises two issues:

  • Since we didn't create the meeting, we don't have all the parameters passed in the creation. Unfortunately there are some parameters you can't access through the API after creating a meeting. So there will probably be inconsistencies in these parameters between the meeting in the DB and the meeting running in the server. These parameters are:
    • welcome (the welcome message)
    • voiceBridge
    • logoutURL
    • maxParticipants
  • Adding or updating this meeting in the DB might result in conflicts with already existent meetings.

Random meetingID for BBB rooms


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 140, http://dev.mconf.org/redmine/issues/140

Original Assignee: Leonardo Daronco


@google user: [email protected]@

Generate random meetingIDs when creating a new BBB room.

This can eliminate the problem of having to wait for a timeout to be able to create a meeting after it was ended forcibly (see ["http://code.google.com/p/bigbluebutton/wiki/API#End_Meeting_(end)])" rel="nofollow":http://code.google.com/p/bigbluebutton/wiki/API#End_Meeting_(end)]) .

Dynamically choose the server when a meeting is started


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 160, http://dev.mconf.org/redmine/issues/160

Original Assignee: Leonardo Daronco


@google user: [email protected]@

Currently all webconference rooms are associated to one webconference server when they are created and this may never change.

When a user is about to start a meeting, the server where the conference will be created should be selected dynamically. The criteria to decide the target server we still don't know, but for now bigbluebutton_rails should provide the app an easy way to select the server every time a meeting is about to be created.

Servers and rooms may be decoupled (rooms can exist without a server).

Define IDs as strings, not numbers


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 139, http://dev.mconf.org/redmine/issues/139

Original Assignee: Leonardo Daronco


@google user: [email protected]@

Servers and rooms should be identified by strings, not numbers, when refered to in URLs.

For example:
/bigbluebutton/server/my-server/room/first-room
And not:
/bigbluebutton/server/1/room/2

Both methods should coexist. The user should be able to easily choose the method he wants to use.

Add the join_mobile icon in the invite view


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 150, http://dev.mconf.org/redmine/issues/150


@google user: [email protected]@

The invite view should show the join_mobile icon, so that unregistered users can see the QR code and mobile link to join the conference.

It has to be considered that the user must type a user name and/or a password before he can join the conference. So the join_mobile should consider it and only show the QR code and link when everything is properly filled and validated.

Problems for bigbluebutton_rails when meetings are created from another system


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 153, http://dev.mconf.org/redmine/issues/153


@google user: [email protected]@

This ticket was created to keep track of potencial problems for bigbluebutton_rails when another system is also used to create/manage BBB meetings.

When the list of meetings is fetched from a BBB server, any meeting that is not yet in the database will be created and saved. If the room is already in the DB, its attributes will be updated. See "02b472f" rel="nofollow":02b472f

If the meeting was not in the DB it means that it was created from another application (BBB demos, Android client, etc). This raises two issues:

  • Since we didn't create the meeting, we don't have all the parameters passed in the creation. Unfortunately there are some parameters you can't access through the API after creating a meeting. So there will probably be inconsistencies in these parameters between the meeting in the DB and the meeting running in the server. These parameters are:
    • welcome (the welcome message)
    • voiceBridge
    • logoutURL
    • maxParticipants
  • Adding or updating this meeting in the DB might result in conflicts with already existent meetings.

Update models after API requests


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 144, http://dev.mconf.org/redmine/issues/144

Original Assignee: Leonardo Daronco


@google user: [email protected]@

The API call "create" has several optional parameters. Some of them are automatically generated by BBB if not informed in the request and are returned in the response.

This type of response should be parsed to updated attributes in the models.

Example: update attendee_password and moderator_password after calling "create"

Model methods to get info about meeting


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 143, http://dev.mconf.org/redmine/issues/143

Original Assignee: Leonardo Daronco


@google user: [email protected]@

Include methods in BigbluebuttonRoom to get information about the meeting.

Example:
room = BigbluebuttonRoom.first
room.attendees # list of attendees
room.is_running? # is it running

For now, all methods might have to call the BBB API method get_meeting_info and parse the response.
In the future, responses can be cached to reduce the number of API calls.

Allow join in rooms that are not in the DB


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 157, http://dev.mconf.org/redmine/issues/157

Original Assignee: Leonardo Daronco


@google user: [email protected]@

Currently all routes available to join a room use the room.id to find the target room, hence the room must be in the DB.

It is useful to be able to join rooms that are not stored in the DB so that we don't need to save every room fetched.

Relates to the problem from "/p/mconf/issues/detail?id=175": Issue 175 .

Dynamically choose the server when a meeting is started


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 160, http://dev.mconf.org/redmine/issues/160

Original Assignee: Leonardo Daronco


@google user: [email protected]@

Currently all webconference rooms are associated to one webconference server when they are created and this may never change.

When a user is about to start a meeting, the server where the conference will be created should be selected dynamically. The criteria to decide the target server we still don't know, but for now bigbluebutton_rails should provide the app an easy way to select the server every time a meeting is about to be created.

Servers and rooms may be decoupled (rooms can exist without a server).

Rails 4

Is there any plans for Rails 4 support? If not are there any alternative gems that I could use that supports Big Blue Button API?

Set a numeric voiceBridge for every room


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 145, http://dev.mconf.org/redmine/issues/145

Original Assignee: Leonardo Daronco


@google user: [email protected]@

Use a numeric "voiceBridge" param when creating a room.

From the BigBlueButton API documentation: "we recommend you always pass a 5 digit voiceBridge parameter -- and have it begin with the digit '7' if you are using the default FreeSWITCH setup"

So the voiceBridge should have 5 digits, the first one being a '7' and the last ones can be taken from the meetingID (after implementing "/p/mconf/issues/detail?id=38": issue #38 ) or can be random (but unique).

Split routing for servers and rooms

Just sent pull request

module ActionDispatch::Routing
  class Mapper
    def add_routes_for_servers
      resources :servers, :controller => BigbluebuttonRails.controllers[:servers] do
        get :activity, :on => :member
        get :rooms, :on => :member
      end
    end

    def bigbluebutton_routes_default(*params) #:nodoc:
      options = params.extract_options!
      options_scope = options.has_key?(:scope) ? options[:scope] : BigbluebuttonRails.routing_scope
      options_as = options.has_key?(:as) ? options[:as] : options_scope
      options_only = options.has_key?(:only) ? options[:only] : nil
      BigbluebuttonRails.set_controllers(options[:controllers])

      scope options_scope, :as => options_as do
        if options_only.nil?
          add_routes_for_servers
          add_routes_for_rooms
        else
          options_only.include?('servers') ? add_routes_for_servers : add_routes_for_rooms         
        end
      end
    end
  end
end

So, now we can:

bigbluebutton_routes :default, :scope => 'admin/conferences', :as => 'bigbluebutton', :only => 'servers', :controllers => { :servers => 'admin/conferences' }
bigbluebutton_routes :default, :scope => 'conferences', :as => 'bigbluebutton', :only => 'rooms', :controllers => { :rooms => 'conferences' }

QR code in join_mobile does not check for permissions


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 149, http://dev.mconf.org/redmine/issues/149


@google user: [email protected]@

The QR code in the view "join_mobile" points directly to the BBB API. It should point to an internal action, such as #join, to be able to check if the user has permissions to join the conference or not.

For now, anyone that has access to the QR code will be able to join the conference.

Idea:

For QR code:

  • create a temporary random hash and attach it as a parameter in the #join URL (e.g. "server.com/room/1/join?hash=879617lkahs9087").
  • when someone scans it, the server receives the request, searches for the hash and then finds the user that's accessing the room, so it can check for his permissions.

For the link with "bigbluebutton://":

  • the user in the mobile devise will click in the link, so his permissions were already checked.
  • we just need to add some parameter to the URL to indicate that the response should use the protocol "bigbluebutton://" instead of HTTP. Something like: "server.com/room/1/join?mobile=1"

Support to BBB 0.8 in bigbluebutton_rails

Allow join in rooms that are not in the DB


Author Name: Leonardo Daronco (Leonardo Daronco)
Original Redmine Issue: 157, http://dev.mconf.org/redmine/issues/157

Original Assignee: Leonardo Daronco


@google user: [email protected]@

Currently all routes available to join a room use the room.id to find the target room, hence the room must be in the DB.

It is useful to be able to join rooms that are not stored in the DB so that we don't need to save every room fetched.

Relates to the problem from "/p/mconf/issues/detail?id=175": Issue 175 .

telecasting a session

Is there way to force the viewer to only listen to your live telecast and not participate in them by default? I don't want them to be able to choose to be able to participate in chatting or other interaction unless I allow them.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.