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
Push — master ( 03bde3...49def8 )
by Jesus
04:57 queued 18s
created

AdminsController.undelete()   A

Complexity

Conditions 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
dl 0
loc 7
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 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
  # ROLES
162
163
  # GET /admins/roles
164
  def roles
165
    @roles = all_roles(params[:selected_role])
166
  end
167
168
  # POST /admins/role
169
  # This method creates a new role scoped to the users provider
170
  def new_role
171
    new_role = create_role(params[:role][:name])
172
173
    return redirect_to admin_roles_path, flash: { alert: I18n.t("administrator.roles.invalid_create") } if new_role.nil?
174
175
    redirect_to admin_roles_path(selected_role: new_role.id)
176
  end
177
178
  # PATCH /admin/roles/order
179
  # This updates the priority of a site's roles
180
  # Note: A lower priority role will always get used before a higher priority one
181
  def change_role_order
182
    unless update_priority(params[:role])
183
      redirect_to admin_roles_path, flash: { alert: I18n.t("administrator.roles.invalid_order") }
184
    end
185
  end
186
187
  # POST /admin/role/:role_id
188
  # This method updates the permissions assigned to a role
189
  def update_role
190
    role = Role.find(params[:role_id])
191
    flash[:alert] = I18n.t("administrator.roles.invalid_update") unless update_permissions(role)
192
    redirect_to admin_roles_path(selected_role: role.id)
193
  end
194
195
  # DELETE admins/role/:role_id
196
  # This deletes a role
197
  def delete_role
198
    role = Role.find(params[:role_id])
199
200
    # Make sure no users are assigned to the role and the role isn't a reserved role
201
    # before deleting
202
    if role.users.count.positive?
203
      flash[:alert] = I18n.t("administrator.roles.role_has_users", user_count: role.users.count)
204
      return redirect_to admin_roles_path(selected_role: role.id)
205
    elsif Role::RESERVED_ROLE_NAMES.include?(role) || role.provider != @user_domain ||
206
          role.priority <= current_user.highest_priority_role.priority
207
      return redirect_to admin_roles_path(selected_role: role.id)
208
    else
209
      role.role_permissions.delete_all
210
      role.delete
211
    end
212
213
    redirect_to admin_roles_path
214
  end
215
216
  private
217
218
  def find_user
219
    @user = User.where(uid: params[:user_uid]).includes(:roles).first
220
  end
221
222
  def find_deleted_user
223
    @user = User.deleted.where(uid: params[:user_uid]).includes(:roles).first
224
  end
225
226
  # Verifies that admin is an administrator of the user in the action
227
  def verify_admin_of_user
228
    redirect_to admins_path,
229
      flash: { alert: I18n.t("administrator.flash.unauthorized") } unless current_user.admin_of?(@user)
230
  end
231
232
  # Gets the list of users based on your configuration
233
  def user_list
234
    current_role = @role
235
236
    initial_user = case @tab
237
      when "active"
238
        User.without_role(:pending).without_role(:denied)
239
      when "deleted"
240
        User.deleted
241
      else
242
        User
243
    end
244
245
    current_role = Role.find_by(name: @tab, provider: @user_domain) if @tab == "pending" || @tab == "denied"
246
247
    initial_list = if current_user.has_role? :super_admin
248
      initial_user.where.not(id: current_user.id)
249
    else
250
      initial_user.without_role(:super_admin).where.not(id: current_user.id)
251
    end
252
253
    if Rails.configuration.loadbalanced_configuration
254
      initial_list.where(provider: @user_domain)
255
                  .admins_search(@search, current_role)
256
                  .admins_order(@order_column, @order_direction)
257
    else
258
      initial_list.admins_search(@search, current_role)
259
                  .admins_order(@order_column, @order_direction)
260
    end
261
  end
262
263
  # Creates the invite if it doesn't exist, or updates the updated_at time if it does
264
  def create_or_update_invite(email)
265
    invite = Invitation.find_by(email: email, provider: @user_domain)
266
267
    # Invite already exists
268
    if invite.present?
269
      # Updates updated_at to now
270
      invite.touch
271
    else
272
      # Creates invite
273
      invite = Invitation.create(email: email, provider: @user_domain)
274
    end
275
276
    invite
277
  end
278
end
279