diff --git a/lib/killbill_client/api/net_http_adapter.rb b/lib/killbill_client/api/net_http_adapter.rb index 68b23c7..a758475 100644 --- a/lib/killbill_client/api/net_http_adapter.rb +++ b/lib/killbill_client/api/net_http_adapter.rb @@ -1,6 +1,7 @@ require 'cgi' require 'net/https' require 'json' +require 'base64' module KillBillClient class API @@ -236,14 +237,28 @@ def request(method, relative_uri, options = {}) end # Add auditing headers, if needed - if options[:user] - request['X-Killbill-CreatedBy'] = options[:user] + encode_header = lambda do |value| + return nil if value.nil? + utf8_value = value.to_s.dup.encode('UTF-8', invalid: :replace, undef: :replace, replace: '?') + Base64.strict_encode64(utf8_value) end - if options[:reason] - request['X-Killbill-Reason'] = options[:reason] + + encoded_user = encode_header.call(options[:user]) + encoded_reason = encode_header.call(options[:reason]) + encoded_comment = encode_header.call(options[:comment]) + + if encoded_user + request['X-Killbill-CreatedBy'] = encoded_user + end + if encoded_reason + request['X-Killbill-Reason'] = encoded_reason + end + if encoded_comment + request['X-Killbill-Comment'] = encoded_comment end - if options[:comment] - request['X-Killbill-Comment'] = options[:comment] + # Add encoding header to indicate Base64 encoding + if encoded_user || encoded_reason || encoded_comment + request['X-Killbill-Encoding'] = 'base64' end #