xero_gateway 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/xero_gateway/gateway.rb +1 -0
- data/lib/xero_gateway/invoice.rb +1 -0
- data/lib/xero_gateway/oauth.rb +31 -7
- data/lib/xero_gateway/partner_app.rb +4 -1
- data/lib/xero_gateway/version.rb +1 -1
- data/test/unit/oauth_test.rb +55 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c288d4d30be0c8ce139ffd5b3c714f077835e47
|
4
|
+
data.tar.gz: b09d959c33ebacbf10a98509e59cf8e19d53b1f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56dc6a1fc73e3ad5118caa9c10662a64dafeef89e902dc9080053953042cd571895379622be61126c4ecfaeb79c99b5712e14230948aac614ae04dfc0dcc3800
|
7
|
+
data.tar.gz: d3906629a8c6acc8856ac23f3fb1e7f91fca06b9ad22d51d3feb6d455b69ef61cec9381deb8861530c9d860d65b8c5054c30638432e3efa895d3871a7aa20986
|
data/lib/xero_gateway/gateway.rb
CHANGED
@@ -169,6 +169,7 @@ module XeroGateway
|
|
169
169
|
request_params[:order] = options[:order] if options[:order]
|
170
170
|
request_params[:ModifiedAfter] = options[:modified_since] if options[:modified_since]
|
171
171
|
request_params[:ContactIDs] = Array(options[:contact_ids]).join(",") if options[:contact_ids]
|
172
|
+
request_params[:page] = options[:page] if options[:page]
|
172
173
|
|
173
174
|
request_params[:where] = options[:where] if options[:where]
|
174
175
|
|
data/lib/xero_gateway/invoice.rb
CHANGED
data/lib/xero_gateway/oauth.rb
CHANGED
@@ -22,14 +22,16 @@ module XeroGateway
|
|
22
22
|
}.freeze
|
23
23
|
end
|
24
24
|
|
25
|
-
|
26
|
-
def_delegators :access_token, :get, :post, :put, :delete
|
27
|
-
|
28
|
-
attr_reader :ctoken, :csecret, :consumer_options, :authorization_expires_at
|
25
|
+
attr_reader :ctoken, :csecret, :consumer_options, :authorization_expires_at, :expires_at
|
29
26
|
attr_accessor :session_handle
|
30
27
|
|
31
28
|
def initialize(ctoken, csecret, options = {})
|
32
29
|
@ctoken, @csecret = ctoken, csecret
|
30
|
+
|
31
|
+
# Allow user-agent base val for certification procedure (enforce for PartnerApp)
|
32
|
+
@base_headers = {}
|
33
|
+
@base_headers["User-Agent"] = options.delete(:user_agent) if options.has_key?(:user_agent)
|
34
|
+
|
33
35
|
@consumer_options = XERO_CONSUMER_OPTIONS.merge(options)
|
34
36
|
end
|
35
37
|
|
@@ -38,12 +40,16 @@ module XeroGateway
|
|
38
40
|
end
|
39
41
|
|
40
42
|
def request_token(params = {})
|
41
|
-
|
43
|
+
# Underlying oauth consumer accepts body params and headers for request via positional params - explicit nilling of
|
44
|
+
# body parameters allows for correct position for headers
|
45
|
+
@request_token ||= consumer.get_request_token(params, nil, @base_headers)
|
42
46
|
end
|
43
47
|
|
44
48
|
def authorize_from_request(rtoken, rsecret, params = {})
|
45
49
|
request_token = ::OAuth::RequestToken.new(consumer, rtoken, rsecret)
|
46
|
-
|
50
|
+
# Underlying oauth consumer accepts body params and headers for request via positional params - explicit nilling of
|
51
|
+
# body parameters allows for correct position for headers
|
52
|
+
access_token = request_token.get_access_token(params, nil, @base_headers)
|
47
53
|
@atoken, @asecret = access_token.token, access_token.secret
|
48
54
|
|
49
55
|
update_attributes_from_token(access_token)
|
@@ -65,10 +71,12 @@ module XeroGateway
|
|
65
71
|
|
66
72
|
old_token = ::OAuth::RequestToken.new(consumer, access_token, access_secret)
|
67
73
|
|
74
|
+
# Underlying oauth consumer accepts body params and headers for request via positional params - explicit nilling of
|
75
|
+
# body parameters allows for correct position for headers
|
68
76
|
access_token = old_token.get_access_token({
|
69
77
|
:oauth_session_handle => session_handle,
|
70
78
|
:token => old_token
|
71
|
-
})
|
79
|
+
}, nil, @base_headers)
|
72
80
|
|
73
81
|
update_attributes_from_token(access_token)
|
74
82
|
rescue ::OAuth::Unauthorized => e
|
@@ -78,6 +86,22 @@ module XeroGateway
|
|
78
86
|
raise XeroGateway::OAuth::TokenInvalid.new(e.message)
|
79
87
|
end
|
80
88
|
|
89
|
+
def get(path, headers = {})
|
90
|
+
access_token.get(path, headers.merge(@base_headers))
|
91
|
+
end
|
92
|
+
|
93
|
+
def post(path, body = '', headers = {})
|
94
|
+
access_token.post(path, body, headers.merge(@base_headers))
|
95
|
+
end
|
96
|
+
|
97
|
+
def put(path, body = '', headers = {})
|
98
|
+
access_token.put(path, body, headers.merge(@base_headers))
|
99
|
+
end
|
100
|
+
|
101
|
+
def delete(path, headers = {})
|
102
|
+
access_token.delete(path, headers.merge(@base_headers))
|
103
|
+
end
|
104
|
+
|
81
105
|
private
|
82
106
|
|
83
107
|
# Update instance variables with those from the AccessToken.
|
@@ -4,11 +4,14 @@ module XeroGateway
|
|
4
4
|
class CertificateRequired < StandardError; end
|
5
5
|
|
6
6
|
NO_PRIVATE_KEY_ERROR_MESSAGE = "You need to provide your private key (corresponds to the public key you uploaded at api.xero.com) as :private_key_file (should be .crt or .pem files)"
|
7
|
-
|
7
|
+
|
8
8
|
def_delegators :client, :session_handle, :renew_access_token, :authorization_expires_at
|
9
9
|
|
10
10
|
def initialize(consumer_key, consumer_secret, options = {})
|
11
11
|
raise CertificateRequired.new(NO_PRIVATE_KEY_ERROR_MESSAGE) unless options[:private_key_file]
|
12
|
+
|
13
|
+
#required by Xero for new partner apps, but only issuing warning to keep backward compat for any grandfathered apps
|
14
|
+
puts "WARNING: a unique User-Agent header is required for Xero partner apps, and is missing - this should be supplied as :user_agent" unless options[:user_agent]
|
12
15
|
|
13
16
|
defaults = {
|
14
17
|
:site => "https://api.xero.com",
|
data/lib/xero_gateway/version.rb
CHANGED
data/test/unit/oauth_test.rb
CHANGED
@@ -75,7 +75,20 @@ class OAuthTest < Test::Unit::TestCase
|
|
75
75
|
xero.stubs(:consumer).returns(consumer)
|
76
76
|
|
77
77
|
request_token = mock('request token')
|
78
|
-
consumer.expects(:get_request_token).with(:oauth_callback => "http://callback.com").returns(request_token)
|
78
|
+
consumer.expects(:get_request_token).with({:oauth_callback => "http://callback.com"}, nil, {}).returns(request_token)
|
79
|
+
|
80
|
+
xero.request_token(:oauth_callback => "http://callback.com")
|
81
|
+
end
|
82
|
+
|
83
|
+
should "be able to create request token with specified base user agent" do
|
84
|
+
xero = XeroGateway::OAuth.new('token', 'secret', {user_agent: 'uagt'})
|
85
|
+
consumer = OAuth::Consumer.new('token', 'secret')
|
86
|
+
xero.stubs(:consumer).returns(consumer)
|
87
|
+
|
88
|
+
request_token = mock('request token')
|
89
|
+
consumer.expects(:get_request_token)
|
90
|
+
.with({:oauth_callback => "http://callback.com"}, nil, {"User-Agent" => 'uagt'})
|
91
|
+
.returns(request_token)
|
79
92
|
|
80
93
|
xero.request_token(:oauth_callback => "http://callback.com")
|
81
94
|
end
|
@@ -91,13 +104,33 @@ class OAuthTest < Test::Unit::TestCase
|
|
91
104
|
access_token.stubs(:params).returns({})
|
92
105
|
|
93
106
|
request_token = mock('request token')
|
94
|
-
request_token.expects(:get_access_token).with(:oauth_verifier => "verifier").returns(access_token)
|
107
|
+
request_token.expects(:get_access_token).with({:oauth_verifier => "verifier"}, nil, {}).returns(access_token)
|
95
108
|
|
96
109
|
OAuth::RequestToken.expects(:new).with(consumer, 'rtoken', 'rsecret').returns(request_token)
|
97
110
|
|
98
111
|
xero.authorize_from_request('rtoken', 'rsecret', :oauth_verifier => "verifier")
|
99
112
|
end
|
100
113
|
|
114
|
+
should "be able to create access token with specified base user agent" do
|
115
|
+
xero = XeroGateway::OAuth.new('token', 'secret', {user_agent: 'uagt'})
|
116
|
+
consumer = OAuth::Consumer.new('token', 'secret')
|
117
|
+
xero.stubs(:consumer).returns(consumer)
|
118
|
+
|
119
|
+
access_token = mock('access token')
|
120
|
+
access_token.expects(:token).twice.returns('atoken')
|
121
|
+
access_token.expects(:secret).twice.returns('asecret')
|
122
|
+
access_token.stubs(:params).returns({})
|
123
|
+
|
124
|
+
request_token = mock('request token')
|
125
|
+
request_token.expects(:get_access_token)
|
126
|
+
.with({:oauth_verifier => "verifier"}, nil, {"User-Agent" => 'uagt'})
|
127
|
+
.returns(access_token)
|
128
|
+
|
129
|
+
OAuth::RequestToken.expects(:new).with(consumer, 'rtoken', 'rsecret').returns(request_token)
|
130
|
+
|
131
|
+
xero.authorize_from_request('rtoken', 'rsecret', :oauth_verifier => "verifier")
|
132
|
+
end
|
133
|
+
|
101
134
|
should "delegate get to access token" do
|
102
135
|
access_token = mock('access token')
|
103
136
|
xero = XeroGateway::OAuth.new('token', 'secret')
|
@@ -113,4 +146,24 @@ class OAuthTest < Test::Unit::TestCase
|
|
113
146
|
access_token.expects(:post).returns(nil)
|
114
147
|
xero.post('/foo')
|
115
148
|
end
|
149
|
+
|
150
|
+
should "be able to specify base user-agent header for calls" do
|
151
|
+
xero = XeroGateway::OAuth.new('token', 'secret', user_agent: 'testagt')
|
152
|
+
consumer = OAuth::Consumer.new('token', 'secret')
|
153
|
+
xero.stubs(:consumer).returns(consumer)
|
154
|
+
|
155
|
+
access_token = mock('access token')
|
156
|
+
access_token.expects(:token).twice.returns('atoken')
|
157
|
+
access_token.expects(:secret).twice.returns('asecret')
|
158
|
+
access_token.stubs(:params).returns({})
|
159
|
+
|
160
|
+
request_token = mock('request token')
|
161
|
+
request_token.expects(:get_access_token).returns(access_token)
|
162
|
+
OAuth::RequestToken.expects(:new).with(consumer, 'rtoken', 'rsecret').returns(request_token)
|
163
|
+
|
164
|
+
xero.authorize_from_request('rtoken', 'rsecret')
|
165
|
+
assert xero.access_token.is_a? OAuth::AccessToken
|
166
|
+
assert_equal "atoken", xero.access_token.token
|
167
|
+
assert_equal "asecret", xero.access_token.secret
|
168
|
+
end
|
116
169
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xero_gateway
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Connor
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-11-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: builder
|
@@ -270,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
270
270
|
version: '0'
|
271
271
|
requirements: []
|
272
272
|
rubyforge_project:
|
273
|
-
rubygems_version: 2.
|
273
|
+
rubygems_version: 2.5.1
|
274
274
|
signing_key:
|
275
275
|
specification_version: 4
|
276
276
|
summary: Enables Ruby based applications to communicate with the Xero API
|