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 — master (#848)
by Ahmad
04:48
created

RoomsController.verify_room_ownership_or_admin()   A

Complexity

Conditions 3

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
dl 0
loc 3
rs 10
c 0
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_or_admin, only: [:start, :update_settings, :destroy]
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 and redirect if it fails
47
    return redirect_to current_user.main_room, flash: { alert: I18n.t("room.create_room_error") } unless @room.save
48
49
    logger.info "Support: #{current_user.email} has created a new room #{@room.uid}."
50
51
    # Redirect to room is auto join was not turned on
52
    return redirect_to @room,
53
      flash: { success: I18n.t("room.create_room_success") } unless room_params[:auto_join] == "1"
54
55
    # Start the room if auto join was turned on
56
    start
57
  end
58
59
  # GET /:room_uid
60
  def show
61
    @anyone_can_start = JSON.parse(@room[:room_settings])["anyoneCanStart"]
62
    @room_running = room_running?(@room.bbb_id)
63
64
    # If its the current user's room
65
    if current_user && @room.owned_by?(current_user)
66
      if current_user.highest_priority_role.get_permission("can_create_rooms")
67
        # User is allowed to have rooms
68
        @search, @order_column, @order_direction, recs =
69
          recordings(@room.bbb_id, params.permit(:search, :column, :direction), true)
70
71
        @pagy, @recordings = pagy_array(recs)
72
      else
73
        # Render view for users that cant create rooms
74
        @recent_rooms = Room.where(id: cookies.encrypted["#{current_user.uid}_recently_joined_rooms"])
75
        render :cant_create_rooms
76
      end
77
    else
78
      return redirect_to root_path, flash: { alert: I18n.t("room.invalid_provider") } if incorrect_user_domain
79
80
      show_user_join
81
    end
82
  end
83
84
  # POST /:room_uid
85
  def join
86
    return redirect_to root_path,
87
      flash: { alert: I18n.t("administrator.site_settings.authentication.user-info") } if auth_required
88
89
    unless @room.owned_by?(current_user)
90
      # Don't allow users to join unless they have a valid access code or the room doesn't have an access code
91
      if @room.access_code && [email protected]_code.empty? && @room.access_code != session[:access_code]
92
        return redirect_to room_path(room_uid: params[:room_uid]), flash: { alert: I18n.t("room.access_code_required") }
93
      end
94
95
      # Assign join name if passed.
96
      if params[@room.invite_path]
97
        @join_name = params[@room.invite_path][:join_name]
98
      elsif !params[:join_name]
99
        # Join name not passed.
100
        return redirect_to root_path
101
      end
102
    end
103
104
    # create or update cookie with join name
105
    cookies.encrypted[:greenlight_name] = @join_name unless cookies.encrypted[:greenlight_name] == @join_name
106
107
    save_recent_rooms
108
109
    logger.info "Support: #{current_user.present? ? current_user.email : @join_name} is joining room #{@room.uid}"
110
    join_room(default_meeting_options)
111
  end
112
113
  # DELETE /:room_uid
114
  def destroy
115
    begin
116
      # Don't delete the users home room.
117
      raise I18n.t("room.delete.home_room") if @room == @room.owner.main_room
118
      @room.destroy
119
    rescue => e
120
      flash[:alert] = I18n.t("room.delete.fail", error: e)
121
    else
122
      flash[:success] = I18n.t("room.delete.success")
123
    end
124
    redirect_back fallback_location: current_user.main_room
125
  end
126
127
  # POST /room/join
128
  def join_specific_room
129
    room_uid = params[:join_room][:url].split('/').last
130
131
    begin
132
      @room = Room.find_by!(uid: room_uid)
133
    rescue ActiveRecord::RecordNotFound
134
      return redirect_to current_user.main_room, alert: I18n.t("room.no_room.invalid_room_uid")
135
    end
136
137
    redirect_to room_path(@room)
138
  end
139
140
  # POST /:room_uid/start
141
  def start
142
    logger.info "Support: #{current_user.email} is starting room #{@room.uid}"
143
144
    # Join the user in and start the meeting.
145
    opts = default_meeting_options
146
    opts[:user_is_moderator] = true
147
148
    # Include the user's choices for the room settings
149
    room_settings = JSON.parse(@room[:room_settings])
150
    opts[:mute_on_start] = room_settings["muteOnStart"]
151
    opts[:require_moderator_approval] = room_settings["requireModeratorApproval"]
152
153
    begin
154
      redirect_to join_path(@room, current_user.name, opts, current_user.uid)
155
    rescue BigBlueButton::BigBlueButtonException => e
156
      logger.error("Support: #{@room.uid} start failed: #{e}")
157
158
      redirect_to room_path, alert: I18n.t(e.key.to_s.underscore, default: I18n.t("bigbluebutton_exception"))
159
    end
160
161
    # Notify users that the room has started.
162
    # Delay 5 seconds to allow for server start, although the request will retry until it succeeds.
163
    NotifyUserWaitingJob.set(wait: 5.seconds).perform_later(@room)
164
  end
165
166
  # POST /:room_uid/update_settings
167
  def update_settings
168
    begin
169
      options = params[:room].nil? ? params : params[:room]
170
      raise "Room name can't be blank" if options[:name].blank?
171
      raise "Unauthorized Request" if @room == current_user.main_room
172
173
      # Update the rooms values
174
      room_settings_string = create_room_settings_string(options)
175
176
      @room.update_attributes(
177
        name: options[:name],
178
        room_settings: room_settings_string,
179
        access_code: options[:access_code]
180
      )
181
182
      flash[:success] = I18n.t("room.update_settings_success")
183
    rescue => e
184
      logger.error "Support: Error in updating room settings: #{e}"
185
      flash[:alert] = I18n.t("room.update_settings_error")
186
    end
187
188
    redirect_back fallback_location: room_path(@room)
189
  end
190
191
  # GET /:room_uid/logout
192
  def logout
193
    logger.info "Support: #{current_user.present? ? current_user.email : 'Guest'} has left room #{@room.uid}"
194
195
    # Redirect the correct page.
196
    redirect_to @room
197
  end
198
199
  # POST /:room_uid/login
200
  def login
201
    session[:access_code] = room_params[:access_code]
202
203
    flash[:alert] = I18n.t("room.access_code_required") if session[:access_code] != @room.access_code
204
205
    redirect_to room_path(@room.uid)
206
  end
207
208
  private
209
210
  def create_room_settings_string(options)
211
    room_settings = {
212
      "muteOnStart": options[:mute_on_join] == "1",
213
      "requireModeratorApproval": options[:require_moderator_approval] == "1",
214
      "anyoneCanStart": options[:anyone_can_start] == "1",
215
      "joinModerator": options[:all_join_moderator] == "1",
216
    }
217
218
    room_settings.to_json
219
  end
220
221
  def room_params
222
    params.require(:room).permit(:name, :auto_join, :mute_on_join, :access_code,
223
      :require_moderator_approval, :anyone_can_start, :all_join_moderator)
224
  end
225
226
  # Find the room from the uid.
227
  def find_room
228
    @room = Room.find_by!(uid: params[:room_uid])
229
  end
230
231
  # Ensure the user either owns the room or is an admin of the room owner
232
  def verify_room_ownership_or_admin
233
    return redirect_to root_path if [email protected]_by?(current_user) && !current_user&.admin_of?(@room.owner)
234
  end
235
236
  def validate_accepted_terms
237
    redirect_to terms_path if current_user && !current_user&.accepted_terms
238
  end
239
240
  def validate_verified_email
241
    redirect_to account_activation_path(current_user) if current_user && !current_user&.activated?
242
  end
243
244
  def verify_room_owner_verified
245
    unless @room.owner.activated?
246
      flash[:alert] = t("room.unavailable")
247
      redirect_to root_path
248
    end
249
  end
250
251
  def verify_user_not_admin
252
    redirect_to admins_path if current_user&.has_role?(:super_admin)
253
  end
254
255
  def auth_required
256
    @settings.get_value("Room Authentication") == "true" && current_user.nil?
257
  end
258
259
  def room_limit_exceeded
260
    limit = @settings.get_value("Room Limit").to_i
261
262
    # Does not apply to admin or users that aren't signed in
263
    # 15+ option is used as unlimited
264
    return false if current_user&.has_role?(:admin) || limit == 15
265
266
    current_user.rooms.length >= limit
267
  end
268
  helper_method :room_limit_exceeded
269
end
270