From 5d52bb59dc632601f4028b430deae7348c5e279b Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Mon, 2 Oct 2017 23:28:22 -0700 Subject: [PATCH] Fix username and ID not logging in production_json.log for Git activity Devise sets `current_user`, but not all controllers authenticate users by session tokens. Try to use the controller-defined `authenticated_user` if `current_user` is not available. Closes gitlab-org/gitlab-ee#3611 --- app/controllers/application_controller.rb | 15 ++++++++++++--- .../projects/git_http_client_controller.rb | 1 + changelogs/unreleased/sh-fix-username-logging.yml | 5 +++++ 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 changelogs/unreleased/sh-fix-username-logging.yml diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 771c6f3034a..967fe39256a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -85,12 +85,21 @@ class ApplicationController < ActionController::Base super payload[:remote_ip] = request.remote_ip - if current_user.present? - payload[:user_id] = current_user.id - payload[:username] = current_user.username + logged_user = auth_user + + if logged_user.present? + payload[:user_id] = logged_user.try(:id) + payload[:username] = logged_user.try(:username) end end + # Controllers such as GitHttpController may use alternative methods + # (e.g. tokens) to authenticate the user, whereas Devise sets current_user + def auth_user + return current_user if current_user.present? + return try(:authenticated_user) + end + # This filter handles both private tokens and personal access tokens def authenticate_user_from_private_token! token = params[:private_token].presence || request.headers['PRIVATE-TOKEN'].presence diff --git a/app/controllers/projects/git_http_client_controller.rb b/app/controllers/projects/git_http_client_controller.rb index 7d0e2b3e2ef..95d7a02e9e9 100644 --- a/app/controllers/projects/git_http_client_controller.rb +++ b/app/controllers/projects/git_http_client_controller.rb @@ -9,6 +9,7 @@ class Projects::GitHttpClientController < Projects::ApplicationController delegate :actor, :authentication_abilities, to: :authentication_result, allow_nil: true alias_method :user, :actor + alias_method :authenticated_user, :actor # Git clients will not know what authenticity token to send along skip_before_action :verify_authenticity_token diff --git a/changelogs/unreleased/sh-fix-username-logging.yml b/changelogs/unreleased/sh-fix-username-logging.yml new file mode 100644 index 00000000000..dadf3fb6729 --- /dev/null +++ b/changelogs/unreleased/sh-fix-username-logging.yml @@ -0,0 +1,5 @@ +--- +title: Fix username and ID not logging in production_json.log for Git activity +merge_request: +author: +type: fixed -- GitLab