users_controller.rb 4.19 KB
Newer Older
1
class Admin::UsersController < Admin::ApplicationController
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
2
  before_action :user, except: [:index, :new, :create]
3

gitlabhq's avatar
gitlabhq committed
4
  def index
5
    @users = User.order_name_asc.filter(params[:filter])
6
    @users = @users.search(params[:name]) if params[:name].present?
Valery Sizov's avatar
Valery Sizov committed
7
    @users = @users.sort(@sort = params[:sort])
8
    @users = @users.page(params[:page])
gitlabhq's avatar
gitlabhq committed
9 10 11
  end

  def show
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
12 13 14
  end

  def projects
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
15 16
    @personal_projects = user.personal_projects
    @joined_projects = user.projects.joined(@user)
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
17 18 19 20 21 22
  end

  def groups
  end

  def keys
23
    @keys = user.keys
gitlabhq's avatar
gitlabhq committed
24 25 26
  end

  def new
27
    @user = User.new
gitlabhq's avatar
gitlabhq committed
28 29 30
  end

  def edit
31
    user
gitlabhq's avatar
gitlabhq committed
32 33
  end

34
  def block
35
    if user.block
36
      redirect_back_or_admin_user(notice: "Successfully blocked")
37
    else
38
      redirect_back_or_admin_user(alert: "Error occurred. User was not blocked")
39 40 41
    end
  end

42
  def unblock
43 44 45
    if user.ldap_blocked?
      redirect_back_or_admin_user(alert: "This user cannot be unlocked manually from GitLab")
    elsif user.activate
46
      redirect_back_or_admin_user(notice: "Successfully unblocked")
47
    else
48
      redirect_back_or_admin_user(alert: "Error occurred. User was not unblocked")
49 50 51
    end
  end

52 53
  def unlock
    if user.unlock_access!
54
      redirect_back_or_admin_user(alert: "Successfully unlocked")
55
    else
56
      redirect_back_or_admin_user(alert: "Error occurred. User was not unlocked")
57 58 59
    end
  end

60
  def confirm
61
    if user.confirm
62
      redirect_back_or_admin_user(notice: "Successfully confirmed")
63
    else
64
      redirect_back_or_admin_user(alert: "Error occurred. User was not confirmed")
65 66 67
    end
  end

68 69 70 71 72 73
  def disable_two_factor
    user.disable_two_factor!
    redirect_to admin_user_path(user),
      notice: 'Two-factor Authentication has been disabled for this user'
  end

gitlabhq's avatar
gitlabhq committed
74
  def create
75 76
    opts = {
      force_random_password: true,
Marin Jankovski's avatar
Marin Jankovski committed
77
      password_expires_at: nil
78 79
    }

80
    @user = User.new(user_params.merge(opts))
81
    @user.created_by_id = current_user.id
arul's avatar
arul committed
82
    @user.generate_password
83
    @user.generate_reset_token
84
    @user.skip_confirmation!
gitlabhq's avatar
gitlabhq committed
85 86

    respond_to do |format|
87 88 89
      if @user.save
        format.html { redirect_to [:admin, @user], notice: 'User was successfully created.' }
        format.json { render json: @user, status: :created, location: @user }
gitlabhq's avatar
gitlabhq committed
90
      else
91
        format.html { render "new" }
92
        format.json { render json: @user.errors, status: :unprocessable_entity }
gitlabhq's avatar
gitlabhq committed
93 94 95 96 97
      end
    end
  end

  def update
98 99
    user_params_with_pass = user_params.dup

100
    if params[:user][:password].present?
101
      user_params_with_pass.merge!(
102 103 104
        password: params[:user][:password],
        password_confirmation: params[:user][:password_confirmation],
      )
105
    end
gitlabhq's avatar
gitlabhq committed
106 107

    respond_to do |format|
108
      user.skip_reconfirmation!
109
      if user.update_attributes(user_params_with_pass)
110
        format.html { redirect_to [:admin, user], notice: 'User was successfully updated.' }
gitlabhq's avatar
gitlabhq committed
111 112
        format.json { head :ok }
      else
113
        # restore username to keep form action url.
114
        user.username = params[:id]
115
        format.html { render "edit" }
116
        format.json { render json: user.errors, status: :unprocessable_entity }
gitlabhq's avatar
gitlabhq committed
117 118 119 120 121
      end
    end
  end

  def destroy
122
    DeleteUserService.new(current_user).execute(user)
gitlabhq's avatar
gitlabhq committed
123 124

    respond_to do |format|
125
      format.html { redirect_to admin_users_path, notice: "The user is being deleted." }
gitlabhq's avatar
gitlabhq committed
126 127 128
      format.json { head :ok }
    end
  end
129

130 131 132 133
  def remove_email
    email = user.emails.find(params[:email_id])
    email.destroy

134
    user.update_secondary_emails!
135

136
    respond_to do |format|
137
      format.html { redirect_back_or_admin_user(notice: "Successfully removed email.") }
138 139 140 141
      format.js { render nothing: true }
    end
  end

142 143
  protected

144
  def user
skv's avatar
skv committed
145
    @user ||= User.find_by!(username: params[:id])
146
  end
147 148 149

  def user_params
    params.require(:user).permit(
150
      :email, :remember_me, :bio, :name, :username,
151
      :skype, :linkedin, :twitter, :website_url, :color_scheme_id, :theme_id, :force_random_password,
152
      :extern_uid, :provider, :password_expires_at, :avatar, :hide_no_ssh_key, :hide_no_password,
153
      :projects_limit, :can_create_group, :admin, :key_id
154 155
    )
  end
156 157 158 159 160 161 162 163

  def redirect_back_or_admin_user(options = {})
    redirect_back_or_default(default: default_route, options: options)
  end

  def default_route
    [:admin, @user]
  end
gitlabhq's avatar
gitlabhq committed
164
end