Skip to content

Commit 91ac7e7

Browse files
committed
Use accessKey header instead of Authorization header (confirmed with Rakuten support)
1 parent 8f525d8 commit 91ac7e7

4 files changed

Lines changed: 78 additions & 3 deletions

File tree

lib/rakuten_web_service/client.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ def request(path, params)
4040
path = "#{path}?#{URI.encode_www_form(params)}"
4141
header = { 'User-Agent' => USER_AGENT }
4242
if RakutenWebService.configuration.access_key
43-
header['Authorization'] = "Bearer #{RakutenWebService.configuration.access_key}"
43+
case RakutenWebService.configuration.access_key_transport
44+
when :access_key_header
45+
header['accessKey'] = RakutenWebService.configuration.access_key
46+
end
4447
end
4548
http.get(path, header)
4649
end

lib/rakuten_web_service/configuration.rb

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55
module RakutenWebService
66
class Configuration
77
attr_accessor :application_id, :affiliate_id, :max_retries, :debug, :access_key
8+
attr_reader :access_key_transport
9+
10+
ALLOWED_ACCESS_KEY_TRANSPORTS = [:access_key_header, :query].freeze
811

912
def initialize
1013
@application_id = ENV['RWS_APPLICATION_ID']
1114
@affiliate_id = ENV['RWS_AFFILIATE_ID']
1215
@max_retries = 5
1316
@access_key = ENV['RWS_ACCESS_KEY']
17+
@access_key_transport = :access_key_header
1418
end
1519

1620
def generate_parameters(params)
@@ -19,7 +23,11 @@ def generate_parameters(params)
1923

2024
def default_parameters
2125
raise 'Application ID and access key are not defined' unless has_required_options?
22-
{ application_id: application_id, affiliate_id: affiliate_id, format_version: '2' }
26+
params = { application_id: application_id, affiliate_id: affiliate_id, format_version: '2' }
27+
if access_key_transport == :query
28+
params[:access_key] = access_key
29+
end
30+
params
2331
end
2432

2533
def has_required_options?
@@ -30,6 +38,13 @@ def debug_mode?
3038
ENV.key?('RWS_SDK_DEBUG') || debug
3139
end
3240

41+
def access_key_transport=(value)
42+
unless ALLOWED_ACCESS_KEY_TRANSPORTS.include?(value&.to_sym)
43+
raise ArgumentError, "Invalid access_key_transport value: #{value}, expected one of: #{ALLOWED_ACCESS_KEY_TRANSPORTS.inspect}"
44+
end
45+
@access_key_transport = value&.to_sym
46+
end
47+
3348
private
3449

3550
using RakutenWebService::StringSupport

spec/rakuten_web_service/client_spec.rb

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
with(query: expected_query,
2222
headers: {
2323
'User-Agent' => "RakutenWebService SDK for Ruby v#{RWS::VERSION}(ruby-#{RUBY_VERSION} [#{RUBY_PLATFORM}])",
24-
'Authorization' => "Bearer #{access_key}"
24+
'accessKey' => access_key
2525
}).
2626
to_return(expected_response)
2727

@@ -86,6 +86,34 @@
8686
end
8787
end
8888
end
89+
90+
context 'when access_key_transport is :query' do
91+
let(:expected_query) do
92+
{ affiliateId: affiliate_id, applicationId: application_id, formatVersion: '2', accessKey: access_key }
93+
end
94+
95+
around do |example|
96+
original = RakutenWebService.configuration.access_key_transport
97+
RakutenWebService.configuration.access_key_transport = :query
98+
example.run
99+
RakutenWebService.configuration.access_key_transport = original
100+
end
101+
102+
before do
103+
@expected_request = stub_request(:get, endpoint).
104+
with(query: expected_query,
105+
headers: {
106+
'User-Agent' => "RakutenWebService SDK for Ruby v#{RWS::VERSION}(ruby-#{RUBY_VERSION} [#{RUBY_PLATFORM}])"
107+
}).
108+
to_return(expected_response)
109+
110+
client.get({})
111+
end
112+
113+
specify 'sends access_key as query parameter' do
114+
expect(@expected_request).to have_been_made.once
115+
end
116+
end
89117
end
90118

91119
describe 'about exceptions' do

spec/rakuten_web_service/configuration_spec.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,21 @@
5454
end
5555
end
5656

57+
describe '#access_key_transport=' do
58+
let(:config) { RakutenWebService::Configuration.new }
59+
60+
%i[access_key_header query].each do |valid_value|
61+
it "accepts :#{valid_value}" do
62+
config.access_key_transport = valid_value
63+
expect(config.access_key_transport).to eq valid_value
64+
end
65+
end
66+
67+
it 'raises ArgumentError for invalid value' do
68+
expect { config.access_key_transport = :invalid }.to raise_error(ArgumentError)
69+
end
70+
end
71+
5772
describe "#default_parameters" do
5873
before do
5974
RakutenWebService.configure do |c|
@@ -76,6 +91,20 @@
7691
it "does not include access_key in parameters" do
7792
expect(subject).not_to have_key(:access_key)
7893
end
94+
95+
context "when access_key_transport is :query" do
96+
around do |example|
97+
original = RakutenWebService.configuration.access_key_transport
98+
RakutenWebService.configuration.access_key_transport = :query
99+
example.run
100+
RakutenWebService.configuration.access_key_transport = original
101+
end
102+
103+
it "includes access_key in parameters" do
104+
expect(subject[:access_key]).to eq 'access_key'
105+
end
106+
end
107+
79108
end
80109
context "When application id is not given" do
81110
let(:application_id) { nil }

0 commit comments

Comments
 (0)