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.
Completed
Pull Request — master (#869)
by Ahmad
04:07
created

AdminsController.index()   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 AdminsController < ApplicationController
20
  include Pagy::Backend
21
  include Themer
22
  include Emailer
23
  include Recorder
24
  include Rolify
25
26
  manage_users = [:edit_user, :promote, :demote, :ban_user, :unban_user, :approve, :reset]
27
  manage_deleted_users = [:undelete]
28
  authorize_resource class: false
29
  before_action :find_user, only: manage_users
30
  before_action :find_deleted_user, only: manage_deleted_users
31
  before_action :verify_admin_of_user, only: [manage_users, manage_deleted_users]
32
33
  # GET /admins
34
  def index
35
    # Initializa the data manipulation variables
36
    @search = params[:search] || ""
37
    @order_column = params[:column] && params[:direction] != "none" ? params[:column] : "created_at"
38
    @order_direction = params[:direction] && params[:direction] != "none" ? params[:direction] : "DESC"
39
40
    @role = params[:role] ? Role.find_by(name: params[:role], provider: @user_domain) : nil
41
    @tab = params[:tab] || "active"
42
43
    @pagy, @users = pagy(user_list)
44
  end
45
46
  # GET /admins/site_settings
47
  def site_settings
48
  end
49
50
  # GET /admins/server_recordings
51
  def server_recordings
52
    server_rooms = if Rails.configuration.loadbalanced_configuration
53
      Room.includes(:owner).where(users: { provider: @user_domain }).pluck(:bbb_id)
54
    else
55
      Room.pluck(:bbb_id)
56
    end
57
58
    @search, @order_column, @order_direction, recs =
59
      all_recordings(server_rooms, params.permit(:search, :column, :direction), true, true)
60
61
    @pagy, @recordings = pagy_array(recs)
62
  end
63
64
  # MANAGE USERS
65
66
  # GET /admins/edit/:user_uid
67
  def edit_user
68
  end
69
70
  # POST /admins/ban/:user_uid
71
  def ban_user
72
    @user.roles = []
73
    @user.add_role :denied
74
    redirect_to admins_path, flash: { success: I18n.t("administrator.flash.banned") }
75
  end
76
77
  # POST /admins/unban/:user_uid
78
  def unban_user
79
    @user.remove_role :denied
80
    @user.add_role :user
81
    redirect_to admins_path, flash: { success: I18n.t("administrator.flash.unbanned") }
82
  end
83
84
  # POST /admins/approve/:user_uid
85
  def approve
86
    @user.remove_role :pending
87
88
    send_user_approved_email(@user)
89
90
    redirect_to admins_path, flash: { success: I18n.t("administrator.flash.approved") }
91
  end
92
93
  # POST /admins/approve/:user_uid
94
  def undelete
95
    # Undelete the user and all of his rooms
96
    @user.undelete!
97
    @user.rooms.deleted.each(&:undelete!)
98
99
    redirect_to admins_path, flash: { success: I18n.t("administrator.flash.restored") }
100
  end
101
102
  # POST /admins/invite
103
  def invite
104
    emails = params[:invite_user][:email].split(",")
105
106
    emails.each do |email|
107
      invitation = create_or_update_invite(email)
108
109
      send_invitation_email(current_user.name, email, invitation.invite_token)
110
    end
111
112
    redirect_to admins_path
113
  end
114
115
  # GET /admins/reset
116
  def reset
117
    @user.create_reset_digest
118
119
    send_password_reset_email(@user)
120
121
    redirect_to admins_path, flash: { success: I18n.t("administrator.flash.reset_password") }
122
  end
123
  # SITE SETTINGS
124
125
  # POST /admins/update_settings
126
  def update_settings
127
    @settings.update_value(params[:setting], params[:value])
128
129
    flash_message = I18n.t("administrator.flash.settings")
130
131
    if params[:value] == "Default Recording Visibility"
132
      flash_message += ". " + I18n.t("administrator.site_settings.recording_visibility.warning")
133
    end
134
135
    redirect_to admin_site_settings_path, flash: { success: flash_message }
136
  end
137
138
  # POST /admins/color
139
  def coloring
140
    @settings.update_value("Primary Color", params[:value])
141
    @settings.update_value("Primary Color Lighten", color_lighten(params[:value]))
142
    @settings.update_value("Primary Color Darken", color_darken(params[:value]))
143
    redirect_to admin_site_settings_path, flash: { success: I18n.t("administrator.flash.settings") }
144
  end
145
146
  # POST /admins/registration_method/:method
147
  def registration_method
148
    new_method = Rails.configuration.registration_methods[params[:value].to_sym]
149
150
    # Only allow change to Join by Invitation if user has emails enabled
151
    if !Rails.configuration.enable_email_verification && new_method == Rails.configuration.registration_methods[:invite]
152
      redirect_to admin_site_settings_path,
153
        flash: { alert: I18n.t("administrator.flash.invite_email_verification") }
154
    else
155
      @settings.update_value("Registration Method", new_method)
156
      redirect_to admin_site_settings_path,
157
        flash: { success: I18n.t("administrator.flash.registration_method_updated") }
158
    end
159
  end
160
161
  # POST /admins/clear_auth
162
  def clear_auth
163
    User.include_deleted.where(provider: @user_domain).update_all(social_uid: nil)
164
165
    redirect_to admin_site_settings_path, flash: { success: I18n.t("administrator.flash.settings") }
166
  end
167
168
  # ROLES
169
170
  # GET /admins/roles
171
  def roles
172
    @roles = all_roles(params[:selected_role])
173
  end
174
175
  # POST /admins/role
176
  # This method creates a new role scoped to the users provider
177
  def new_role
178
    new_role = create_role(params[:role][:name])
179
180
    return redirect_to admin_roles_path, flash: { alert: I18n.t("administrator.roles.invalid_create") } if new_role.nil?
181
182
    redirect_to admin_roles_path(selected_role: new_role.id)
183
  end
184
185
  # PATCH /admin/roles/order
186
  # This updates the priority of a site's roles
187
  # Note: A lower priority role will always get used before a higher priority one
188
  def change_role_order
189
    unless update_priority(params[:role])
190
      redirect_to admin_roles_path, flash: { alert: I18n.t("administrator.roles.invalid_order") }
191
    end
192
  end
193
194
  # POST /admin/role/:role_id
195
  # This method updates the permissions assigned to a role
196
  def update_role
197
    role = Role.find(params[:role_id])
198
    flash[:alert] = I18n.t("administrator.roles.invalid_update") unless update_permissions(role)
199
    redirect_to admin_roles_path(selected_role: role.id)
200
  end
201
202
  # DELETE admins/role/:role_id
203
  # This deletes a role
204
  def delete_role
205
    role = Role.find(params[:role_id])
206
207
    # Make sure no users are assigned to the role and the role isn't a reserved role
208
    # before deleting
209
    if role.users.count.positive?
210
      flash[:alert] = I18n.t("administrator.roles.role_has_users", user_count: role.users.count)
211
      return redirect_to admin_roles_path(selected_role: role.id)
212
    elsif Role::RESERVED_ROLE_NAMES.include?(role) || role.provider != @user_domain ||
213
          role.priority <= current_user.highest_priority_role.priority
214
      return redirect_to admin_roles_path(selected_role: role.id)
215
    else
216
      role.role_permissions.delete_all
217
      role.delete
218
    end
219
220
    redirect_to admin_roles_path
221
  end
222
223
  private
224
225
  def find_user
226
    @user = User.where(uid: params[:user_uid]).includes(:roles).first
227
  end
228
229
  def find_deleted_user
230
    @user = User.deleted.where(uid: params[:user_uid]).includes(:roles).first
231
  end
232
233
  # Verifies that admin is an administrator of the user in the action
234
  def verify_admin_of_user
235
    redirect_to admins_path,
236
      flash: { alert: I18n.t("administrator.flash.unauthorized") } unless current_user.admin_of?(@user)
237
  end
238
239
  # Gets the list of users based on your configuration
240
  def user_list
241
    current_role = @role
242
243
    initial_user = case @tab
244
      when "active"
245
        User.without_role(:pending).without_role(:denied)
246
      when "deleted"
247
        User.deleted
248
      else
249
        User
250
    end
251
252
    current_role = Role.find_by(name: @tab, provider: @user_domain) if @tab == "pending" || @tab == "denied"
253
254
    initial_list = if current_user.has_role? :super_admin
255
      initial_user.where.not(id: current_user.id)
256
    else
257
      initial_user.without_role(:super_admin).where.not(id: current_user.id)
258
    end
259
260
    if Rails.configuration.loadbalanced_configuration
261
      initial_list.where(provider: @user_domain)
262
                  .admins_search(@search, current_role)
263
                  .admins_order(@order_column, @order_direction)
264
    else
265
      initial_list.admins_search(@search, current_role)
266
                  .admins_order(@order_column, @order_direction)
267
    end
268
  end
269
270
  # Creates the invite if it doesn't exist, or updates the updated_at time if it does
271
  def create_or_update_invite(email)
272
    invite = Invitation.find_by(email: email, provider: @user_domain)
273
274
    # Invite already exists
275
    if invite.present?
276
      # Updates updated_at to now
277
      invite.touch
278
    else
279
      # Creates invite
280
      invite = Invitation.create(email: email, provider: @user_domain)
281
    end
282
283
    invite
284
  end
285
end
286