diff options
author | Douwe Maan <douwe@gitlab.com> | 2015-11-17 15:40:54 +0100 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2015-11-17 15:40:54 +0100 |
commit | e849b51cae8956c9d4eebe9c42804443a55edb83 (patch) | |
tree | 69d96404ed3d9fb6f10d59334cffce4c4cf62725 /app/controllers/admin/impersonation_controller.rb | |
parent | 56ea71a3b19396b01b3b8495337fbf22c534524f (diff) | |
parent | 1c040b3f0a3ecb18fc8fdea3cf99b70edad8d873 (diff) | |
download | gitlab-ce-e849b51cae8956c9d4eebe9c42804443a55edb83.tar.gz |
Merge branch 'master' into james11/gitlab-ce-removable-group-owner
Diffstat (limited to 'app/controllers/admin/impersonation_controller.rb')
-rw-r--r-- | app/controllers/admin/impersonation_controller.rb | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/app/controllers/admin/impersonation_controller.rb b/app/controllers/admin/impersonation_controller.rb new file mode 100644 index 00000000000..0382402afa6 --- /dev/null +++ b/app/controllers/admin/impersonation_controller.rb @@ -0,0 +1,32 @@ +class Admin::ImpersonationController < Admin::ApplicationController + skip_before_action :authenticate_admin!, only: :destroy + + before_action :user + before_action :authorize_impersonator! + + def create + session[:impersonator_id] = current_user.username + session[:impersonator_return_to] = request.env['HTTP_REFERER'] + + warden.set_user(user, scope: 'user') + + flash[:alert] = "You are impersonating #{user.username}." + + redirect_to root_path + end + + def destroy + redirect = session[:impersonator_return_to] + + warden.set_user(user, scope: 'user') + + session[:impersonator_return_to] = nil + session[:impersonator_id] = nil + + redirect_to redirect || root_path + end + + def user + @user ||= User.find_by!(username: params[:id] || session[:impersonator_id]) + end +end |