Commit 0135d57b authored by Alexander Randa's avatar Alexander Randa

Fix encoding error for WebHook logging

parent 1ec24154
...@@ -101,7 +101,7 @@ class WebHookService ...@@ -101,7 +101,7 @@ class WebHookService
request_headers: build_headers(hook_name), request_headers: build_headers(hook_name),
request_data: request_data, request_data: request_data,
response_headers: format_response_headers(response), response_headers: format_response_headers(response),
response_body: response.body, response_body: safe_response_body(response),
response_status: response.code, response_status: response.code,
internal_error_message: error_message internal_error_message: error_message
) )
...@@ -124,4 +124,10 @@ class WebHookService ...@@ -124,4 +124,10 @@ class WebHookService
def format_response_headers(response) def format_response_headers(response)
response.headers.each_capitalized.to_h response.headers.each_capitalized.to_h
end end
def safe_response_body(response)
return '' unless response.body
response.body.encode('UTF-8', invalid: :replace, undef: :replace, replace: '')
end
end end
---
title: Fix encoding error for WebHook logging
merge_request: 13230
author: Alexander Randa (@randaalex)
...@@ -112,6 +112,23 @@ describe WebHookService do ...@@ -112,6 +112,23 @@ describe WebHookService do
end end
end end
context 'with unsafe response body' do
before do
WebMock.stub_request(:post, project_hook.url).to_return(status: 200, body: "\xBB")
service_instance.execute
end
it 'log successful execution' do
expect(hook_log.trigger).to eq('push_hooks')
expect(hook_log.url).to eq(project_hook.url)
expect(hook_log.request_headers).to eq(headers)
expect(hook_log.response_body).to eq('')
expect(hook_log.response_status).to eq('200')
expect(hook_log.execution_duration).to be > 0
expect(hook_log.internal_error_message).to be_nil
end
end
context 'should not log ServiceHooks' do context 'should not log ServiceHooks' do
let(:service_hook) { create(:service_hook) } let(:service_hook) { create(:service_hook) }
let(:service_instance) { described_class.new(service_hook, data, 'service_hook') } let(:service_instance) { described_class.new(service_hook, data, 'service_hook') }
......
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