summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSaito <saitowu@gmail.com>2012-07-02 16:44:45 +0800
committerSaito <saitowu@gmail.com>2012-07-02 16:44:45 +0800
commit401340168c4596a872fd5d94ec9d52b33886f45f (patch)
tree4ee851a56c5d8fee6f669005ac26b877d1aad361
parent82e2551833e7d9fd704a29a022fee0ac2ba18b2f (diff)
downloadgitlab-ce-401340168c4596a872fd5d94ec9d52b33886f45f.tar.gz
bypass gitolite update hook, and set an GL_USER variable.
-rw-r--r--app/roles/git_push.rb12
-rw-r--r--app/workers/post_receive.rb10
-rw-r--r--config/initializers/grack_auth.rb5
3 files changed, 17 insertions, 10 deletions
diff --git a/app/roles/git_push.rb b/app/roles/git_push.rb
index 504aa0b51ae..d557ce4e96d 100644
--- a/app/roles/git_push.rb
+++ b/app/roles/git_push.rb
@@ -21,7 +21,7 @@ module GitPush
# Close merge requests
mrs = self.merge_requests.opened.where(:target_branch => branch_name).all
- mrs = mrs.select(&:last_commit).select { |mr| c_ids.include?(mr.last_commit.id) }
+ mrs = mrs.select(&:last_commit).select { |mr| c_ids.include?(mr.last_commit.id) }
mrs.each { |merge_request| merge_request.merge!(user.id) }
true
@@ -65,7 +65,7 @@ module GitPush
total_commits_count: push_commits_count
}
- # For perfomance purposes maximum 20 latest commits
+ # For perfomance purposes maximum 20 latest commits
# will be passed as post receive hook data.
#
push_commits_limited.each do |commit|
@@ -86,16 +86,14 @@ module GitPush
# This method will be called after each post receive
- # and only if autor_key_id present in gitlab.
+ # and only if user present in gitlab.
# All callbacks for post receive should be placed here
#
- def trigger_post_receive(oldrev, newrev, ref, author_key_id)
- user = Key.find_by_identifier(author_key_id).user
-
+ def trigger_post_receive(oldrev, newrev, ref, user)
# Create push event
self.observe_push(oldrev, newrev, ref, user)
- # Close merged MR
+ # Close merged MR
self.update_merge_requests(oldrev, newrev, ref, user)
# Execute web hooks
diff --git a/app/workers/post_receive.rb b/app/workers/post_receive.rb
index 0ab9079c884..5311ede72e2 100644
--- a/app/workers/post_receive.rb
+++ b/app/workers/post_receive.rb
@@ -1,13 +1,17 @@
class PostReceive
@queue = :post_receive
- def self.perform(reponame, oldrev, newrev, ref, author_key_id)
+ def self.perform(reponame, oldrev, newrev, ref, identifier)
project = Project.find_by_path(reponame)
return false if project.nil?
# Ignore push from non-gitlab users
- return false unless Key.find_by_identifier(author_key_id)
+ if /^[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}$/.match(identifier)
+ return false unless user = User.find_by_email(identifier)
+ else
+ return false unless user = Key.find_by_identifier(identifier).try(:user)
+ end
- project.trigger_post_receive(oldrev, newrev, ref, author_key_id)
+ project.trigger_post_receive(oldrev, newrev, ref, user)
end
end
diff --git a/config/initializers/grack_auth.rb b/config/initializers/grack_auth.rb
index b44a01f4a0c..5995b873de9 100644
--- a/config/initializers/grack_auth.rb
+++ b/config/initializers/grack_auth.rb
@@ -7,6 +7,11 @@ module Grack
user = User.find_by_email(email)
return false unless user.try(:valid_password?, password)
+ # Set GL_USER env variable
+ ENV['GL_USER'] = email
+ # Pass Gitolite update hook
+ ENV['GL_BYPASS_UPDATE_HOOK'] = "true"
+
# Need this patch because the rails mount
@env['PATH_INFO'] = @env['REQUEST_PATH']