Commit 42481d1b authored by Robert Speicher's avatar Robert Speicher

Merge branch 'gitaly-internal-allowed-send-repo' into 'master'

Send Gitaly Repository with /api/internal/allowed

See merge request !12452
parents bf23d6c6 8b074b4e
module API module API
module Helpers module Helpers
module InternalHelpers module InternalHelpers
SSH_GITALY_FEATURES = {
'git-receive-pack' => :ssh_receive_pack,
'git-upload-pack' => :ssh_upload_pack
}.freeze
def wiki? def wiki?
set_project unless defined?(@wiki) set_project unless defined?(@wiki)
@wiki @wiki
...@@ -10,7 +15,7 @@ module API ...@@ -10,7 +15,7 @@ module API
set_project unless defined?(@project) set_project unless defined?(@project)
@project @project
end end
def redirected_path def redirected_path
@redirected_path @redirected_path
end end
...@@ -54,15 +59,33 @@ module API ...@@ -54,15 +59,33 @@ module API
Gitlab::GlRepository.gl_repository(project, wiki?) Gitlab::GlRepository.gl_repository(project, wiki?)
end end
# Return the repository full path so that gitlab-shell has it when # Return the repository depending on whether we want the wiki or the
# handling ssh commands # regular repository
def repository_path def repository
if wiki? if wiki?
project.wiki.repository.path_to_repo project.wiki.repository
else else
project.repository.path_to_repo project.repository
end end
end end
# Return the repository full path so that gitlab-shell has it when
# handling ssh commands
def repository_path
repository.path_to_repo
end
# Return the Gitaly Address if it is enabled
def gitaly_payload(action)
feature = SSH_GITALY_FEATURES[action]
return unless feature && Gitlab::GitalyClient.feature_enabled?(feature)
{
repository: repository.gitaly_repository,
address: Gitlab::GitalyClient.address(project.repository_storage),
token: Gitlab::GitalyClient.token(project.repository_storage)
}
end
end end
end end
end end
...@@ -47,7 +47,8 @@ module API ...@@ -47,7 +47,8 @@ module API
{ {
status: true, status: true,
gl_repository: gl_repository, gl_repository: gl_repository,
repository_path: repository_path repository_path: repository_path,
gitaly: gitaly_payload(params[:action])
} }
end end
......
...@@ -220,26 +220,72 @@ describe API::Internal do ...@@ -220,26 +220,72 @@ describe API::Internal do
end end
context "git pull" do context "git pull" do
it do context "gitaly disabled" do
pull(key, project) it "has the correct payload" do
allow(Gitlab::GitalyClient).to receive(:feature_enabled?).with(:ssh_upload_pack).and_return(false)
pull(key, project)
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
expect(json_response["status"]).to be_truthy expect(json_response["status"]).to be_truthy
expect(json_response["repository_path"]).to eq(project.repository.path_to_repo) expect(json_response["repository_path"]).to eq(project.repository.path_to_repo)
expect(json_response["gl_repository"]).to eq("project-#{project.id}") expect(json_response["gl_repository"]).to eq("project-#{project.id}")
expect(user).to have_an_activity_record expect(json_response["gitaly"]).to be_nil
expect(user).to have_an_activity_record
end
end
context "gitaly enabled" do
it "has the correct payload" do
allow(Gitlab::GitalyClient).to receive(:feature_enabled?).with(:ssh_upload_pack).and_return(true)
pull(key, project)
expect(response).to have_http_status(200)
expect(json_response["status"]).to be_truthy
expect(json_response["repository_path"]).to eq(project.repository.path_to_repo)
expect(json_response["gl_repository"]).to eq("project-#{project.id}")
expect(json_response["gitaly"]).not_to be_nil
expect(json_response["gitaly"]["repository"]).not_to be_nil
expect(json_response["gitaly"]["repository"]["storage_name"]).to eq(project.repository.gitaly_repository.storage_name)
expect(json_response["gitaly"]["repository"]["relative_path"]).to eq(project.repository.gitaly_repository.relative_path)
expect(json_response["gitaly"]["address"]).to eq(Gitlab::GitalyClient.address(project.repository_storage))
expect(json_response["gitaly"]["token"]).to eq(Gitlab::GitalyClient.token(project.repository_storage))
expect(user).to have_an_activity_record
end
end end
end end
context "git push" do context "git push" do
it do context "gitaly disabled" do
push(key, project) it "has the correct payload" do
allow(Gitlab::GitalyClient).to receive(:feature_enabled?).with(:ssh_receive_pack).and_return(false)
push(key, project)
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
expect(json_response["status"]).to be_truthy expect(json_response["status"]).to be_truthy
expect(json_response["repository_path"]).to eq(project.repository.path_to_repo) expect(json_response["repository_path"]).to eq(project.repository.path_to_repo)
expect(json_response["gl_repository"]).to eq("project-#{project.id}") expect(json_response["gl_repository"]).to eq("project-#{project.id}")
expect(user).not_to have_an_activity_record expect(json_response["gitaly"]).to be_nil
expect(user).not_to have_an_activity_record
end
end
context "gitaly enabled" do
it "has the correct payload" do
allow(Gitlab::GitalyClient).to receive(:feature_enabled?).with(:ssh_receive_pack).and_return(true)
push(key, project)
expect(response).to have_http_status(200)
expect(json_response["status"]).to be_truthy
expect(json_response["repository_path"]).to eq(project.repository.path_to_repo)
expect(json_response["gl_repository"]).to eq("project-#{project.id}")
expect(json_response["gitaly"]).not_to be_nil
expect(json_response["gitaly"]["repository"]).not_to be_nil
expect(json_response["gitaly"]["repository"]["storage_name"]).to eq(project.repository.gitaly_repository.storage_name)
expect(json_response["gitaly"]["repository"]["relative_path"]).to eq(project.repository.gitaly_repository.relative_path)
expect(json_response["gitaly"]["address"]).to eq(Gitlab::GitalyClient.address(project.repository_storage))
expect(json_response["gitaly"]["token"]).to eq(Gitlab::GitalyClient.token(project.repository_storage))
expect(user).not_to have_an_activity_record
end
end end
context 'project as /namespace/project' do context 'project as /namespace/project' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment