GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Pull Request — v2.4-alpha (#765)
by Ahmad
04:25
created

RoomsController.default_meeting_options()   A

Complexity

Conditions 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
dl 0
loc 11
rs 9.85
c 1
b 0
f 0
1
# frozen_string_literal: true
2
3
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
4
#
5
# Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
6
#
7
# This program is free software; you can redistribute it and/or modify it under the
8
# terms of the GNU Lesser General Public License as published by the Free Software
9
# Foundation; either version 3.0 of the License, or (at your option) any later
10
# version.
11
#
12
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
13
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
15
#
16
# You should have received a copy of the GNU Lesser General Public License along
17
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
18
19
class RoomsController < ApplicationController
20
  include Pagy::Backend
21
  include Recorder
22
  include Joiner
23
24
  before_action :validate_accepted_terms, unless: -> { !Rails.configuration.terms }
25
  before_action :validate_verified_email, except: [:show, :join],
26
                unless: -> { !Rails.configuration.enable_email_verification }
27
  before_action :find_room, except: [:create, :join_specific_room]
28
  before_action :verify_room_ownership, except: [:create, :show, :join, :logout, :login, :join_specific_room]
29
  before_action :verify_room_owner_verified, only: [:show, :join],
30
                unless: -> { !Rails.configuration.enable_email_verification }
31
  before_action :verify_user_not_admin, only: [:show]
32
33
  # POST /
34
  def create
35
    # Return to root if user is not signed in
36
    return redirect_to root_path unless current_user
37
38
    # Check if the user has not exceeded the room limit
39
    return redirect_to current_user.main_room, flash: { alert: I18n.t("room.room_limit") } if room_limit_exceeded
40
41
    # Create room
42
    @room = Room.new(name: room_params[:name], access_code: room_params[:access_code])
43
    @room.owner = current_user
44
    @room.room_settings = create_room_settings_string(room_params)
45
46
    # Save the room
47
    if @room.save
48
      logger.info "Support: #{current_user.email} has created a new room #{@room.uid}."
49
50
      # Redirect to room is auto join was not turned on
51
      return redirect_to @room,
52
        flash: { success: I18n.t("room.create_room_success") } unless room_params[:auto_join] == "1"
53
54
      # Start the room if auto join was turned on
55
      start
56
    else
57
      redirect_to current_user.main_room, flash: { alert: I18n.t("room.create_room_error") }
58
    end
59
  end
60
61
  # GET /:room_uid
62
  def show
63
    @anyone_can_start = JSON.parse(@room[:room_settings])["anyoneCanStart"]
64
    @room_running = room_running?(@room.bbb_id)
65
66
    # If its the current user's room
67
    if current_user && @room.owned_by?(current_user)
68
      if current_user.highest_priority_role.can_create_rooms
69
        # User is allowed to have rooms
70
        @search, @order_column, @order_direction, recs =
71
          recordings(@room.bbb_id, params.permit(:search, :column, :direction), true)
72
73
        @pagy, @recordings = pagy_array(recs)
74
      else
75
        # Render view for users that cant create rooms
76
        @recent_rooms = Room.where(id: cookies.encrypted["#{current_user.uid}_recently_joined_rooms"])
77
        render :cant_create_rooms
78
      end
79
    else
80
      # Get users name
81
      @name = if current_user
82
        current_user.name
83
      elsif cookies.encrypted[:greenlight_name]
84
        cookies.encrypted[:greenlight_name]
85
      else
86
        ""
87
      end
88
89
      @search, @order_column, @order_direction, pub_recs =
90
        public_recordings(@room.bbb_id, params.permit(:search, :column, :direction), true)
91
92
      @pagy, @public_recordings = pagy_array(pub_recs)
93
94
      render :join
95
    end
96
  end
97
98
  # PATCH /:room_uid
99
  def update
100
    if params[:setting] == "rename_header"
101
      update_room_attributes("name")
102
    elsif params[:setting] == "rename_recording"
103
      update_recording(params[:record_id], "meta_name" => params[:record_name])
104
    end
105
106
    redirect_back fallback_location: room_path
107
  end
108
109
  # POST /:room_uid
110
  def join
111
    return redirect_to root_path,
112
      flash: { alert: I18n.t("administrator.site_settings.authentication.user-info") } if auth_required
113
114
    unless @room.owned_by?(current_user)
115
      # Don't allow users to join unless they have a valid access code or the room doesn't have an access code
116
      if @room.access_code && [email protected]_code.empty? && @room.access_code != session[:access_code]
117
        return redirect_to room_path(room_uid: params[:room_uid]), flash: { alert: I18n.t("room.access_code_required") }
118
      end
119
120
      # Join name not passed.
121
      return unless params[:join_name]
122
123
      # Assign join name if passed.
124
      @join_name = params[@room.invite_path][:join_name] if params[@room.invite_path]
125
    end
126
127
    # create or update cookie with join name
128
    cookies.encrypted[:greenlight_name] = @join_name unless cookies.encrypted[:greenlight_name] == @join_name
129
130
    if current_user
131
      # create or update cookie to track the three most recent rooms a user joined
132
      recently_joined_rooms = cookies.encrypted["#{current_user.uid}_recently_joined_rooms"].to_a
133
      cookies.encrypted["#{current_user.uid}_recently_joined_rooms"] =
134
        recently_joined_rooms.prepend(@room.id).uniq[0..2]
135
    end
136
137
    logger.info "Support: #{current_user.present? ? current_user.email : @join_name} is joining room #{@room.uid}"
138
    join_room(default_meeting_options)
139
  end
140
141
  # DELETE /:room_uid
142
  def destroy
143
    # Don't delete the users home room.
144
    if @room.owned_by?(current_user) && @room != current_user.main_room
145
      @room.destroy
146
      delete_all_recordings(@room.bbb_id)
147
    end
148
149
    redirect_to current_user.main_room
150
  end
151
152
  # POST /room/join
153
  def join_specific_room
154
    room_uid = params[:join_room][:url].split('/').last
155
156
    begin
157
      @room = Room.find_by!(uid: room_uid)
158
    rescue ActiveRecord::RecordNotFound
159
      return redirect_to current_user.main_room, alert: I18n.t("room.no_room.invalid_room_uid")
160
    end
161
162
    redirect_to room_path(@room)
163
  end
164
165
  # POST /:room_uid/start
166
  def start
167
    logger.info "Support: #{current_user.email} is starting room #{@room.uid}"
168
169
    # Join the user in and start the meeting.
170
    opts = default_meeting_options
171
    opts[:user_is_moderator] = true
172
173
    # Include the user's choices for the room settings
174
    room_settings = JSON.parse(@room[:room_settings])
175
    opts[:mute_on_start] = room_settings["muteOnStart"] if room_settings["muteOnStart"]
176
    opts[:require_moderator_approval] = room_settings["requireModeratorApproval"]
177
178
    begin
179
      redirect_to join_path(@room, current_user.name, opts, current_user.uid)
180
    rescue BigBlueButton::BigBlueButtonException => e
181
      logger.error("Support: #{@room.uid} start failed: #{e}")
182
183
      redirect_to room_path, alert: I18n.t(e.key.to_s.underscore, default: I18n.t("bigbluebutton_exception"))
184
    end
185
186
    # Notify users that the room has started.
187
    # Delay 5 seconds to allow for server start, although the request will retry until it succeeds.
188
    NotifyUserWaitingJob.set(wait: 5.seconds).perform_later(@room)
189
  end
190
191
  # POST /:room_uid/update_settings
192
  def update_settings
193
    begin
194
      raise "Room name can't be blank" if room_params[:name].empty?
195
196
      @room = Room.find_by!(uid: params[:room_uid])
197
      # Update the rooms settings
198
      update_room_attributes("settings")
199
      # Update the rooms name if it has been changed
200
      update_room_attributes("name") if @room.name != room_params[:name]
201
      # Update the room's access code if it has changed
202
      update_room_attributes("access_code") if @room.access_code != room_params[:access_code]
203
204
      flash[:success] = I18n.t("room.update_settings_success")
205
    rescue => e
206
      logger.error "Support: Error in updating room settings: #{e}"
207
      flash[:alert] = I18n.t("room.update_settings_error")
208
    end
209
210
    redirect_to room_path
211
  end
212
213
  # GET /:room_uid/logout
214
  def logout
215
    logger.info "Support: #{current_user.present? ? current_user.email : 'Guest'} has left room #{@room.uid}"
216
217
    # Redirect the correct page.
218
    redirect_to @room
219
  end
220
221
  # POST /:room_uid/login
222
  def login
223
    session[:access_code] = room_params[:access_code]
224
225
    flash[:alert] = I18n.t("room.access_code_required") if session[:access_code] != @room.access_code
226
227
    redirect_to room_path(@room.uid)
228
  end
229
230
  private
231
232
  def update_room_attributes(update_type)
233
    if @room.owned_by?(current_user) && @room != current_user.main_room
234
      if update_type.eql? "name"
235
        @room.update_attributes(name: params[:room_name] || room_params[:name])
236
      elsif update_type.eql? "settings"
237
        room_settings_string = create_room_settings_string(room_params)
238
        @room.update_attributes(room_settings: room_settings_string)
239
      elsif update_type.eql? "access_code"
240
        @room.update_attributes(access_code: room_params[:access_code])
241
      end
242
    end
243
  end
244
245
  def create_room_settings_string(options)
246
    room_settings = {}
247
    room_settings["muteOnStart"] = options[:mute_on_join] == "1"
248
249
    room_settings["requireModeratorApproval"] = options[:require_moderator_approval] == "1"
250
251
    room_settings["anyoneCanStart"] = options[:anyone_can_start] == "1"
252
253
    room_settings["joinModerator"] = options[:all_join_moderator] == "1"
254
255
    room_settings.to_json
256
  end
257
258
  def room_params
259
    params.require(:room).permit(:name, :auto_join, :mute_on_join, :access_code,
260
      :require_moderator_approval, :anyone_can_start, :all_join_moderator)
261
  end
262
263
  # Find the room from the uid.
264
  def find_room
265
    @room = Room.find_by!(uid: params[:room_uid])
266
  end
267
268
  # Ensure the user is logged into the room they are accessing.
269
  def verify_room_ownership
270
    bring_to_room unless @room.owned_by?(current_user)
271
  end
272
273
  # Redirects a user to their room.
274
  def bring_to_room
275
    if current_user
276
      # Redirect authenticated users to their room.
277
      redirect_to room_path(current_user.main_room)
278
    else
279
      # Redirect unauthenticated users to root.
280
      redirect_to root_path
281
    end
282
  end
283
284
  def validate_accepted_terms
285
    redirect_to terms_path if current_user && !current_user&.accepted_terms
286
  end
287
288
  def validate_verified_email
289
    redirect_to account_activation_path(current_user) if current_user && !current_user&.activated?
290
  end
291
292
  def verify_room_owner_verified
293
    unless @room.owner.activated?
294
      flash[:alert] = t("room.unavailable")
295
296
      if current_user && [email protected]_by?(current_user)
297
        redirect_to current_user.main_room
298
      else
299
        redirect_to root_path
300
      end
301
    end
302
  end
303
304
  def verify_user_not_admin
305
    redirect_to admins_path if current_user&.has_role?(:super_admin)
306
  end
307
308
  def auth_required
309
    @settings.get_value("Room Authentication") == "true" && current_user.nil?
310
  end
311
312
  def room_limit_exceeded
313
    limit = @settings.get_value("Room Limit").to_i
314
315
    # Does not apply to admin or users that aren't signed in
316
    # 15+ option is used as unlimited
317
    return false if current_user&.has_role?(:admin) || limit == 15
318
319
    current_user.rooms.length >= limit
320
  end
321
  helper_method :room_limit_exceeded
322
end
323