vmware-vra 3.0.0 → 3.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d3671834fbc97510772f7d42d524f2775789c7ac0fe7f29c80dad8c64effe3b6
4
- data.tar.gz: 394929c607677c9c2341e9a6060e9341810f2a8941111247e2fe1e1f71ce5afb
3
+ metadata.gz: 95e805c8c8d6fd5228962ffa907ce07409b60022e29166ba970194e0aa61cc42
4
+ data.tar.gz: 49beb545bf435a61aefccf06daa25629ccd991363dc9ca7546e3a15996cca362
5
5
  SHA512:
6
- metadata.gz: a04bbf0434372a58119367bb5f3d9f35c10fff450263e14f92fac6bc78082a74d0ca8fbca713b4ae7a1c0fdc1e1a40a953b321b21be32bfd0996db3cf107d776
7
- data.tar.gz: 3f3646d1aa4fb7d15fd451fce246ab9ccb1e4828dfd4e13110abdb5ce552a3c4a158fb3ff8ab6a6139154af6fec3c57646566876ae4af2c6414bd6f5fb5284b7
6
+ metadata.gz: de450415be0060fb3aef5d796e407bf9fedfb79b0f83a003d702073ee7aaa06508a5758191916d4c522c42348d166c01c23f8671221c2b8cd66b5e4b839177e7
7
+ data.tar.gz: ade68fa3e927d199c2c263bd1fcc918c21ea8c9aa52703ab74092461e9719c442294064c1410fc890c27d90908be089d21340141c11814db04cbccf3d1e4710a
data/CHANGELOG.md CHANGED
@@ -1,4 +1,8 @@
1
1
  # Change Log
2
+ ## [3.0.1](https://github.com/chef-partners/vmware-vra-gem/tree/v3.0.1) (2022-01-25)
3
+ [Full Changelog](https://github.com/chef-partners/vmware-vra-gem/compare/v3.0.0...v3.0.1)
4
+
5
+ - Fix access token workflow to work with VRA8
2
6
 
3
7
  ## [3.0.0](https://github.com/chef-partners/vmware-vra-gem/tree/v3.0.0) (2022-01-18)
4
8
  [Full Changelog](https://github.com/chef-partners/vmware-vra-gem/compare/v2.7.2...v3.0.0)
data/lib/vra/client.rb CHANGED
@@ -23,7 +23,8 @@ require 'vra/http'
23
23
 
24
24
  module Vra
25
25
  class Client
26
- ACCESS_TOKEN_URL = '/csp/gateway/am/api/login?access_token'
26
+ REFRESH_TOKEN_URL = '/csp/gateway/am/api/login?access_token'
27
+ ACCESS_TOKEN_URL = '/iaas/api/login'
27
28
  ROLES_URL = '/csp/gateway/am/api/loggedin/user/orgs'
28
29
 
29
30
  attr_accessor :page_size
@@ -106,17 +107,26 @@ module Vra
106
107
  end
107
108
 
108
109
  def generate_access_token
110
+ @refresh_token.value = nil
109
111
  @access_token.value = nil
110
112
  validate_client_options!
111
113
 
112
- response = http_post(ACCESS_TOKEN_URL,
114
+ # VRA 8 has a two-step authentication process - This probably breaks VRA7, who knows?!?
115
+ # First step: Sending Username/Password to get a Refresh Token
116
+ refresh_response = http_post(REFRESH_TOKEN_URL,
113
117
  FFI_Yajl::Encoder.encode(token_params),
114
118
  :skip_auth)
115
- raise Vra::Exception::Unauthorized, "Unable to get the access token: #{response.body}" unless response.success_ok?
119
+ raise Vra::Exception::Unauthorized, "Unable to get the refresh token: #{refresh_response.body}" unless refresh_response.success_ok?
116
120
 
117
- response_body = FFI_Yajl::Parser.parse(response.body)
118
- @access_token.value = response_body['access_token']
119
- @refresh_token.value = response_body['refresh_token']
121
+ refresh_response_body = FFI_Yajl::Parser.parse(refresh_response.body)
122
+ @refresh_token.value = refresh_response_body['refresh_token']
123
+
124
+ # Second Step: Sending the refresh token to a separate endpoint to get an Access Token
125
+ access_response = http_post(ACCESS_TOKEN_URL, "{ \"refreshToken\": \"#{@refresh_token.value}\" }", :skip_auth)
126
+ raise Vra::Exception::Unauthorized, "Unable to get the access token: #{access_response.body}" unless access_response.success_ok?
127
+
128
+ access_response_body = FFI_Yajl::Parser.parse(access_response.body)
129
+ @access_token.value = access_response_body['token']
120
130
  end
121
131
 
122
132
  def full_url(path)
data/lib/vra/version.rb CHANGED
@@ -18,5 +18,5 @@
18
18
  #
19
19
 
20
20
  module Vra
21
- VERSION = "3.0.0"
21
+ VERSION = "3.0.1"
22
22
  end
data/spec/client_spec.rb CHANGED
@@ -54,7 +54,7 @@ describe Vra::Client do
54
54
  end
55
55
 
56
56
  describe '#request_headers' do
57
- context 'when bearer token exists' do
57
+ context 'when access token exists' do
58
58
  it 'has an Authorization header' do
59
59
  client.access_token = '12345'
60
60
  expect(client.request_headers.key?('csp-auth-token')).to be true
@@ -131,7 +131,7 @@ describe Vra::Client do
131
131
  end
132
132
  end
133
133
 
134
- describe '#generate_bearer_token' do
134
+ describe '#generate_access_token' do
135
135
  let(:payload) do
136
136
  {
137
137
  username: 'user@corp.local',
@@ -148,23 +148,37 @@ describe Vra::Client do
148
148
  }.to_json
149
149
  end
150
150
 
151
+ let(:refresh_response_body) { { token: '123456' }.to_json }
152
+
151
153
  it 'posts to the tokens API endpoint' do
152
154
  response = double('response', code: 200, body: success_response, success_ok?: true)
155
+ refresh_response = double('response', code: 200, body: refresh_response_body, success_ok?: true)
156
+ # First request to generate the refresh token
153
157
  expect(Vra::Http).to receive(:execute)
154
158
  .with(method: :post,
155
- url: client.full_url(described_class::ACCESS_TOKEN_URL),
159
+ url: client.full_url(described_class::REFRESH_TOKEN_URL),
156
160
  payload: payload,
157
161
  headers: anything,
158
162
  verify_ssl: true)
159
163
  .and_return(response)
160
164
 
165
+ # Second request to generate access token
166
+ expect(Vra::Http).to receive(:execute)
167
+ .with(method: :post,
168
+ url: client.full_url(described_class::ACCESS_TOKEN_URL),
169
+ payload: "{ \"refreshToken\": \"654321\" }",
170
+ headers: anything,
171
+ verify_ssl: true)
172
+ .and_return(refresh_response)
173
+
161
174
  client.generate_access_token
162
175
  end
163
176
 
164
177
  context 'when token is generated successfully' do
165
178
  it 'sets the token' do
166
179
  response = double('response', code: 200, body: success_response, success_ok?: true)
167
- allow(Vra::Http).to receive(:execute).and_return(response)
180
+ refresh_response = double('response', code: 200, body: refresh_response_body, success_ok?: true)
181
+ allow(Vra::Http).to receive(:execute).twice.and_return(response, refresh_response)
168
182
 
169
183
  client.generate_access_token
170
184
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmware-vra
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Leff
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-01-18 00:00:00.000000000 Z
12
+ date: 2022-01-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi-yajl