From f1a576a747aa5e60279a8ec0eb7c92934af368f5 Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Wed, 27 Mar 2019 19:03:25 +0100 Subject: Add sketch of HTTP auth integration in FetchRemote --- ruby/lib/gitaly_server/repository_service.rb | 23 ++++++++++++++++------- ruby/lib/gitlab/git/http_auth.rb | 20 ++++++++++++++++++++ 2 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 ruby/lib/gitlab/git/http_auth.rb diff --git a/ruby/lib/gitaly_server/repository_service.rb b/ruby/lib/gitaly_server/repository_service.rb index edbe2011f..091e5ad34 100644 --- a/ruby/lib/gitaly_server/repository_service.rb +++ b/ruby/lib/gitaly_server/repository_service.rb @@ -21,16 +21,25 @@ module GitalyServer end def fetch_remote(request, call) + repository = Gitlab::Git::Repository.from_gitaly(request.repository, call) + + if request.remote_params + params = request.remote_params + repository.add_remote(params.name, params.url) + end + gitlab_projects = Gitlab::Git::GitlabProjects.from_gitaly(request.repository, call) success = Gitlab::Git::SshAuth.from_gitaly(request).setup do |env| - gitlab_projects.fetch_remote( - request.remote, - request.timeout, - force: request.force, - tags: !request.no_tags, - env: env - ) + Gitlab::Git::HttpAuth.from_gitaly(request) do + gitlab_projects.fetch_remote( + request.remote, + request.timeout, + force: request.force, + tags: !request.no_tags, + env: env + ) + end end raise GRPC::Unknown.new("Fetching remote #{request.remote} failed: #{gitlab_projects.output}") unless success diff --git a/ruby/lib/gitlab/git/http_auth.rb b/ruby/lib/gitlab/git/http_auth.rb new file mode 100644 index 000000000..135135efe --- /dev/null +++ b/ruby/lib/gitlab/git/http_auth.rb @@ -0,0 +1,20 @@ +module Git + module Gitlab + class HttpAuth + def self.from_gitaly(request) + repo = request.repository + params = request.remote_params + # validate params, don't set config if bad, or raise error? + + key = "http.#{params.url}.extraHeader" + repo.rugged.config[key] = params.httpAuth + + begin + yield # yield back to fetch_remote RPC handler + ensure + repo.rugged.config.delete(key) + end + end + end + end +end -- cgit v1.2.3