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 (#816)
by Ahmad
06:49 queued 02:04
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
    @user.undelete!
96
97
    redirect_to admins_path, flash: { success: I18n.t("administrator.flash.restored") }
98
  end
99
100
  # POST /admins/invite
101
  def invite
102
    emails = params[:invite_user][:email].split(",")
103
104
    emails.each do |email|
105
      invitation = create_or_update_invite(email)
106
107
      send_invitation_email(current_user.name, email, invitation.invite_token)
108
    end
109
110
    redirect_to admins_path
111
  end
112
113
  # GET /admins/reset
114
  def reset
115
    @user.create_reset_digest
116
117
    send_password_reset_email(@user)
118
119
    redirect_to admins_path, flash: { success: I18n.t("administrator.flash.reset_password") }
120
  end
121
  # SITE SETTINGS
122
123
  # POST /admins/update_settings
124
  def update_settings
125
    @settings.update_value(params[:setting], params[:value])
126
127
    flash_message = I18n.t("administrator.flash.settings")
128
129
    if params[:value] == "Default Recording Visibility"
130
      flash_message += ". " + I18n.t("administrator.site_settings.recording_visibility.warning")
131
    end
132
133
    redirect_to admin_site_settings_path, flash: { success: flash_message }
134
  end
135
136
  # POST /admins/color
137
  def coloring
138
    @settings.update_value("Primary Color", params[:value])
139
    @settings.update_value("Primary Color Lighten", color_lighten(params[:value]))
140
    @settings.update_value("Primary Color Darken", color_darken(params[:value]))
141
    redirect_to admin_site_settings_path, flash: { success: I18n.t("administrator.flash.settings") }
142
  end
143
144
  # POST /admins/registration_method/:method
145
  def registration_method
146
    new_method = Rails.configuration.registration_methods[params[:value].to_sym]
147
148
    # Only allow change to Join by Invitation if user has emails enabled
149
    if !Rails.configuration.enable_email_verification && new_method == Rails.configuration.registration_methods[:invite]
150
      redirect_to admin_site_settings_path,
151
        flash: { alert: I18n.t("administrator.flash.invite_email_verification") }
152
    else
153
      @settings.update_value("Registration Method", new_method)
154
      redirect_to admin_site_settings_path,
155
        flash: { success: I18n.t("administrator.flash.registration_method_updated") }
156
    end
157
  end
158
159
  # ROLES
160
161
  # GET /admins/roles
162
  def roles
163
    @roles = all_roles(params[:selected_role])
164
  end
165
166
  # POST /admins/role
167
  # This method creates a new role scoped to the users provider
168
  def new_role
169
    new_role = create_role(params[:role][:name])
170
171
    return redirect_to admin_roles_path, flash: { alert: I18n.t("administrator.roles.invalid_create") } if new_role.nil?
172
173
    redirect_to admin_roles_path(selected_role: new_role.id)
174
  end
175
176
  # PATCH /admin/roles/order
177
  # This updates the priority of a site's roles
178
  # Note: A lower priority role will always get used before a higher priority one
179
  def change_role_order
180
    unless update_priority(params[:role])
181
      redirect_to admin_roles_path, flash: { alert: I18n.t("administrator.roles.invalid_order") }
182
    end
183
  end
184
185
  # POST /admin/role/:role_id
186
  # This method updates the permissions assigned to a role
187
  def update_role
188
    role = Role.find(params[:role_id])
189
    flash[:alert] = I18n.t("administrator.roles.invalid_update") unless update_permissions(role)
190
    redirect_to admin_roles_path(selected_role: role.id)
191
  end
192
193
  # DELETE admins/role/:role_id
194
  # This deletes a role
195
  def delete_role
196
    role = Role.find(params[:role_id])
197
198
    # Make sure no users are assigned to the role and the role isn't a reserved role
199
    # before deleting
200
    if role.users.count.positive?
201
      flash[:alert] = I18n.t("administrator.roles.role_has_users", user_count: role.users.count)
202
      return redirect_to admin_roles_path(selected_role: role.id)
203
    elsif Role::RESERVED_ROLE_NAMES.include?(role) || role.provider != @user_domain ||
204
          role.priority <= current_user.highest_priority_role.priority
205
      return redirect_to admin_roles_path(selected_role: role.id)
206
    else
207
      role.role_permissions.delete_all
208
      role.delete
209
    end
210
211
    redirect_to admin_roles_path
212
  end
213
214
  private
215
216
  def find_user
217
    @user = User.where(uid: params[:user_uid]).includes(:roles).first
218
  end
219
220
  def find_deleted_user
221
    @user = User.deleted.where(uid: params[:user_uid]).includes(:roles).first
222
  end
223
224
  # Verifies that admin is an administrator of the user in the action
225
  def verify_admin_of_user
226
    redirect_to admins_path,
227
      flash: { alert: I18n.t("administrator.flash.unauthorized") } unless current_user.admin_of?(@user)
228
  end
229
230
  # Gets the list of users based on your configuration
231
  def user_list
232
    current_role = @role
233
234
    initial_user = case @tab
235
      when "active"
236
        User.without_role(:pending).without_role(:denied)
237
      when "deleted"
238
        User.deleted
239
      else
240
        User
241
    end
242
243
    current_role = Role.find_by(name: @tab, provider: @user_domain) if @tab == "pending" || @tab == "denied"
244
245
    initial_list = if current_user.has_role? :super_admin
246
      initial_user.where.not(id: current_user.id)
247
    else
248
      initial_user.without_role(:super_admin).where.not(id: current_user.id)
249
    end
250
251
    if Rails.configuration.loadbalanced_configuration
252
      initial_list.where(provider: @user_domain)
253
                  .admins_search(@search, current_role)
254
                  .admins_order(@order_column, @order_direction)
255
    else
256
      initial_list.admins_search(@search, current_role)
257
                  .admins_order(@order_column, @order_direction)
258
    end
259
  end
260
261
  # Creates the invite if it doesn't exist, or updates the updated_at time if it does
262
  def create_or_update_invite(email)
263
    invite = Invitation.find_by(email: email, provider: @user_domain)
264
265
    # Invite already exists
266
    if invite.present?
267
      # Updates updated_at to now
268
      invite.touch
269
    else
270
      # Creates invite
271
      invite = Invitation.create(email: email, provider: @user_domain)
272
    end
273
274
    invite
275
  end
276
end
277