summaryrefslogtreecommitdiff
path: root/lib/gitlab/gitaly_client.rb
diff options
context:
space:
mode:
authorPawel Chojnacki <pawel@chojnacki.ws>2017-06-22 15:05:52 +0200
committerPawel Chojnacki <pawel@chojnacki.ws>2017-06-22 15:05:52 +0200
commit97c42df3b804a37e659c3cda6bd8a52570f31366 (patch)
tree97c38db7f71a93a7b0db5ca2c682d6d17479cbdb /lib/gitlab/gitaly_client.rb
parent3833f1dd84dfec844443a5b1d9ba2bd2b911c0bc (diff)
parent11716f310dcc495600f5a17e08456a1abb296482 (diff)
downloadgitlab-ce-97c42df3b804a37e659c3cda6bd8a52570f31366.tar.gz
Merge remote-tracking branch 'upstream/master' into 28717-additional-metrics-review-branch28717-additional-metrics-review-branch
Diffstat (limited to 'lib/gitlab/gitaly_client.rb')
-rw-r--r--lib/gitlab/gitaly_client.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/gitlab/gitaly_client.rb b/lib/gitlab/gitaly_client.rb
index 2343446bf22..f605c06dfc3 100644
--- a/lib/gitlab/gitaly_client.rb
+++ b/lib/gitlab/gitaly_client.rb
@@ -1,3 +1,5 @@
+require 'base64'
+
require 'gitaly'
module Gitlab
@@ -48,6 +50,26 @@ module Gitlab
address
end
+ # All Gitaly RPC call sites should use GitalyClient.call. This method
+ # makes sure that per-request authentication headers are set.
+ def self.call(storage, service, rpc, request)
+ metadata = request_metadata(storage)
+ metadata = yield(metadata) if block_given?
+ stub(service, storage).send(rpc, request, metadata)
+ end
+
+ def self.request_metadata(storage)
+ encoded_token = Base64.strict_encode64(token(storage).to_s)
+ { metadata: { 'authorization' => "Bearer #{encoded_token}" } }
+ end
+
+ def self.token(storage)
+ params = Gitlab.config.repositories.storages[storage]
+ raise "storage not found: #{storage.inspect}" if params.nil?
+
+ params['gitaly_token'].presence || Gitlab.config.gitaly['token']
+ end
+
def self.enabled?
Gitlab.config.gitaly.enabled
end