Convert HttpLog request/response attrs to UTF8 before saving (fixes #2100)
This commit is contained in:
parent
2e4b7128f1
commit
680a560c06
3 changed files with 40 additions and 0 deletions
|
@ -4,6 +4,9 @@ class HttpLog < ApplicationModel
|
||||||
store :request
|
store :request
|
||||||
store :response
|
store :response
|
||||||
|
|
||||||
|
# See https://github.com/zammad/zammad/issues/2100
|
||||||
|
before_save :messages_to_utf8
|
||||||
|
|
||||||
=begin
|
=begin
|
||||||
|
|
||||||
cleanup old http logs
|
cleanup old http logs
|
||||||
|
@ -21,4 +24,10 @@ optional you can put the max oldest chat entries as argument
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def messages_to_utf8
|
||||||
|
request.transform_values! { |v| v.try(:utf8_encode) || v }
|
||||||
|
response.transform_values! { |v| v.try(:utf8_encode) || v }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
12
spec/factories/http_log.rb
Normal file
12
spec/factories/http_log.rb
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
FactoryBot.define do
|
||||||
|
factory :http_log do
|
||||||
|
direction 'in'
|
||||||
|
facility 'cti'
|
||||||
|
add_attribute(:method) { 'post' }
|
||||||
|
url 'https://zammad.fqdn.com/api/v1/integration/cti/log'
|
||||||
|
request { { content: 'foo' } }
|
||||||
|
response { { content: 'bar' } }
|
||||||
|
created_by_id 1
|
||||||
|
updated_by_id 1
|
||||||
|
end
|
||||||
|
end
|
19
spec/models/http_log_spec.rb
Normal file
19
spec/models/http_log_spec.rb
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe HttpLog do
|
||||||
|
let(:subject) { build(:http_log) }
|
||||||
|
|
||||||
|
describe 'callbacks' do
|
||||||
|
# See https://github.com/zammad/zammad/issues/2100
|
||||||
|
it 'converts request/response message data to UTF-8 before saving' do
|
||||||
|
subject.request[:content] = 'foo'.force_encoding('ascii-8bit')
|
||||||
|
subject.response[:content] = 'bar'.force_encoding('ascii-8bit')
|
||||||
|
|
||||||
|
# rubocop:disable Layout/MultilineMethodCallIndentation
|
||||||
|
expect { subject.save }
|
||||||
|
.to change { subject.request[:content].encoding.name }.from('ASCII-8BIT').to('UTF-8')
|
||||||
|
.and change { subject.response[:content].encoding.name }.from('ASCII-8BIT').to('UTF-8')
|
||||||
|
# rubocop:enable Layout/MultilineMethodCallIndentation
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue