From 0fe4756fd5b56cdbe3ad7b1404f0f56971aaf994 Mon Sep 17 00:00:00 2001 From: Jaffy-Ou Date: Thu, 16 Apr 2026 16:43:21 +0900 Subject: [PATCH 1/3] feat: add Base64 encoding for Japanese characters in Kill Bill headers - Encode X-Killbill-CreatedBy, X-Killbill-Reason, X-Killbill-Comment in Base64 - Add X-Killbill-Encoding header to indicate Base64 encoding - Fix Japanese character garbled text issue in KAUI Changes: - Modified lib/killbill_client/api/net_http_adapter.rb - Added encode_header lambda function for UTF-8 to Base64 conversion - Headers are now Base64 encoded before being sent to Kill Bill server --- lib/killbill_client/api/net_http_adapter.rb | 26 ++++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/killbill_client/api/net_http_adapter.rb b/lib/killbill_client/api/net_http_adapter.rb index 68b23c7..09a42c1 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,27 @@ 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? || value.to_s.empty + Base64.strict_encode64(value.to_s.force_encoding('UTF-8')) 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 # From 548b73a62a849c9cf40d8337298fc84dda81d7bd Mon Sep 17 00:00:00 2001 From: Jaffy-Ou Date: Mon, 20 Apr 2026 12:41:29 +0900 Subject: [PATCH 2/3] =?UTF-8?q?bug:=20=E3=81=8D=E3=81=A1=E3=82=93=E3=81=A8?= =?UTF-8?q?=E7=A9=BA=E5=88=A4=E5=AE=9A=E3=81=8C=E3=81=A7=E3=81=8D=E3=81=AA?= =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=9F=E3=82=81=E3=80=81=EF=BC=9F?= =?UTF-8?q?=E3=82=92=E3=81=A4=E3=81=91=E3=82=8B=E3=81=93=E3=81=A8=E3=81=A7?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/killbill_client/api/net_http_adapter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/killbill_client/api/net_http_adapter.rb b/lib/killbill_client/api/net_http_adapter.rb index 09a42c1..cb85e6d 100644 --- a/lib/killbill_client/api/net_http_adapter.rb +++ b/lib/killbill_client/api/net_http_adapter.rb @@ -238,7 +238,7 @@ def request(method, relative_uri, options = {}) # Add auditing headers, if needed encode_header = lambda do |value| - return nil if value.nil? || value.to_s.empty + return nil if value.nil? || value.to_s.empty? Base64.strict_encode64(value.to_s.force_encoding('UTF-8')) end From 780d962b076bac8057acf2ae1778bfa938d8bd09 Mon Sep 17 00:00:00 2001 From: Jaffy-Ou Date: Mon, 20 Apr 2026 15:25:35 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=E7=9B=A3=E8=A6=96=E3=83=98=E3=83=83?= =?UTF-8?q?=E3=83=80=E3=83=BC=E3=81=AEBase64=E3=82=A8=E3=83=B3=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=87=E3=82=A3=E3=83=B3=E3=82=B0=E3=81=AB=E3=81=8A?= =?UTF-8?q?=E3=81=91=E3=82=8BUTF-8=E3=82=A8=E3=83=A9=E3=83=BC=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 無効なUTF-8を適切に処理するため、force_encodingをencodeに置き換え - 無効/未定義文字を'?'に置換する処理を追加 - 空文字列もエンコード可能に - 元の文字列を保持するためdupを使用 --- lib/killbill_client/api/net_http_adapter.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/killbill_client/api/net_http_adapter.rb b/lib/killbill_client/api/net_http_adapter.rb index cb85e6d..a758475 100644 --- a/lib/killbill_client/api/net_http_adapter.rb +++ b/lib/killbill_client/api/net_http_adapter.rb @@ -238,8 +238,9 @@ def request(method, relative_uri, options = {}) # Add auditing headers, if needed encode_header = lambda do |value| - return nil if value.nil? || value.to_s.empty? - Base64.strict_encode64(value.to_s.force_encoding('UTF-8')) + 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 encoded_user = encode_header.call(options[:user])