From 6b7a9b7498a4c91ca9c7324a0e31d8a142fddeef Mon Sep 17 00:00:00 2001 From: Ash McKenzie Date: Thu, 28 Mar 2019 12:33:45 +1100 Subject: [PATCH] Allow console messages be sent to gitlab-shell Currently a no-op for CE --- lib/api/internal.rb | 3 ++- lib/gitlab/git_access.rb | 6 ++++- lib/gitlab/git_access_result/success.rb | 5 ++++ spec/requests/api/internal_spec.rb | 34 +++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/lib/api/internal.rb b/lib/api/internal.rb index cb9aa849eeb7..9c7b9146c8fc 100644 --- a/lib/api/internal.rb +++ b/lib/api/internal.rb @@ -87,7 +87,8 @@ def lfs_authentication_url(project) gl_id: Gitlab::GlId.gl_id(user), gl_username: user&.username, git_config_options: [], - gitaly: gitaly_payload(params[:action]) + gitaly: gitaly_payload(params[:action]), + gl_console_messages: check_result.console_messages } # Custom option for git-receive-pack command diff --git a/lib/gitlab/git_access.rb b/lib/gitlab/git_access.rb index 010bd0e520c6..cb80ed64eff6 100644 --- a/lib/gitlab/git_access.rb +++ b/lib/gitlab/git_access.rb @@ -85,7 +85,7 @@ def check(cmd, changes) check_push_access! end - ::Gitlab::GitAccessResult::Success.new + ::Gitlab::GitAccessResult::Success.new(console_messages: check_for_console_messages(cmd)) end def guest_can_download_code? @@ -116,6 +116,10 @@ def check_custom_action(cmd) nil end + def check_for_console_messages(cmd) + [] + end + def check_valid_actor! return unless actor.is_a?(Key) diff --git a/lib/gitlab/git_access_result/success.rb b/lib/gitlab/git_access_result/success.rb index 7bb9f24cb0e8..e950d727e2e1 100644 --- a/lib/gitlab/git_access_result/success.rb +++ b/lib/gitlab/git_access_result/success.rb @@ -3,6 +3,11 @@ module Gitlab module GitAccessResult class Success + attr_reader :console_messages + + def initialize(console_messages: []) + @console_messages = console_messages + end end end end diff --git a/spec/requests/api/internal_spec.rb b/spec/requests/api/internal_spec.rb index 537194b8e114..6640ce2b07e7 100644 --- a/spec/requests/api/internal_spec.rb +++ b/spec/requests/api/internal_spec.rb @@ -498,6 +498,40 @@ end end + context "console message" do + before do + project.add_developer(user) + end + + context "git pull" do + context "with no console message" do + it "has the correct payload" do + pull(key, project) + + expect(response).to have_gitlab_http_status(200) + expect(json_response['gl_console_messages']).to eq([]) + end + end + + context "with a console message" do + let(:console_messages) { ['message for the console'] } + + it "has the correct payload" do + expect_next_instance_of(Gitlab::GitAccess) do |access| + expect(access).to receive(:check_for_console_messages) + .with('git-upload-pack') + .and_return(console_messages) + end + + pull(key, project) + + expect(response).to have_gitlab_http_status(200) + expect(json_response['gl_console_messages']).to eq(console_messages) + end + end + end + end + context "blocked user" do let(:personal_project) { create(:project, namespace: user.namespace) }