Commit 5cd13175 authored by Ash McKenzie's avatar Ash McKenzie

Print console messages to $stderr if present

Using ConsoleHelper::write_stderr
parent 02088137
...@@ -3,12 +3,14 @@ require 'json' ...@@ -3,12 +3,14 @@ require 'json'
class GitAccessStatus class GitAccessStatus
HTTP_MULTIPLE_CHOICES = '300'.freeze HTTP_MULTIPLE_CHOICES = '300'.freeze
attr_reader :message, :gl_repository, :gl_project_path, :gl_id, :gl_username, :gitaly, :git_protocol, :git_config_options, :payload attr_reader :message, :gl_repository, :gl_project_path, :gl_id, :gl_username,
:gitaly, :git_protocol, :git_config_options, :payload,
:gl_console_messages
def initialize(status, status_code, message, gl_repository: nil, def initialize(status, status_code, message, gl_repository: nil,
gl_project_path: nil, gl_id: nil, gl_project_path: nil, gl_id: nil,
gl_username: nil, gitaly: nil, git_protocol: nil, gl_username: nil, gitaly: nil, git_protocol: nil,
git_config_options: nil, payload: nil) git_config_options: nil, payload: nil, gl_console_messages: [])
@status = status @status = status
@status_code = status_code @status_code = status_code
@message = message @message = message
...@@ -20,6 +22,7 @@ class GitAccessStatus ...@@ -20,6 +22,7 @@ class GitAccessStatus
@gitaly = gitaly @gitaly = gitaly
@git_protocol = git_protocol @git_protocol = git_protocol
@payload = payload @payload = payload
@gl_console_messages = gl_console_messages
end end
def self.create_from_json(json, status_code) def self.create_from_json(json, status_code)
...@@ -34,7 +37,8 @@ class GitAccessStatus ...@@ -34,7 +37,8 @@ class GitAccessStatus
git_config_options: values["git_config_options"], git_config_options: values["git_config_options"],
gitaly: values["gitaly"], gitaly: values["gitaly"],
git_protocol: values["git_protocol"], git_protocol: values["git_protocol"],
payload: values["payload"]) payload: values["payload"],
gl_console_messages: values["gl_console_messages"])
end end
def allowed? def allowed?
......
...@@ -66,6 +66,8 @@ class GitlabShell # rubocop:disable Metrics/ClassLength ...@@ -66,6 +66,8 @@ class GitlabShell # rubocop:disable Metrics/ClassLength
@username = access_status.gl_username @username = access_status.gl_username
@git_config_options = access_status.git_config_options @git_config_options = access_status.git_config_options
@gl_id = access_status.gl_id if defined?(@who) @gl_id = access_status.gl_id if defined?(@who)
write_stderr(access_status.gl_console_messages)
elsif !defined?(@gl_id) elsif !defined?(@gl_id)
# We're processing an API command like 2fa_recovery_codes, but # We're processing an API command like 2fa_recovery_codes, but
# don't have a @gl_id yet, that means we're in the "username" # don't have a @gl_id yet, that means we're in the "username"
......
...@@ -33,7 +33,8 @@ describe GitlabShell do ...@@ -33,7 +33,8 @@ describe GitlabShell do
gl_username: gl_username, gl_username: gl_username,
git_config_options: git_config_options, git_config_options: git_config_options,
gitaly: { 'repository' => { 'relative_path' => repo_name, 'storage_name' => 'default'} , 'address' => 'unix:gitaly.socket' }, gitaly: { 'repository' => { 'relative_path' => repo_name, 'storage_name' => 'default'} , 'address' => 'unix:gitaly.socket' },
git_protocol: git_protocol git_protocol: git_protocol,
gl_console_messages: gl_console_messages
) )
end end
...@@ -69,6 +70,7 @@ describe GitlabShell do ...@@ -69,6 +70,7 @@ describe GitlabShell do
let(:gl_username) { 'testuser' } let(:gl_username) { 'testuser' }
let(:git_config_options) { ['receive.MaxInputSize=10000'] } let(:git_config_options) { ['receive.MaxInputSize=10000'] }
let(:git_protocol) { 'version=2' } let(:git_protocol) { 'version=2' }
let(:gl_console_messages) { nil }
before do before do
allow_any_instance_of(GitlabConfig).to receive(:audit_usernames).and_return(false) allow_any_instance_of(GitlabConfig).to receive(:audit_usernames).and_return(false)
...@@ -438,6 +440,19 @@ describe GitlabShell do ...@@ -438,6 +440,19 @@ describe GitlabShell do
end end
end end
end end
context 'with a console message' do
let(:ssh_cmd) { "git-receive-pack gitlab-ci.git" }
let(:gl_console_messages) { 'Very important message' }
before do
allow(api).to receive(:check_access).and_return(gitaly_check_access)
end
it 'displays the message on $stderr' do
expect { subject.exec(ssh_cmd) }.to output("> GitLab: #{gl_console_messages}\n").to_stderr
end
end
end end
describe '#validate_access' do describe '#validate_access' 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