summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-11-30 04:49:11 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-11-30 04:49:43 +0000
commit4e9a85ef8e7e49a41ac1cc34bb5d1ace4df2e6c7 (patch)
treec67d30ea57929ea19a1a9eaf999249395991ee24
parent8171aefb3235e3f112fadbd1f1dc698a04f1d84b (diff)
downloadgitlab-ce-4e9a85ef8e7e49a41ac1cc34bb5d1ace4df2e6c7.tar.gz
Add latest changes from gitlab-org/security/gitlab@15-4-stable-ee
-rw-r--r--app/models/hooks/web_hook_log.rb7
-rw-r--r--app/services/web_hooks/log_execution_service.rb2
-rw-r--r--spec/models/hooks/web_hook_log_spec.rb18
-rw-r--r--spec/services/web_hooks/log_execution_service_spec.rb15
4 files changed, 40 insertions, 2 deletions
diff --git a/app/models/hooks/web_hook_log.rb b/app/models/hooks/web_hook_log.rb
index c32957fbef9..5af01cae0f6 100644
--- a/app/models/hooks/web_hook_log.rb
+++ b/app/models/hooks/web_hook_log.rb
@@ -48,6 +48,13 @@ class WebHookLog < ApplicationRecord
request_data == OVERSIZE_REQUEST_DATA
end
+ def request_headers
+ super unless web_hook.token?
+ super if self[:request_headers]['X-Gitlab-Token'] == _('[REDACTED]')
+
+ self[:request_headers].merge('X-Gitlab-Token' => _('[REDACTED]'))
+ end
+
private
def obfuscate_basic_auth
diff --git a/app/services/web_hooks/log_execution_service.rb b/app/services/web_hooks/log_execution_service.rb
index 5be8aee3ae8..c79f400e21a 100644
--- a/app/services/web_hooks/log_execution_service.rb
+++ b/app/services/web_hooks/log_execution_service.rb
@@ -24,6 +24,8 @@ module WebHooks
private
def log_execution
+ log_data[:request_headers]['X-Gitlab-Token'] = _('[REDACTED]') if hook.token?
+
WebHookLog.create!(web_hook: hook, **log_data)
end
diff --git a/spec/models/hooks/web_hook_log_spec.rb b/spec/models/hooks/web_hook_log_spec.rb
index 3441dfda7d6..e65330d2533 100644
--- a/spec/models/hooks/web_hook_log_spec.rb
+++ b/spec/models/hooks/web_hook_log_spec.rb
@@ -185,4 +185,22 @@ RSpec.describe WebHookLog do
it { expect(web_hook_log.internal_error?).to be_truthy }
end
end
+
+ describe '#request_headers' do
+ let(:hook) { build(:project_hook, :token) }
+ let(:web_hook_log) { build(:web_hook_log, request_headers: request_headers) }
+ let(:expected_headers) { { 'X-Gitlab-Token' => _('[REDACTED]') } }
+
+ context 'with redacted headers token' do
+ let(:request_headers) { { 'X-Gitlab-Token' => _('[REDACTED]') } }
+
+ it { expect(web_hook_log.request_headers).to eq(expected_headers) }
+ end
+
+ context 'with exposed headers token' do
+ let(:request_headers) { { 'X-Gitlab-Token' => hook.token } }
+
+ it { expect(web_hook_log.request_headers).to eq(expected_headers) }
+ end
+ end
end
diff --git a/spec/services/web_hooks/log_execution_service_spec.rb b/spec/services/web_hooks/log_execution_service_spec.rb
index 1967a8368fb..24a496a8ef7 100644
--- a/spec/services/web_hooks/log_execution_service_spec.rb
+++ b/spec/services/web_hooks/log_execution_service_spec.rb
@@ -11,14 +11,15 @@ RSpec.describe WebHooks::LogExecutionService do
travel_to(Time.current) { example.run }
end
- let_it_be_with_reload(:project_hook) { create(:project_hook) }
+ let_it_be_with_reload(:project_hook) { create(:project_hook, :token) }
let(:response_category) { :ok }
+ let(:request_headers) { { 'Header' => 'header value' } }
let(:data) do
{
trigger: 'trigger_name',
url: 'https://example.com',
- request_headers: { 'Header' => 'header value' },
+ request_headers: request_headers,
request_data: { 'Request Data' => 'request data value' },
response_body: 'Response body',
response_status: '200',
@@ -178,5 +179,15 @@ RSpec.describe WebHooks::LogExecutionService do
end
end
end
+
+ context 'with X-Gitlab-Token' do
+ let(:request_headers) { { 'X-Gitlab-Token' => project_hook.token } }
+
+ it 'redacts the token' do
+ service.execute
+
+ expect(WebHookLog.recent.first.request_headers).to include('X-Gitlab-Token' => '[REDACTED]')
+ end
+ end
end
end