my_john_deere_api 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a4a505a402a82195b10345e48301897a6af477a4ba60711c33caee9d77ba764
4
- data.tar.gz: 4f3f21b7b110b76be7bcc99195b380a3d05154443cbab36732e1f32a0dc830b2
3
+ metadata.gz: d9e4802c00252cf2770981858362b93cd8b97791e33107bcb7f5edb75c4466bc
4
+ data.tar.gz: bb0b07d289995ecd438978c6b5754e9e348e8f2cf7073d865f0e4b19c4afb934
5
5
  SHA512:
6
- metadata.gz: 19b70538ef4d795113246f269c97f6efe22cd2ccb79903d5433ee8aad79fc5823eb383e047bac8409f37f73a01658519a2fa3ceb10740416945833db8e9f6388
7
- data.tar.gz: f0bbf336465ab99361e74e5102abd2dc6ebb2b74116988e5c9b8319aa28a2bf104a02c5209d2759904624ddd340aa9db019f819d93d20a63f2a5d82ae1b6450d
6
+ metadata.gz: 46140b980eff6e3c8c8299b290219e168c822b4b91a405a6685af3453717e0d93e49e0eb9fba2fc601022279488802d638d5416dc8a406dda7fce2035bb5e275
7
+ data.tar.gz: ad162f92e55a7012997a15ee91b1c6040af309455e78bf25fcc7114770534f53cceb9fe69d1def94cc6ff0ab053de7c7459efc8776100abac55192ecad5e165a
@@ -1,36 +1,84 @@
1
1
  class MyJohnDeereApi::Authorize
2
- attr_reader :api_key, :api_secret, :request_token, :request_secret
2
+ attr_reader :api_key, :api_secret, :request_token, :request_secret, :access_token, :access_secret, :environment
3
3
  attr_accessor :base_url
4
4
 
5
+ URLS = {
6
+ sandbox: 'https://sandboxapi.deere.com',
7
+ production: 'https://api.soa-proxy.deere.com',
8
+ }
9
+
5
10
  DEFAULTS = {
6
- base_url: 'https://api.soa-proxy.deere.com',
11
+ environment: :production,
7
12
  }
8
13
 
14
+ ##
15
+ # Create an Authorize object using your John Deere API key/secret.
16
+ #
17
+ # Options:
18
+ #
19
+ # [:environment] *:production* or *:sandbox*, determines the base url
20
+ # used to make oauth requests.
21
+ #
22
+ # [:base_url] set the base url directly, since in the future,
23
+ # *environment* may affect other things.
24
+
9
25
  def initialize(api_key, api_secret, options={})
26
+ options = DEFAULTS.merge(options)
27
+
10
28
  @api_key = api_key
11
29
  @api_secret = api_secret
12
- @base_url = options[:base_url] || ENV['MY_JOHN_DEERE_URL'] || DEFAULTS[:base_url]
30
+ @environment = options[:environment]
31
+ @base_url = options[:base_url] || URLS[@environment]
13
32
  end
14
33
 
34
+ ##
35
+ # Option a url which may be used to obtain a verification
36
+ # code from the oauth server.
37
+
15
38
  def authorize_url
16
39
  return @authorize_url if defined?(@authorize_url)
17
40
 
18
41
  requester = app_consumer.get_request_token
19
-
20
42
  @request_token = requester.token
21
43
  @request_secret = requester.secret
22
44
 
23
45
  @authorize_url = requester.authorize_url
24
46
  end
25
47
 
48
+ ##
49
+ # Turn a verification code into access tokens. If this is
50
+ # run from a separate process than the one that created
51
+ # the initial RequestToken, the request token/secret
52
+ # can be passed in.
53
+
54
+ def verify(code, token=nil, secret=nil)
55
+ token ||= request_token
56
+ secret ||= request_secret
57
+
58
+ requester = OAuth::RequestToken.new(app_consumer, token, secret)
59
+ access_object = requester.get_access_token(oauth_verifier: code)
60
+ @access_token = access_object.token
61
+ @access_secret = access_object.secret
62
+ nil
63
+ end
64
+
65
+ ##
66
+ # oAuth Consumer which uses just the base url, for
67
+ # app-wide, non user-specific requests.
68
+
26
69
  def app_consumer
27
70
  @app_consumer ||= consumer(base_url)
28
71
  end
29
72
 
73
+ ##
74
+ # oAuth Consumer which uses the proper url for user-specific requests.
75
+
30
76
  def user_consumer
31
77
  @user_consumer ||= consumer("#{base_url}/platform")
32
78
  end
33
79
 
80
+ private
81
+
34
82
  def consumer(site)
35
83
  OAuth::Consumer.new(
36
84
  api_key,
@@ -68,8 +116,6 @@ class MyJohnDeereApi::Authorize
68
116
  @links
69
117
  end
70
118
 
71
- private
72
-
73
119
  def header
74
120
  {accept: 'application/vnd.deere.axiom.v3+json'}
75
121
  end
@@ -1,3 +1,3 @@
1
1
  module MyJohnDeereApi
2
- VERSION='0.0.2'
2
+ VERSION='0.0.3'
3
3
  end
@@ -2,7 +2,6 @@ require 'uri'
2
2
  require 'cgi'
3
3
  require 'support/helper'
4
4
 
5
- URL_ENV = 'MY_JOHN_DEERE_URL'
6
5
  TOKEN_PATTERN = /^[0-9a-z\-]+$/
7
6
  SECRET_PATTERN = /^[0-9A-Za-z\-+=\/]+$/
8
7
  API_KEY = ENV['API_KEY']
@@ -13,7 +12,7 @@ def contains_parameters?(uri)
13
12
  end
14
13
 
15
14
  def create_authorize
16
- JD::Authorize.new(API_KEY, API_SECRET, base_url: 'https://sandboxapi.deere.com')
15
+ JD::Authorize.new(API_KEY, API_SECRET, environment: :sandbox)
17
16
  end
18
17
 
19
18
  def fancy_url
@@ -29,18 +28,24 @@ class AuthorizeTest < MiniTest::Test
29
28
  assert_equal 'secret', authorize.api_secret
30
29
  end
31
30
 
32
- it "can set the base_url" do
33
- authorize = JD::Authorize.new('key', 'secret', base_url: fancy_url)
34
- assert_equal fancy_url, authorize.base_url
31
+ it 'defaults to production environment' do
32
+ authorize = JD::Authorize.new('key', 'secret')
33
+ assert_equal :production, authorize.environment
35
34
  end
36
35
 
37
- it 'prefers passed-in base_url over ENV variable' do
38
- ENV[URL_ENV] = 'https://example.com/disposable'
36
+ it 'defaults to production oauth url' do
37
+ authorize = JD::Authorize.new('key', 'secret')
38
+ assert_equal 'https://api.soa-proxy.deere.com', authorize.base_url
39
+ end
39
40
 
40
- authorize = JD::Authorize.new('key', 'secret', base_url: fancy_url)
41
- assert_equal fancy_url, authorize.base_url
41
+ it "can set the environment" do
42
+ authorize = JD::Authorize.new('key', 'secret', environment: :sandbox)
43
+ assert_equal :sandbox, authorize.environment
44
+ end
42
45
 
43
- ENV.delete(URL_ENV)
46
+ it "can set the base_url via the environment" do
47
+ authorize = JD::Authorize.new('key', 'secret', environment: :sandbox)
48
+ assert_equal 'https://sandboxapi.deere.com', authorize.base_url
44
49
  end
45
50
  end
46
51
 
@@ -50,7 +55,7 @@ class AuthorizeTest < MiniTest::Test
50
55
 
51
56
  url = VCR.use_cassette('get_request_token') { authorize.authorize_url }
52
57
 
53
- assert_includes url, "#{authorize.links[:authorize_request_token]}?oauth_token="
58
+ assert_includes url, "#{authorize.send(:links)[:authorize_request_token]}?oauth_token="
54
59
 
55
60
  query = URI.parse(url).query
56
61
  params = CGI::parse(query)
@@ -68,11 +73,24 @@ class AuthorizeTest < MiniTest::Test
68
73
  end
69
74
  end
70
75
 
76
+ describe '#verify(code, token, secret)' do
77
+ it 'sets the access token/secret' do
78
+ authorize = create_authorize
79
+ code = 'VERIFY'
80
+
81
+ VCR.use_cassette('get_request_token') { authorize.authorize_url }
82
+ VCR.use_cassette('get_access_token') { authorize.verify(code) }
83
+
84
+ assert_match TOKEN_PATTERN, authorize.access_token
85
+ assert_match SECRET_PATTERN, authorize.access_secret
86
+ end
87
+ end
88
+
71
89
  describe '#links' do
72
90
  it "returns a list of catalog urls" do
73
91
  authorize = create_authorize
74
92
 
75
- links = VCR.use_cassette("catalog"){ authorize.links }
93
+ links = VCR.use_cassette("catalog"){ authorize.send(:links) }
76
94
 
77
95
  assert_kind_of Hash, links
78
96
 
@@ -95,15 +113,6 @@ class AuthorizeTest < MiniTest::Test
95
113
 
96
114
  assert_equal fancy_url, authorize.base_url
97
115
  end
98
-
99
- it 'can be set via environment variable' do
100
- ENV[URL_ENV] = fancy_url
101
-
102
- authorize = JD::Authorize.new('key', 'secret')
103
- assert_equal fancy_url, authorize.base_url
104
-
105
- ENV.delete(URL_ENV)
106
- end
107
116
  end
108
117
 
109
118
  describe '#app_consumer' do
@@ -0,0 +1,41 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://sandboxapi.deere.com/platform/oauth/access_token
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - OAuth gem v0.5.4
16
+ Authorization:
17
+ - OAuth oauth_consumer_key="johndeere-wgmADngYCRmfpEbVgSyc709wnyRux5J7PAv8SE7B",
18
+ oauth_nonce="MLB5WFGhx3XqZSEqSLLMqN0rmZzVrpIcJifmmkHY", oauth_signature="EQuzjWYlzL2BdLApWuDmSIGWsuU%3D",
19
+ oauth_signature_method="HMAC-SHA1", oauth_timestamp="1578342382", oauth_token="e9d13b08-0c49-412c-8d65-b705b2a6172a",
20
+ oauth_verifier="VERIFY", oauth_version="1.0"
21
+ response:
22
+ status:
23
+ code: 200
24
+ message: OK
25
+ headers:
26
+ Date:
27
+ - Mon, 06 Jan 2020 20:26:22 GMT
28
+ Content-Type:
29
+ - text/plain;charset=UTF-8
30
+ X-Deere-Handling-Server:
31
+ - ip-10-214-44-17
32
+ Vary:
33
+ - Accept-Encoding
34
+ Transfer-Encoding:
35
+ - chunked
36
+ body:
37
+ encoding: ASCII-8BIT
38
+ string: oauth_token=47bbb9c9-41a8-4bec-8127-e3c5760af2f6&oauth_token_secret=ih3PKeoCJFbAeHcEpxn6l8cTAaQJSVzzRtemOvekXLGOsQCLUOifPOyQqZSrcYpiBXI3eJ2r0JUaCv79vsxTe1ngvrllBPjveSLg4%2Bsajmk%3D
39
+ http_version:
40
+ recorded_at: Mon, 06 Jan 2020 20:26:22 GMT
41
+ recorded_with: VCR 5.0.0
@@ -15,23 +15,23 @@ http_interactions:
15
15
  - OAuth gem v0.5.4
16
16
  Authorization:
17
17
  - OAuth oauth_consumer_key="johndeere-wgmADngYCRmfpEbVgSyc709wnyRux5J7PAv8SE7B",
18
- oauth_nonce="bA9m9jeEEXtDVO6t3evCoJcxWV6ask0dqv90ULA", oauth_signature="URbHoE5qi3YLnZlA5FiS6mloDPE%3D",
19
- oauth_signature_method="HMAC-SHA1", oauth_timestamp="1578170525", oauth_version="1.0"
18
+ oauth_nonce="33cQ0E7MKtFZJ8sv9mSSQ9Yvmg1YaEV9fSbrZ2qLns", oauth_signature="0GPAESRHRjGfHXaZQ%2BYrOjn3%2BMc%3D",
19
+ oauth_signature_method="HMAC-SHA1", oauth_timestamp="1578342367", oauth_version="1.0"
20
20
  response:
21
21
  status:
22
22
  code: 200
23
23
  message: OK
24
24
  headers:
25
25
  Date:
26
- - Sat, 04 Jan 2020 20:42:06 GMT
26
+ - Mon, 06 Jan 2020 20:26:07 GMT
27
27
  Content-Type:
28
28
  - application/vnd.deere.axiom.v3+json;charset=UTF-8
29
29
  X-Deere-Handling-Server:
30
- - ip-10-214-45-13
30
+ - ip-10-214-44-57
31
31
  X-Frame-Options:
32
32
  - SAMEORIGIN
33
33
  X-Deere-Elapsed-Ms:
34
- - '14'
34
+ - '17'
35
35
  Cache-Control:
36
36
  - no-store
37
37
  Content-Language:
@@ -42,7 +42,7 @@ http_interactions:
42
42
  encoding: ASCII-8BIT
43
43
  string: '{"@type":"ApiCatalog","links":[{"@type":"Link","rel":"oauthRequestToken","uri":"https://sandboxapi.deere.com/platform/oauth/request_token"},{"@type":"Link","rel":"oauthAuthorizeRequestToken","uri":"https://my.deere.com/consentToUseOfData?oauth_token={token}"},{"@type":"Link","rel":"oauthAccessToken","uri":"https://sandboxapi.deere.com/platform/oauth/access_token"},{"@type":"Link","rel":"agencies","uri":"https://sandboxapi.deere.com/platform/agencies"}]}'
44
44
  http_version:
45
- recorded_at: Sat, 04 Jan 2020 20:42:07 GMT
45
+ recorded_at: Mon, 06 Jan 2020 20:26:08 GMT
46
46
  - request:
47
47
  method: get
48
48
  uri: https://sandboxapi.deere.com/platform/oauth/request_token
@@ -58,26 +58,26 @@ http_interactions:
58
58
  - OAuth gem v0.5.4
59
59
  Authorization:
60
60
  - OAuth oauth_callback="oob", oauth_consumer_key="johndeere-wgmADngYCRmfpEbVgSyc709wnyRux5J7PAv8SE7B",
61
- oauth_nonce="D1Wa1SttrwCzWrFAAoEDUUyRmzVRkd6ka8rpAmWw8", oauth_signature="HciHAu%2Bojp4olApwEKk14WrhMt0%3D",
62
- oauth_signature_method="HMAC-SHA1", oauth_timestamp="1578170527", oauth_version="1.0"
61
+ oauth_nonce="U5e97z9K7RNHoENuAOeS5f2xK2m4znRsPh8Ynh2hQ", oauth_signature="eqQGoXU45sfdoiq%2BghH8xMjv8Ek%3D",
62
+ oauth_signature_method="HMAC-SHA1", oauth_timestamp="1578342368", oauth_version="1.0"
63
63
  response:
64
64
  status:
65
65
  code: 200
66
66
  message: OK
67
67
  headers:
68
68
  Date:
69
- - Sat, 04 Jan 2020 20:42:07 GMT
69
+ - Mon, 06 Jan 2020 20:26:08 GMT
70
70
  Content-Type:
71
71
  - text/plain;charset=UTF-8
72
72
  X-Deere-Handling-Server:
73
- - ip-10-214-45-13
73
+ - ip-10-214-44-190
74
74
  Vary:
75
75
  - Accept-Encoding
76
76
  Transfer-Encoding:
77
77
  - chunked
78
78
  body:
79
79
  encoding: ASCII-8BIT
80
- string: oauth_token=27f8a03d-cda3-4b80-a42d-8f10065448e5&oauth_token_secret=mAsr2Tfy4YGUOrZG1%2BhIMefCIqom1yCQ90mXsQm7TOEjh%2B3HpRKgif8DrCdhNcKB31lpZqKbxX%2FKSD3xseT1BsFeFRlJPADHGd78B1mWtJI%3D&oauth_callback_confirmed=true
80
+ string: oauth_token=e9d13b08-0c49-412c-8d65-b705b2a6172a&oauth_token_secret=IWI0xnmlsYi1bqgqXvrVlfWmC0d4teqtjs7W0fZT6ofObcOLcrLDxDnVE2gBYZUepY%2BPE6r97Li8bgbNWYauVMnnDMenFW93Twb%2B%2FVpaUjQ%3D&oauth_callback_confirmed=true
81
81
  http_version:
82
- recorded_at: Sat, 04 Jan 2020 20:42:08 GMT
82
+ recorded_at: Mon, 06 Jan 2020 20:26:08 GMT
83
83
  recorded_with: VCR 5.0.0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: my_john_deere_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jaime. Bellmyer
@@ -103,6 +103,7 @@ files:
103
103
  - test/support/helper.rb
104
104
  - test/support/vcr/app_consumer.yml
105
105
  - test/support/vcr/catalog.yml
106
+ - test/support/vcr/get_access_token.yml
106
107
  - test/support/vcr/get_request_token.yml
107
108
  - test/test_my_john_deere_api.rb
108
109
  homepage: https://github.com/Intellifarm/my_john_deere_api