bigbluebutton_rails 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -3
  3. data/CHANGELOG.md +34 -0
  4. data/Dockerfile +23 -0
  5. data/Gemfile +3 -0
  6. data/Gemfile.lock +14 -5
  7. data/README.md +42 -59
  8. data/Rakefile +6 -3
  9. data/app/controllers/bigbluebutton/api/rooms_controller.rb +117 -0
  10. data/app/controllers/bigbluebutton/playback_types_controller.rb +0 -3
  11. data/app/controllers/bigbluebutton/recordings_controller.rb +37 -23
  12. data/app/controllers/bigbluebutton/rooms_controller.rb +6 -31
  13. data/app/controllers/bigbluebutton/servers_controller.rb +0 -14
  14. data/app/helpers/bigbluebutton_rails_helper.rb +4 -0
  15. data/app/models/bigbluebutton_attendee.rb +21 -0
  16. data/app/models/bigbluebutton_meeting.rb +5 -0
  17. data/app/models/bigbluebutton_playback_format.rb +3 -2
  18. data/app/models/bigbluebutton_recording.rb +164 -68
  19. data/app/models/bigbluebutton_room.rb +148 -59
  20. data/app/models/bigbluebutton_server.rb +1 -1
  21. data/app/views/bigbluebutton/api/error.rabl +10 -0
  22. data/app/views/bigbluebutton/api/rooms/index.rabl +45 -0
  23. data/app/views/bigbluebutton/api/rooms/join.rabl +6 -0
  24. data/app/views/bigbluebutton/api/rooms/running.rabl +10 -0
  25. data/app/views/bigbluebutton/recordings/play.html.erb +1 -0
  26. data/app/views/bigbluebutton/servers/_activity_list.html.erb +5 -5
  27. data/app/workers/{bigbluebutton_finish_meetings.rb → bigbluebutton_finish_meetings_worker.rb} +2 -2
  28. data/app/workers/{bigbluebutton_meeting_updater.rb → bigbluebutton_meeting_updater_worker.rb} +3 -3
  29. data/app/workers/bigbluebutton_recordings_for_room_worker.rb +27 -0
  30. data/app/workers/{bigbluebutton_update_recordings.rb → bigbluebutton_update_recordings_worker.rb} +2 -2
  31. data/app/workers/{bigbluebutton_update_server_configs.rb → bigbluebutton_update_server_configs_worker.rb} +3 -3
  32. data/bigbluebutton_rails.gemspec +1 -0
  33. data/config/locales/en.yml +21 -0
  34. data/config/locales/pt-br.yml +1 -0
  35. data/config/resque/resque.rake +7 -1
  36. data/config/resque/workers_schedule.yml +3 -3
  37. data/docker-compose.yml +68 -0
  38. data/dumb-init_1.2.0 +0 -0
  39. data/lib/bigbluebutton_rails.rb +1 -2
  40. data/lib/bigbluebutton_rails/api_controller_methods.rb +138 -0
  41. data/lib/bigbluebutton_rails/configuration.rb +33 -4
  42. data/lib/bigbluebutton_rails/controller_methods.rb +0 -31
  43. data/lib/bigbluebutton_rails/exceptions.rb +17 -0
  44. data/lib/bigbluebutton_rails/rails/routes.rb +14 -0
  45. data/lib/bigbluebutton_rails/version.rb +1 -1
  46. data/lib/generators/bigbluebutton_rails/templates/migration.rb +17 -3
  47. data/lib/generators/bigbluebutton_rails/templates/migration_2_2_0.rb +1 -1
  48. data/lib/generators/bigbluebutton_rails/templates/migration_2_2_0_b.rb +106 -0
  49. data/lib/generators/bigbluebutton_rails/templates/migration_2_3_0.rb +22 -0
  50. data/lib/tasks/bigbluebutton_rails/meetings.rake +1 -1
  51. data/spec/controllers/bigbluebutton/api/rooms_controller_spec.rb +498 -0
  52. data/spec/controllers/bigbluebutton/recordings_controller_spec.rb +84 -0
  53. data/spec/controllers/bigbluebutton/rooms_controller_exception_handling_spec.rb +2 -2
  54. data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +24 -22
  55. data/spec/controllers/bigbluebutton/servers_controller_spec.rb +9 -0
  56. data/spec/factories/bigbluebutton_attendee.rb +7 -0
  57. data/spec/factories/bigbluebutton_meeting.rb +0 -1
  58. data/spec/factories/bigbluebutton_playback_type.rb +1 -0
  59. data/spec/factories/bigbluebutton_recording.rb +2 -4
  60. data/spec/helpers/bigbluebutton_rails_helper_spec.rb +10 -2
  61. data/spec/lib/bigbluebutton_rails/background_tasks_spec.rb +1 -0
  62. data/spec/lib/tasks/meetings_rake_spec.rb +1 -1
  63. data/spec/models/bigbluebutton_attendee_spec.rb +44 -0
  64. data/spec/models/bigbluebutton_meeting_db_spec.rb +0 -1
  65. data/spec/models/bigbluebutton_meeting_spec.rb +1 -0
  66. data/spec/models/bigbluebutton_playback_format_spec.rb +2 -0
  67. data/spec/models/bigbluebutton_playback_type_db_spec.rb +1 -0
  68. data/spec/models/bigbluebutton_recording_db_spec.rb +2 -2
  69. data/spec/models/bigbluebutton_recording_spec.rb +404 -72
  70. data/spec/models/bigbluebutton_room_spec.rb +435 -148
  71. data/spec/rails_app/config/database.yml.example +10 -11
  72. data/spec/rails_app/config/initializers/resque.rb +33 -0
  73. data/spec/rails_app/config/routes.rb +2 -0
  74. data/spec/rails_app/lib/tasks/db/populate.rake +73 -55
  75. data/spec/support/mocked_server.rb +1 -1
  76. data/spec/workers/{bigbluebutton_finish_meetings_spec.rb → bigbluebutton_finish_meetings_worker_spec.rb} +3 -3
  77. data/spec/workers/{bigbluebutton_meeting_updater_spec.rb → bigbluebutton_meeting_updater_worker_spec.rb} +8 -7
  78. data/spec/workers/bigbluebutton_recordings_for_room_worker_spec.rb +49 -0
  79. data/spec/workers/{bigbluebutton_update_recordings_spec.rb → bigbluebutton_update_recordings_worker_spec.rb} +3 -3
  80. data/spec/workers/{bigbluebutton_update_server_configs_spec.rb → bigbluebutton_update_server_configs_worker_spec.rb} +4 -4
  81. metadata +42 -14
  82. data/lib/classes/bigbluebutton_attendee.rb +0 -21
  83. data/spec/classes/bigbluebutton_attendee_spec.rb +0 -76
  84. data/spec/controllers/bigbluebutton/recordings_controller_json_responses_spec.rb +0 -111
  85. data/spec/controllers/bigbluebutton/rooms_controller_json_responses_spec.rb +0 -203
  86. data/spec/controllers/bigbluebutton/servers_controller_json_responses_spec.rb +0 -162
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 44ffb5fae34d7b736ebf6c372c512b2b37d8f41f
4
- data.tar.gz: 3446e484579e743d3f58b40bcfc06168f8062ac7
3
+ metadata.gz: 88081dab1ee2f637c46993cd9b6f655cc4516afb
4
+ data.tar.gz: 791d30eb4d1873e75834754aed5c43b4b4a1c3f2
5
5
  SHA512:
6
- metadata.gz: 81ccfdd0a387e03d5d54ae67175eb77a1904e524e3f33b13b53a248f5bd7baebb6c0e4fa40317b50d776082fcf3f2ed0b23d33a7cb263f4630995a48bc8a40e6
7
- data.tar.gz: c608a39eef0b90ce899f344f05b0d07433010375924de85ba19260d39ca11cacc0f7c365f8c6fb078706a985c0710a90921d1684bef7d444ecec18481c165894
6
+ metadata.gz: 69a370e8996753af92fdf67be6d6c6172fd02938f1a9b9a2c23960a0f2cb2d656ba70a67f3a87bd830c7a9b7246cf53d8c7f75b7c4cbcf2a735c79cf18a40899
7
+ data.tar.gz: 2adec10068e736881b444dbf584b5427ef83d7661a0fafed7e0b5037b0762e5faf4b5323a360c4b8d5e64357e5b6c8592b410b1a2e019af93c8e3c3658d4eefa
data/.travis.yml CHANGED
@@ -2,6 +2,8 @@ sudo: false
2
2
  language: ruby
3
3
  services:
4
4
  - redis-server
5
+ before_install:
6
+ - gem install bundler
5
7
  bundler_args: "--without production development"
6
8
  before_script:
7
9
  - "cp spec/rails_app/config/database.yml.travis spec/rails_app/config/database.yml"
@@ -11,6 +13,4 @@ before_script:
11
13
  cache: bundler
12
14
  script: "bundle exec rake rails_app:install rails_app:db spec"
13
15
  rvm:
14
- - 2.1.2
15
- - 2.2.0
16
- - 1.9.3
16
+ - 2.2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
1
1
  # Change Log
2
2
 
3
+ ## [2.3.0] - 2019-11-14
4
+
5
+ * [#136] Improve matching between recordings and meetings and migrate old recordings to
6
+ always (when possible) have a meeting associated.
7
+ * Add new worker to fetch recordings after meetings are ended to improve the speed with which
8
+ recordings are found after meetings
9
+ * Fix setting the `recorded` attributes in newly created meetings, it was always using the
10
+ attributes from model, without considering that it is possible to override these attributes when
11
+ making a "create" call (which is exactly what Mconf-Web does).
12
+ * First version of a JSON API that applications can use to list and join meetings created
13
+ by this gem. All calls are authenticated by a secret configure in
14
+ `BigbluebuttonRails.configuration.api_secret`.
15
+ * Remove old unnecessary json responses. Most routes had it but most were not used.
16
+ * Add docker configs to run the gem in development and to run tests.
17
+ * Set the `finish_time` on meetings when setting them as ended.
18
+ * Add options to set dynamic options when creating and joining conferences. See
19
+ `get_create_options` and `get_join_options`.
20
+ * Make it easier for apps to customize the config.xml in a join call.
21
+ * Add support for `<recordingUsers>` returned by getRecordings.
22
+ * Add option to run on/off the authentication in playback URLs. When on, it will call
23
+ `getRecordingToken` on the server holding the recording and use the proper parameters
24
+ when redirecting the user to the playback URL.
25
+ See `BigbluebuttonRails.configuration.playback_url_authentication`.
26
+ * Add option to show recording playback pages inside an iframe. Optional and off by default.
27
+ If turned on all playback formats that are *not* downloadable will be shown inside an
28
+ iframe. See `BigbluebuttonRails.configuration.playback_iframe`.
29
+ * Increase the limit in the name of rooms from 150 to 250 chars.
30
+ * Speed up recording sync by using batch imports (`activerecord-import`) and preventing
31
+ unchanged recordings from being updated when syncing.
32
+ * Fix errors when trying to playback a recording that doesn't exist.
33
+
34
+
3
35
  ## [2.2.0] - 2017-10-04
4
36
 
5
37
  * Make only description editable in recordings, since all other attributes are taken from
@@ -287,6 +319,8 @@ https://github.com/mconf/bigbluebutton_rails/wiki/Migrate-to-1.3.0
287
319
  * Controller to access servers and rooms
288
320
  * rooms_controller interacts with a BBB server using bigbluebutton-api-ruby
289
321
 
322
+ [2.2.0]: https://github.com/mconf/bigbluebutton_rails/compare/v2.2.0...v2.3.0
323
+ [2.3.0]: https://github.com/mconf/bigbluebutton_rails/compare/v2.1.0...v2.2.0
290
324
  [2.1.0]: https://github.com/mconf/bigbluebutton_rails/compare/v2.0.0...v2.1.0
291
325
  [2.0.0]: https://github.com/mconf/bigbluebutton_rails/compare/v1.4.0...v2.0.0
292
326
  [1.4.0]: https://github.com/mconf/bigbluebutton_rails/compare/v1.3.0...v1.4.0
data/Dockerfile ADDED
@@ -0,0 +1,23 @@
1
+ FROM ruby:2.2.0
2
+
3
+ RUN apt-get update && \
4
+ apt-get install -y qt5-default libqt5webkit5-dev gstreamer1.0-plugins-base gstreamer1.0-tools gstreamer1.0-x
5
+
6
+ ENV app /usr/src/app
7
+
8
+ # Create app directory
9
+ RUN mkdir -p $app
10
+ WORKDIR $app
11
+
12
+ # Bundle app source
13
+ COPY . $app
14
+
15
+ # Install app dependencies
16
+ RUN bundle install
17
+
18
+ # dumb-init
19
+ ADD dumb-init_1.2.0 /usr/bin/dumb-init
20
+ RUN chmod +x /usr/bin/dumb-init
21
+
22
+ ENTRYPOINT ["/usr/bin/dumb-init", "--"]
23
+ CMD [ "bundle", "exec", "rails", "server" ]
data/Gemfile CHANGED
@@ -5,6 +5,8 @@ gemspec
5
5
  gem 'mysql2'
6
6
  gem "jquery-rails"
7
7
  gem "forgery"
8
+ gem 'rabl'
9
+ gem 'activerecord-import'
8
10
 
9
11
  group :development do
10
12
  gem "rdoc"
@@ -31,6 +33,7 @@ group :test do
31
33
  gem "capybara-webkit" # best option found for js
32
34
  gem "launchy"
33
35
  gem "webmock"
36
+ gem "timecop"
34
37
 
35
38
  # to use redis in-memory and clean it in-between tests, used for resque
36
39
  gem "fakeredis", :require => "fakeredis/rspec"
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bigbluebutton_rails (2.2.0)
4
+ bigbluebutton_rails (2.3.0)
5
+ activerecord-import (~> 1.0)
5
6
  bigbluebutton-api-ruby (~> 1.6)
6
7
  browser (~> 0.8.0)
7
8
  rails (>= 4.0.0)
@@ -31,6 +32,8 @@ GEM
31
32
  activemodel (= 4.1.4)
32
33
  activesupport (= 4.1.4)
33
34
  arel (~> 5.0.0)
35
+ activerecord-import (1.0.2)
36
+ activerecord (>= 3.2)
34
37
  activesupport (4.1.4)
35
38
  i18n (~> 0.6, >= 0.6.9)
36
39
  json (~> 1.7, >= 1.7.7)
@@ -40,7 +43,7 @@ GEM
40
43
  addressable (2.3.6)
41
44
  arel (5.0.1.20140414130214)
42
45
  awesome_print (1.2.0)
43
- bigbluebutton-api-ruby (1.6.0)
46
+ bigbluebutton-api-ruby (1.7.0)
44
47
  xml-simple (~> 1.1)
45
48
  browser (0.8.0)
46
49
  builder (3.2.2)
@@ -141,8 +144,10 @@ GEM
141
144
  nokogiri (1.6.2.1-java)
142
145
  ntlm-http (0.1.1)
143
146
  polyglot (0.3.5)
147
+ rabl (0.10.1)
148
+ activesupport (>= 2.3.14)
144
149
  rack (1.5.2)
145
- rack-protection (1.5.3)
150
+ rack-protection (1.5.5)
146
151
  rack
147
152
  rack-test (0.6.2)
148
153
  rack (>= 1.0)
@@ -175,8 +180,8 @@ GEM
175
180
  rdoc (4.1.1)
176
181
  json (~> 1.4)
177
182
  redis (3.1.0)
178
- redis-namespace (1.5.3)
179
- redis (~> 3.0, >= 3.0.4)
183
+ redis-namespace (1.6.0)
184
+ redis (>= 3.0.4)
180
185
  ref (1.0.5)
181
186
  require_all (1.3.2)
182
187
  resque (1.25.2)
@@ -249,6 +254,7 @@ GEM
249
254
  thread_safe (0.3.4)
250
255
  thread_safe (0.3.4-java)
251
256
  tilt (1.4.1)
257
+ timecop (0.9.1)
252
258
  treetop (1.4.15)
253
259
  polyglot
254
260
  polyglot (>= 0.3.1)
@@ -276,6 +282,7 @@ PLATFORMS
276
282
  ruby
277
283
 
278
284
  DEPENDENCIES
285
+ activerecord-import
279
286
  bigbluebutton_rails!
280
287
  capybara (~> 2.2.0)
281
288
  capybara-mechanize
@@ -291,6 +298,7 @@ DEPENDENCIES
291
298
  launchy
292
299
  minitest
293
300
  mysql2
301
+ rabl
294
302
  rails_best_practices
295
303
  rdoc
296
304
  rspec-activemodel-mocks
@@ -299,5 +307,6 @@ DEPENDENCIES
299
307
  shoulda-matchers (~> 2.6.1)
300
308
  simplecov (>= 0.4.0)
301
309
  therubyracer (~> 0.12.0)
310
+ timecop
302
311
  uglifier (>= 1.0.3)
303
312
  webmock
data/README.md CHANGED
@@ -280,30 +280,37 @@ The list of meetings is also periodically synchronized using Resque-scheduler
280
280
  ### Associating rooms and servers
281
281
 
282
282
  Rooms must be associated with a server to function. When a meeting is created,
283
- it is created in the server that's associated with the room. The association
284
- is done using the `server_id` attribute in `BigbluebuttonRoom`. So
285
- applications that use this gem can manage all the associations by simply
286
- setting this attribute.
287
-
283
+ it is created in the server that's associated with the room.
288
284
  By default, this gem automatically selects a server **if one is needed and the
289
- room has no server yet**. If a room already has a server, the gem will never
290
- change it.
285
+ room has no server yet**.
291
286
 
292
- To change this behavior, applications can override the method
293
- `{BigbluebuttonRoom#select_server}[https://github.com/mconf/bigbluebutton_rail
294
- s/blob/5decf3fa7767002303cf8bda524dcbeca0a9146c/app/models/bigbluebutton_room.
295
- rb#L413]`. This method is called by all methods that trigger API calls,
287
+ To change this behavior, applications can override the configuration
288
+ `BigbluebuttonRails.configuration.select_server`. This attribute receives a
289
+ function that will be called inside all methods that trigger API calls,
296
290
  methods that need a server to work properly. It receives a parameter that
297
- indicates which API call will be sent to the server.
298
-
299
- If the method returns a server, the server will be associated with the room.
300
- If the method returns `nil`, the room will maintain the server it had
301
- previously (if any).
291
+ indicates which API call will be sent to the server and expects the function
292
+ to return a `BigbluebuttonServer`.
302
293
 
303
294
  One common use would be to override this method to always select a new server
304
295
  when a meeting is created (when the argument received is `:create`). This
305
296
  would allow the implementation of a simple load balancing mechanism.
306
297
 
298
+ To configure it, add a code like the one below to one initializer in your
299
+ application:
300
+
301
+ ```ruby
302
+ BigbluebuttonRails.configure do |config|
303
+ config.select_server = Proc.new do |room, api_method=nil|
304
+ if room.name == 'special-room'
305
+ BigbluebuttonServer.find_by(name: 'special-server')
306
+ else
307
+ BigbluebuttonServer.first
308
+ end
309
+ end
310
+ end
311
+ ```
312
+
313
+
307
314
  ### Example application
308
315
 
309
316
  If you need more help to set up the gem or just want to see an example of it
@@ -317,61 +324,37 @@ working, check out the test application at `spec/rails_app/`!
317
324
 
318
325
  ## Contributing/Development
319
326
 
320
- Fork this repository, clone your fork and start by installing the
321
- dependencies:
322
-
323
- bundle install
324
-
325
- Note: if you're getting an error installing `capybara-webkit`, most likely you
326
- need to install QT, see:
327
- https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling
328
- -capybara-webkit
329
-
330
- First copy `spec/rails_app/config/database.yml.example` to
327
+ To setup an environment, first copy `spec/rails_app/config/database.yml.example` to
331
328
  `spec/rails_app/config/database.yml`. It uses MySQL since this is the database
332
- recommended for the applications that use this gem. You have to set the
333
- appropriate password for your MySQL user.
334
-
335
- Save `spec/rails_app/features/config.yml.example` as
336
- `spec/rails_app/features/config.yml` and edit it to set values for an existent
337
- BigBlueButton server. You will need it to run the integration tests. For more
338
- information see the page
339
- [Testing](https://github.com/mconf/bigbluebutton_rails/wiki/Testing) in our
340
- wiki.
329
+ recommended for the applications that use this gem.
341
330
 
342
- Prepare the `rails_app` used for tests:
331
+ You can start the example application (from `spec/rails_app`) with:
343
332
 
344
- rake rails_app:install
345
- rake rails_app:db SERVER=my-server # select a server you defined in 'config.yml'
346
- rake rails_app:populate # to create fake data, optional
333
+ docker-compose up dev
347
334
 
348
- Run the tests:
335
+ It will probably not work straight away, because you need to setup the application first.
336
+ Do so with:
349
337
 
350
- rake spec
351
- rake cucumber SERVER=my-server
338
+ docker-compose run dev rake rails_app:install
339
+ docker-compose run dev rake rails_app:db
352
340
 
353
- Or simply:
341
+ # optionally:
342
+ docker-compose run dev rake rails_app:populate # to create fake data
354
343
 
355
- rake SERVER=my-server
356
-
357
- If you're adding migrations to the gem, test them with:
344
+ Then try the `up dev` command again and it should open up a server. Access `localhost:3000`
345
+ to see it.
358
346
 
359
- rake spec:migrations
347
+ To run the tests the process is exactly the same, just replace the `dev` target with `test`:
360
348
 
361
- Note: If you don't set the SERVER variable, the first server in `config.yml`
362
- will be used.
349
+ docker-compose up test
363
350
 
364
- You can also start the test application and navigate to `localhost:3000` to
365
- check it:
351
+ If you're adding migrations to the gem, test them with:
366
352
 
367
- cd spec/rails_app/
368
- rails server
353
+ docker-compose run test rake spec:migrations
369
354
 
370
355
  If you need to keep track of meetings, run the resque workers with:
371
356
 
372
- rake resque:work QUEUE='bigbluebutton_rails'
373
-
374
- Develop. :)
357
+ docker-compose run dev rake resque:work QUEUE='bigbluebutton_rails'
375
358
 
376
359
  If you want your code to be integrated in this repository, please fork it,
377
360
  create a branch with your modifications and submit a pull request.
@@ -383,7 +366,7 @@ create a branch with your modifications and submit a pull request.
383
366
 
384
367
  Coverage is analyzed by default when you run:
385
368
 
386
- rake spec
369
+ docker-compose up test
387
370
 
388
371
  Run it and look at the file `coverage/index.html`.
389
372
 
@@ -394,7 +377,7 @@ the code.
394
377
 
395
378
  Run:
396
379
 
397
- rake best_practices
380
+ docker-compose run dev rake best_practices
398
381
 
399
382
  And look at the file `rails_best_practices_output.html` to see the tips.
400
383
 
data/Rakefile CHANGED
@@ -39,8 +39,7 @@ namespace :rails_app do
39
39
  desc 'Setup the db in the rails app used in tests.'
40
40
  task :db do
41
41
  cd File.join(File.dirname(__FILE__), "spec", "rails_app")
42
- sh "bundle exec rake db:drop db:create db:migrate db:seed RAILS_ENV=development"
43
- sh "bundle exec rake db:drop db:create db:migrate db:seed RAILS_ENV=test"
42
+ sh "bundle exec rake db:drop db:create db:migrate db:seed"
44
43
  cd File.dirname(__FILE__)
45
44
  end
46
45
 
@@ -86,17 +85,21 @@ namespace :spec do
86
85
  sh "bundle exec rails generate bigbluebutton_rails:install 1.3.0 --migration-only --force"
87
86
  sh "bundle exec rails generate bigbluebutton_rails:install 1.4.0 --migration-only --force"
88
87
  sh "bundle exec rails generate bigbluebutton_rails:install 2.0.0 --migration-only --force"
88
+ sh "bundle exec rails generate bigbluebutton_rails:install 2.1.0 --migration-only --force"
89
+ sh "bundle exec rails generate bigbluebutton_rails:install 2.2.0 --migration-only --force"
89
90
 
90
91
  sh "bundle exec rake db:drop RAILS_ENV=test"
91
92
  sh "bundle exec rake db:create RAILS_ENV=test"
92
93
  sh "bundle exec rake db:migrate RAILS_ENV=test"
93
- sh "bundle exec rake db:test:prepare RAILS_ENV=test"
94
+ sh "bundle exec rake db:seed RAILS_ENV=test"
94
95
 
95
96
  cd "../.."
96
97
  Rake::Task["spec"].invoke
97
98
  # Rake::Task["cucumber"].invoke
98
99
 
99
100
  cd "spec/rails_app/"
101
+ sh "bundle exec rails destroy bigbluebutton_rails:install 2.2.0 --migration-only"
102
+ sh "bundle exec rails destroy bigbluebutton_rails:install 2.1.0 --migration-only"
100
103
  sh "bundle exec rails destroy bigbluebutton_rails:install 2.0.0 --migration-only"
101
104
  sh "bundle exec rails destroy bigbluebutton_rails:install 1.4.0 --migration-only"
102
105
  sh "bundle exec rails destroy bigbluebutton_rails:install 1.3.0 --migration-only"
@@ -0,0 +1,117 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'bigbluebutton_api'
3
+
4
+ class Bigbluebutton::Api::RoomsController < ApplicationController
5
+ include BigbluebuttonRails::APIControllerMethods
6
+
7
+ skip_before_filter :verify_authenticity_token
8
+ before_filter :authenticate_api
9
+
10
+ before_filter :validate_pagination, only: :index
11
+
12
+ before_filter :find_room, only: [:running, :join]
13
+
14
+ before_filter :join_user_params, only: :join
15
+
16
+ # only for the ones that trigger API calls
17
+ before_filter :set_request_headers, only: [:join, :running]
18
+ before_filter :set_content_type
19
+
20
+ respond_to :json
21
+
22
+ def index
23
+ query = BigbluebuttonRoom
24
+
25
+ # Search
26
+ search_terms = map_search(params[:filter])
27
+ query = query.search_by_terms(search_terms) unless search_terms.blank?
28
+
29
+ # Sort
30
+ sort_str = map_sort(params[:sort], 'name ASC', ['activity', 'name'])
31
+ if sort_str.match(/activity/) # if requested activity ignore the rest
32
+ activity_order = sort_str.match(/activity ASC/) ? 'DESC' : 'ASC' # yes, inverse logic!
33
+ query = query.order_by_activity(activity_order)
34
+ else
35
+ query = query.order(sort_str)
36
+ end
37
+
38
+ # Limits and pagination
39
+ limit, offset, page = map_pagination(params[:page], 10)
40
+ query = query.limit(limit).offset(offset)
41
+ @pagination_links = map_pagination_links(page)
42
+
43
+ @rooms = query
44
+ respond_with(@rooms)
45
+ end
46
+
47
+ def running
48
+ check_is_running
49
+ end
50
+
51
+ def join
52
+ error_room_not_running unless check_is_running
53
+
54
+ # map "meta[_-]" to "userdata-"
55
+ options = params.select{ |k,v| k.match(/^meta[-_]/) }
56
+ unless options.blank?
57
+ options = options.map{ |k,v| { k.gsub(/^meta[-_]/, 'userdata-') => v } }.reduce(:merge)
58
+ end
59
+
60
+ @url = @room.parameterized_join_url(@user_name, @user_role, nil, options)
61
+ end
62
+
63
+ protected
64
+
65
+ def find_room
66
+ @room ||= BigbluebuttonRoom.find_by(param: params[:id])
67
+ error_room_not_found if @room.nil?
68
+ end
69
+
70
+ def join_user_params
71
+ if BigbluebuttonRails.configuration.guest_support
72
+ guest_role = :guest
73
+ else
74
+ guest_role = :attendee
75
+ end
76
+
77
+ @user_name = params[:name]
78
+ return error_missing_params if @user_name.blank?
79
+
80
+ if @room.private
81
+ key = params[:key]
82
+ return error_missing_params if key.blank?
83
+ @user_role = @room.user_role(key)
84
+ return error_invalid_key if @user_role.blank?
85
+ else
86
+ @user_role = guest_role
87
+ end
88
+ end
89
+
90
+ def check_is_running
91
+ begin
92
+ @room.fetch_is_running?
93
+ rescue StandardError => e
94
+ @errors = [BigbluebuttonRails::APIError.new(e.to_s, 500)]
95
+ render 'bigbluebutton/api/error'
96
+ end
97
+ @room.is_running?
98
+ end
99
+
100
+ def set_content_type
101
+ self.content_type = 'application/vnd.api+json'
102
+ end
103
+
104
+ def set_request_headers
105
+ @room.request_headers["x-forwarded-for"] = request.remote_ip if @room.present?
106
+ end
107
+
108
+ def authenticate_api
109
+ authorization = request.headers["Authorization"]
110
+ secret = authorization.gsub(/^Bearer /, '') if authorization.present?
111
+ server_secret = BigbluebuttonRails.configuration.api_secret
112
+ if server_secret != '' &&
113
+ (server_secret.nil? || secret.blank? || secret != server_secret)
114
+ error_forbidden
115
+ end
116
+ end
117
+ end