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
@@ -0,0 +1,6 @@
1
+ object false
2
+
3
+ child(@room => :data) {
4
+ node(:type) { 'join-url' }
5
+ node(:id) { @url }
6
+ }
@@ -0,0 +1,10 @@
1
+ object false
2
+
3
+ child(@room => :data) {
4
+ node(:type) { |obj| api_type_of(obj) }
5
+ node(:id) { |obj| obj.to_param }
6
+
7
+ node :attributes do |room|
8
+ { :running => room.is_running? }
9
+ end
10
+ }
@@ -0,0 +1 @@
1
+ <iframe src="<%= @playback_url %>" style="width:100%;height:100%;border:0;margin:0;padding:0;"></iframe>
@@ -20,13 +20,13 @@
20
20
  <span class="not_running">Not running</span>
21
21
  <% end %>
22
22
  </div>
23
- <% unless room.start_time.nil? %>
24
- Started at: <%= room.start_time.strftime("%F, %R UTC%z") %><br/>
23
+ <% unless room.create_time.nil? %>
24
+ Started at: <%= Time.at(room.create_time).strftime("%F, %R UTC%z") %><br/>
25
25
  <% end %>
26
26
  <% unless room.end_time.nil? %>
27
27
  Ended at: <%= room.end_time.strftime("%F, %R UTC%z") %> (forcibly ended: <%= room.has_been_forcibly_ended %>)
28
28
  <% end %>
29
- <% unless room.attendees.count == 0 %>
29
+ <% unless room.current_attendees.count == 0 %>
30
30
  Participants (<%= room.participant_count %> total, <%= room.moderator_count %> moderators):
31
31
  <div class="bbbrails_meeting_attendees">
32
32
  <div class="header">
@@ -34,11 +34,11 @@
34
34
  <div class="field">ID</div>
35
35
  <div class="field">Name</div>
36
36
  </div>
37
- <% room.attendees.each do |attendee| %>
37
+ <% room.current_attendees.each do |attendee| %>
38
38
  <div class="row">
39
39
  <div class="field"><%= attendee.role %></div>
40
40
  <div class="field"><%= attendee.user_id %></div>
41
- <div class="field"><%= attendee.full_name %></div>
41
+ <div class="field"><%= attendee.user_name %></div>
42
42
  </div>
43
43
  <% end %>
44
44
  </div>
@@ -1,11 +1,11 @@
1
1
  # A resque worker to check for meetings that already finished and mark
2
2
  # them as finished.
3
3
  # Same as "rake bigbluebutton_rails:meetings:finish".
4
- class BigbluebuttonFinishMeetings
4
+ class BigbluebuttonFinishMeetingsWorker
5
5
  @queue = :bigbluebutton_rails
6
6
 
7
7
  def self.perform
8
- Rails.logger.info "BigbluebuttonFinishMeetings worker running"
8
+ Rails.logger.info "BigbluebuttonFinishMeetingsWorker worker running"
9
9
  BigbluebuttonRails::BackgroundTasks.finish_meetings
10
10
  end
11
11
  end
@@ -1,16 +1,16 @@
1
1
  # A resque worker to get information about a meeting with `getMeetingInfo` and update
2
2
  # the associated `BigbluebuttonMeeting` object. This should be called to speed up the
3
3
  # update of a meeting object (usually on creates and ends).
4
- class BigbluebuttonMeetingUpdater
4
+ class BigbluebuttonMeetingUpdaterWorker
5
5
  @queue = :bigbluebutton_rails
6
6
 
7
7
  def self.perform(room_id, wait=nil)
8
- Rails.logger.info "BigbluebuttonMeetingUpdater worker: waiting #{wait} for room #{room_id}"
8
+ Rails.logger.info "BigbluebuttonMeetingUpdaterWorker worker: waiting #{wait} for room #{room_id}"
9
9
  sleep(wait) unless wait.nil?
10
10
 
11
11
  room = BigbluebuttonRoom.find(room_id)
12
12
  if room.nil?
13
- Rails.logger.info "BigbluebuttonMeetingUpdater worker: room #{room_id} not found!"
13
+ Rails.logger.info "BigbluebuttonMeetingUpdaterWorker worker: room #{room_id} not found!"
14
14
  else
15
15
  # `fetch_meeting_info` will automatically update the meeting by
16
16
  # calling `room.update_current_meeting_record`
@@ -0,0 +1,27 @@
1
+ # TODO: This worker exists only because we don't have yet a way to figure out
2
+ # precisely when a recording is done processing. Ideally the web conference
3
+ # server would send us a request notifying that the recording is ready.
4
+ # For now, this worker is used to get all recordings of a room after a meeting
5
+ # is ended in the room. It keeps trying a few times even if a recording was
6
+ # already found, which is important in case there are multiple playback formats
7
+ # that are processed individually (e.g. the first time the recording is found it
8
+ # might have only one of the formats done).
9
+
10
+ # A resque worker to get the recordings of a room.
11
+ class BigbluebuttonRecordingsForRoomWorker
12
+ @queue = :bigbluebutton_rails
13
+
14
+ def self.perform(room_id, tries_left=0)
15
+ Rails.logger.info "BigbluebuttonRecordingsForRoomWorker worker running"
16
+
17
+ room = BigbluebuttonRoom.find(room_id)
18
+ if room.present?
19
+ Rails.logger.info "BigbluebuttonRecordingsForRoomWorker getting recordings for #{room.inspect}"
20
+ room.fetch_recordings
21
+
22
+ if tries_left > 0
23
+ Resque.enqueue_in(5.minutes, ::BigbluebuttonRecordingsForRoomWorker, room_id, tries_left - 1)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,11 +1,11 @@
1
1
  # A resque worker to get the list of recordings from the server and update
2
2
  # the database.
3
3
  # Same as "rake bigbluebutton_rails:recordings:update".
4
- class BigbluebuttonUpdateRecordings
4
+ class BigbluebuttonUpdateRecordingsWorker
5
5
  @queue = :bigbluebutton_rails
6
6
 
7
7
  def self.perform(server_id=nil)
8
- Rails.logger.info "BigbluebuttonUpdateRecordings worker running"
8
+ Rails.logger.info "BigbluebuttonUpdateRecordingsWorker worker running"
9
9
  BigbluebuttonRails::BackgroundTasks.update_recordings(server_id)
10
10
  end
11
11
  end
@@ -1,12 +1,12 @@
1
1
  # A resque worker to get the server configs from time to time (information such
2
2
  # as available layouts are updated).
3
- class BigbluebuttonUpdateServerConfigs
3
+ class BigbluebuttonUpdateServerConfigsWorker
4
4
  @queue = :bigbluebutton_rails
5
5
 
6
6
  def self.perform
7
- Rails.logger.info "BigbluebuttonUpdateServerConfigs worker running"
7
+ Rails.logger.info "BigbluebuttonUpdateServerConfigsWorker worker running"
8
8
  BigbluebuttonServer.find_each do |server|
9
- Rails.logger.info "BigbluebuttonUpdateServerConfigs updating configs for #{server.inspect}"
9
+ Rails.logger.info "BigbluebuttonUpdateServerConfigsWorker updating configs for #{server.inspect}"
10
10
 
11
11
  # update configs
12
12
  server.update_config
@@ -22,4 +22,5 @@ Gem::Specification.new do |s|
22
22
  s.add_dependency("resque", "~> 1.25.1")
23
23
  s.add_dependency("resque-scheduler", "~> 3.0")
24
24
  s.add_dependency("browser", "~> 0.8.0")
25
+ s.add_dependency("activerecord-import", "~> 1.0")
25
26
  end
@@ -68,6 +68,26 @@ en:
68
68
  bigbluebutton_server: "Web Conference Server"
69
69
  bigbluebutton_server_config: "Web Conference Server Configurations"
70
70
  bigbluebutton_rails:
71
+ api:
72
+ errors:
73
+ forbidden:
74
+ msg: "You are not authorized to make this API call"
75
+ title: "Forbidden"
76
+ invalid_pagination:
77
+ msg: "One or more pagination parameters are wrong"
78
+ title: "Invalid pagination parameters"
79
+ invalid_key:
80
+ msg: "The key informed is not valid for this room"
81
+ title: "Invalid key"
82
+ missing_params:
83
+ msg: "You did not inform one or more required parameters"
84
+ title: "Missing parameters"
85
+ room_not_found:
86
+ msg: "Could not find the target room"
87
+ title: "Resource not found"
88
+ room_not_running:
89
+ msg: "There's no meeting currently running in this room"
90
+ title: "Meeting not running"
71
91
  bigbluebutton: BigBlueButton
72
92
  metadata:
73
93
  errors:
@@ -89,6 +109,7 @@ en:
89
109
  default:
90
110
  description: "Meeting held on %{time} (UTC)"
91
111
  errors:
112
+ destroyed: "This recording no longer exist."
92
113
  check_for_server:
93
114
  no_server: "There's no server associated with this recording."
94
115
  play:
@@ -89,6 +89,7 @@ pt-br:
89
89
  default:
90
90
  description: "Reunião realizada em %{time} (UTC)"
91
91
  errors:
92
+ destroyed: "Esta gravação não existe mais."
92
93
  check_for_server:
93
94
  no_server: "Não há um servidor associado a esta gravação"
94
95
  play:
@@ -10,7 +10,13 @@ namespace :resque do
10
10
  require 'resque-scheduler'
11
11
 
12
12
  # you probably already have this somewhere
13
- Resque.redis = 'localhost:6379'
13
+ attrs = {
14
+ host: ENV['REDIS_HOST'] || 'localhost'
15
+ port: ENV['REDIS_PORT'] || 6379
16
+ db: ENV['REDIS_DB'] || 0
17
+ password: ENV['REDIS_PASSWORD'] || nil
18
+ }
19
+ Resque.redis = Redis.new(attrs)
14
20
 
15
21
  # If you want to be able to dynamically change the schedule,
16
22
  # uncomment this line. A dynamic schedule can be updated via the
@@ -1,17 +1,17 @@
1
1
  finish_meetings:
2
2
  every:
3
3
  - "5m"
4
- class: BigbluebuttonFinishMeetings
4
+ class: BigbluebuttonFinishMeetingsWorker
5
5
  description: "Checks for meetings that finished and mark as finished. Same as 'rake bigbluebutton_rails:meetings:finish'."
6
6
 
7
7
  update_recordings:
8
8
  every:
9
9
  - "30m"
10
- class: BigbluebuttonUpdateRecordings
10
+ class: BigbluebuttonUpdateRecordingsWorker
11
11
  description: "Gets the recordings in the server to populate the db. Same as 'rake bigbluebutton_rails:recordings:update'."
12
12
 
13
13
  update_server_configs:
14
14
  every:
15
15
  - "1h"
16
- class: BigbluebuttonUpdateServerConfigs
16
+ class: BigbluebuttonUpdateServerConfigsWorker
17
17
  description: "Updates the server configs that are stored locally. Same as 'rake bigbluebutton_rails:server_configs:update'."
@@ -0,0 +1,68 @@
1
+ version: '2'
2
+ services:
3
+
4
+ # development
5
+ dev:
6
+ build: .
7
+ tty: true
8
+ ports:
9
+ - "3000:3000"
10
+ depends_on:
11
+ - dev_db
12
+ - dev_redis
13
+ environment:
14
+ - REDIS_HOST=dev_redis
15
+ - REDIS_PASSWORD=BCsy8zMwZay66cim
16
+ - DATABASE_HOST=dev_db
17
+ - RAILS_ENV=development
18
+ volumes:
19
+ - $PWD:/usr/src/app
20
+ command: bash -c "cd spec/rails_app && rake db:create db:migrate && rails s -p3000"
21
+ dev_db:
22
+ image: mysql:5.6
23
+ expose:
24
+ - "3306"
25
+ volumes:
26
+ - ~/.docker-volumes/bigbluebutton_rails/dev/mysql/:/var/lib/mysql
27
+ environment:
28
+ - MYSQL_ROOT_PASSWORD=bbbrails
29
+ - MYSQL_DATABASE=bigbluebutton_rails_dev
30
+ - MYSQL_USER=bbbrails
31
+ - MYSQL_PASSWORD=bbbrails
32
+ dev_redis:
33
+ image: redis:3.2
34
+ expose:
35
+ - "6379"
36
+ command: redis-server --requirepass "BCsy8zMwZay66cim"
37
+
38
+ # test
39
+ test:
40
+ build: .
41
+ tty: true
42
+ depends_on:
43
+ - test_db
44
+ - test_redis
45
+ environment:
46
+ - REDIS_HOST=test_redis
47
+ - REDIS_PASSWORD=db62b65a8d19a213
48
+ - DATABASE_HOST=test_db
49
+ - RAILS_ENV=test
50
+ volumes:
51
+ - $PWD:/usr/src/app
52
+ command: rake rails_app:install rails_app:db spec
53
+ test_db:
54
+ image: mysql:5.6
55
+ expose:
56
+ - "3306"
57
+ volumes:
58
+ - ~/.docker-volumes/bigbluebutton_rails/test/mysql/:/var/lib/mysql
59
+ environment:
60
+ - MYSQL_ROOT_PASSWORD=bbbrails
61
+ - MYSQL_DATABASE=bigbluebutton_rails_test
62
+ - MYSQL_USER=bbbrails
63
+ - MYSQL_PASSWORD=bbbrails
64
+ test_redis:
65
+ image: redis:3.2
66
+ expose:
67
+ - "6379"
68
+ command: redis-server --requirepass "db62b65a8d19a213"
data/dumb-init_1.2.0 ADDED
Binary file
@@ -3,13 +3,12 @@ require 'browser'
3
3
  require 'resque'
4
4
  require 'resque-scheduler'
5
5
 
6
- require 'classes/bigbluebutton_attendee'
7
-
8
6
  require 'bigbluebutton_rails/rails'
9
7
  require 'bigbluebutton_rails/configuration'
10
8
  require 'bigbluebutton_rails/utils'
11
9
  require 'bigbluebutton_rails/controller_methods'
12
10
  require 'bigbluebutton_rails/internal_controller_methods'
11
+ require 'bigbluebutton_rails/api_controller_methods'
13
12
  require 'bigbluebutton_rails/background_tasks'
14
13
  require 'bigbluebutton_rails/rails/routes'
15
14
  require 'bigbluebutton_rails/exceptions'
@@ -0,0 +1,138 @@
1
+ module BigbluebuttonRails
2
+ module APIControllerMethods
3
+
4
+ def self.included(base)
5
+ base.class_eval do
6
+
7
+ def map_sort(param, default, allowed=[])
8
+ return default if param.blank? || param.empty?
9
+
10
+ param.split(',').inject('') do |memo, obj|
11
+ if obj[0] == '-'
12
+ attr = obj.gsub(/^-/, '')
13
+ order = 'DESC'
14
+ else
15
+ attr = obj
16
+ order = 'ASC'
17
+ end
18
+ if allowed.blank? || allowed.include?(attr)
19
+ memo = "#{memo}," unless memo.blank?
20
+ memo = "#{memo} #{attr} #{order}"
21
+ else
22
+ memo
23
+ end
24
+ end
25
+ end
26
+
27
+ def validate_pagination
28
+ param = params[:page]
29
+ if param
30
+ if param[:size]
31
+ size = Integer(param[:size]) rescue nil
32
+ return error_invalid_pagination if size.nil? || size < 1
33
+ end
34
+ if param[:number]
35
+ page = Integer(param[:number]) rescue nil
36
+ return error_invalid_pagination if page.nil? || page < 1
37
+ end
38
+ end
39
+ end
40
+
41
+ def map_pagination(param, default)
42
+ limit = default
43
+ if param && param[:size]
44
+ limit = Integer(param[:size]) rescue nil
45
+ end
46
+ limit = default if !limit || limit < 1
47
+
48
+ offset = 0
49
+ page = 1
50
+ if param && param[:number]
51
+ page = Integer(param[:number]) rescue nil
52
+ page ||= 1
53
+ offset = (page-1)*limit
54
+ offset = 0 if offset < 0
55
+ end
56
+
57
+ [limit, offset, page]
58
+ end
59
+
60
+ def map_pagination_links(current)
61
+ original = request.original_url
62
+
63
+ uri = URI.parse(original)
64
+ query = Rack::Utils.parse_query(uri.query)
65
+ uri.query = Rack::Utils.build_query(query) # just to encode the params
66
+
67
+ links = { self: uri.to_s }
68
+
69
+ if current - 1 > 0
70
+ query["page[number]"] = current - 1
71
+ uri.query = Rack::Utils.build_query(query)
72
+ links.merge!({ prev: uri.to_s })
73
+ end
74
+
75
+ query["page[number]"] = current + 1
76
+ uri.query = Rack::Utils.build_query(query)
77
+ links.merge!({ next: uri.to_s })
78
+
79
+ query["page[number]"] = 1
80
+ uri.query = Rack::Utils.build_query(query)
81
+ links.merge!({ first: uri.to_s })
82
+
83
+ links
84
+ end
85
+
86
+ def map_search(param)
87
+ if param && param[:terms]
88
+ param[:terms].split(',').map(&:strip)
89
+ end
90
+ end
91
+
92
+ def error_room_not_found
93
+ msg = t('bigbluebutton_rails.api.errors.room_not_found.msg')
94
+ title = t('bigbluebutton_rails.api.errors.room_not_found.title')
95
+ @errors = [BigbluebuttonRails::APIError.new(msg, 404, title)]
96
+ render 'bigbluebutton/api/error'
97
+ end
98
+
99
+ def error_room_not_running
100
+ msg = t('bigbluebutton_rails.api.errors.room_not_running.msg')
101
+ title = t('bigbluebutton_rails.api.errors.room_not_running.title')
102
+ @errors = [BigbluebuttonRails::APIError.new(msg, 400, title)]
103
+ render 'bigbluebutton/api/error'
104
+ end
105
+
106
+ def error_missing_params
107
+ msg = t('bigbluebutton_rails.api.errors.missing_params.msg')
108
+ title = t('bigbluebutton_rails.api.errors.missing_params.title')
109
+ @errors = [BigbluebuttonRails::APIError.new(msg, 400, title)]
110
+ render 'bigbluebutton/api/error'
111
+ end
112
+
113
+ def error_forbidden
114
+ msg = t('bigbluebutton_rails.api.errors.forbidden.msg')
115
+ title = t('bigbluebutton_rails.api.errors.forbidden.title')
116
+ @errors = [BigbluebuttonRails::APIError.new(msg, 403, title)]
117
+ render 'bigbluebutton/api/error'
118
+ end
119
+
120
+ def error_invalid_key
121
+ msg = t('bigbluebutton_rails.api.errors.invalid_key.msg')
122
+ title = t('bigbluebutton_rails.api.errors.invalid_key.title')
123
+ @errors = [BigbluebuttonRails::APIError.new(msg, 403, title)]
124
+ render 'bigbluebutton/api/error'
125
+ end
126
+
127
+ def error_invalid_pagination
128
+ msg = t('bigbluebutton_rails.api.errors.invalid_pagination.msg')
129
+ title = t('bigbluebutton_rails.api.errors.invalid_pagination.title')
130
+ @errors = [BigbluebuttonRails::APIError.new(msg, 400, title)]
131
+ render 'bigbluebutton/api/error'
132
+ end
133
+
134
+ end
135
+ end
136
+
137
+ end
138
+ end