ibm_cloud_sdk_core 1.0.0.rc1 → 1.0.0.rc2

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: 83ac24e7cd38e3b1bfa169bf354347c35f10f36ebd99c68aac6153d12a5a45c0
4
- data.tar.gz: af948abbdfa2ba7081e12c6f49ad401ec95bd1323478ffd6fd7ea21d48fd9205
3
+ metadata.gz: 24cf43bb93090b3c2cdb627369b7645ca17eadc7262f16fbb18b40e76f1285b2
4
+ data.tar.gz: 2d8be9a330480c90327a5b52d6d2121476aaaf85ecb5ef3e3574945b4ceb75f1
5
5
  SHA512:
6
- metadata.gz: da1b2b737e578f293a15595382da13fa7d961e382b76ea919de5d6ae1c2472c585b25ecf3153c6c5a26f6f46b1095fb2c555be323450858e195b902a43e9df88
7
- data.tar.gz: 6d3d192c519dcd95b011ded3dc56a81965fe628ef18c3ac1a6036cf3a65e070e2c2f5b8ae73aa9992be84da5cf87eaae944b808571be182437a074b963408a5e
6
+ metadata.gz: 1294cd526ded8bccfd89556c9450e7111fcff4ae31162a9f4ea5004d6c718ca360a0b6a09a6f83bc1b3910993f8593d76add495736d361b1c876115df5f35ac9
7
+ data.tar.gz: de99be13ca0a0ce0e0a4d73852bb7c2f25171717bc654e51d7dca70a834f26c1c05a8cac4bf98b2f14f908e0467ad9cd06e8c3799da8e4dbad0c6457e3752189
@@ -7,7 +7,7 @@ require_relative("../utils.rb")
7
7
  module IBMCloudSdkCore
8
8
  # Basic Authenticator
9
9
  class BasicAuthenticator < Authenticator
10
- attr_accessor :username, :password
10
+ attr_accessor :username, :password, :authentication_type
11
11
  def initialize(vars)
12
12
  defaults = {
13
13
  username: nil,
@@ -21,8 +21,10 @@ module IBMCloudSdkCore
21
21
  end
22
22
 
23
23
  # Adds the Authorization header, if possible
24
- def authenticate(req)
25
- req.basic_auth(user: @username, pass: @password)
24
+ def authenticate(headers)
25
+ base64_authentication = Base64.strict_encode64("#{@username}:#{@password}")
26
+ headers["Authorization"] = "Basic #{base64_authentication}"
27
+ headers
26
28
  end
27
29
 
28
30
  # Checks if all the inputs needed are present
@@ -19,8 +19,9 @@ module IBMCloudSdkCore
19
19
  end
20
20
 
21
21
  # Adds the Authorization header, if possible
22
- def authenticate(connector)
23
- connector.default_options.headers.add("Authorization", "Bearer #{@bearer_token}")
22
+ def authenticate(headers)
23
+ headers["Authorization"] = "Bearer #{@bearer_token}"
24
+ headers
24
25
  end
25
26
 
26
27
  # Checks if all the inputs needed are present
@@ -25,9 +25,9 @@ module IBMCloudSdkCore
25
25
 
26
26
  validate
27
27
  @token_manager = CP4DTokenManager.new(
28
+ url: @url,
28
29
  username: @username,
29
30
  password: @password,
30
- url: @url,
31
31
  disable_ssl_verification: @disable_ssl_verification
32
32
  )
33
33
  end
@@ -26,8 +26,9 @@ module IBMCloudSdkCore
26
26
  @client_secret = vars[:client_secret]
27
27
  @disable_ssl_verification = vars[:disable_ssl_verification]
28
28
  @authentication_type = AUTH_TYPE_IAM
29
+
29
30
  validate
30
- @token_manager = iam_token_manager(
31
+ @token_manager = IAMTokenManager.new(
31
32
  apikey: @apikey,
32
33
  url: @url,
33
34
  client_id: @client_id,
@@ -36,8 +37,9 @@ module IBMCloudSdkCore
36
37
  )
37
38
  end
38
39
 
39
- def authenticate(connector)
40
- connector.default_options.headers.add("Authorization", "Bearer #{@token_manager.access_token}")
40
+ def authenticate(headers)
41
+ headers["Authorization"] = "Bearer #{@token_manager.access_token}"
42
+ headers
41
43
  end
42
44
 
43
45
  def validate
@@ -46,14 +48,11 @@ module IBMCloudSdkCore
46
48
  raise ArgumentError.new('The apikey shouldn\'t start or end with curly brackets or quotes. Be sure to remove any {} and \" characters surrounding your apikey') if check_bad_first_or_last_char(@apikey)
47
49
 
48
50
  # Both the client id and secret should be provided or neither should be provided.
49
- if !iam_client_id.nil? && !iam_client_secret.nil?
50
- @iam_client_id = iam_client_id
51
- @iam_client_secret = iam_client_secret
52
- elsif iam_client_id.nil? && iam_client_secret.nil?
53
- @iam_client_id = DEFAULT_CLIENT_ID
54
- @iam_client_secret = DEFAULT_CLIENT_SECRET
55
- else
56
- raise ArgumentError.new("Only one of 'iam_client_id' or 'iam_client_secret' were specified, but both parameters should be specified together.")
51
+ if @client_id.nil? && @client_secret.nil?
52
+ @client_id = DEFAULT_CLIENT_ID
53
+ @client_secret = DEFAULT_CLIENT_SECRET
54
+ elsif @client_id.nil? || client_secret.nil?
55
+ raise ArgumentError.new("Only one of 'client_id' or 'client_secret' were specified, but both parameters should be specified together.")
57
56
  end
58
57
  end
59
58
  end
@@ -9,6 +9,12 @@ require_relative("./detailed_response.rb")
9
9
  require_relative("./api_exception.rb")
10
10
  require_relative("./utils.rb")
11
11
  require_relative("./authenticators/authenticator")
12
+ require_relative("./authenticators/basic_authenticator")
13
+ require_relative("./authenticators/bearer_token_authenticator")
14
+ require_relative("./authenticators/config_based_authenticator_factory")
15
+ require_relative("./authenticators/iam_authenticator")
16
+ require_relative("./authenticators/cp4d_authenticator")
17
+ require_relative("./authenticators/no_auth_authenticator")
12
18
 
13
19
  NORMALIZER = lambda do |uri| # Custom URI normalizer when using HTTP Client
14
20
  HTTP::URI.parse uri
@@ -37,6 +43,7 @@ module IBMCloudSdkCore
37
43
  @url = config[:url] unless config.nil?
38
44
  end
39
45
 
46
+ @temp_headers = {}
40
47
  @conn = HTTP::Client.new(
41
48
  headers: {}
42
49
  ).use normalize_uri: { normalizer: NORMALIZER }
@@ -18,6 +18,11 @@ module IBMCloudSdkCore
18
18
  @password = password
19
19
  @disable_ssl_verification = disable_ssl_verification
20
20
  super(url: url, token_name: TOKEN_NAME)
21
+ token
22
+ end
23
+
24
+ def access_token
25
+ @token_info[TOKEN_NAME]
21
26
  end
22
27
 
23
28
  def request_token
@@ -16,7 +16,7 @@ module IBMCloudSdkCore
16
16
  REQUEST_TOKEN_RESPONSE_TYPE = "cloud_iam"
17
17
  TOKEN_NAME = "access_token"
18
18
 
19
- attr_accessor :token_info, :user_access_token
19
+ attr_accessor :token_info, :token_name
20
20
  def initialize(
21
21
  apikey: nil,
22
22
  url: nil,
@@ -25,11 +25,16 @@ module IBMCloudSdkCore
25
25
  disable_ssl_verification: nil
26
26
  )
27
27
  @apikey = apikey
28
- @url = url.nil? ? DEFAULT_IAM_URL : url
28
+ url = DEFAULT_IAM_URL if url.nil?
29
29
  @client_id = client_id
30
30
  @client_secret = client_secret
31
31
  @disable_ssl_verification = disable_ssl_verification
32
32
  super(url: url, token_name: TOKEN_NAME)
33
+ token
34
+ end
35
+
36
+ def access_token
37
+ @token_info[TOKEN_NAME]
33
38
  end
34
39
 
35
40
  private
@@ -35,10 +35,6 @@ module IBMCloudSdkCore
35
35
  end
36
36
  end
37
37
 
38
- def access_token
39
- @token_info[@token_name]
40
- end
41
-
42
38
  def ssl_verification(disable_ssl_verification)
43
39
  @disable_ssl_verification = disable_ssl_verification
44
40
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module IBMCloudSdkCore
4
- VERSION = "1.0.0.rc1"
4
+ VERSION = "1.0.0.rc2"
5
5
  end
@@ -179,10 +179,38 @@ class BaseServiceTest < Minitest::Test
179
179
  end
180
180
 
181
181
  def test_for_cp4d_authenticator
182
+ token_layout = {
183
+ "username": "dummy",
184
+ "role": "Admin",
185
+ "permissions": %w[administrator manage_catalog],
186
+ "sub": "admin",
187
+ "iss": "sss",
188
+ "aud": "sss",
189
+ "uid": "sss",
190
+ "iat": Time.now.to_i + 3600,
191
+ "exp": Time.now.to_i
192
+ }
193
+ token = JWT.encode token_layout, "secret", "HS256"
194
+ response = {
195
+ "accessToken" => token,
196
+ "token_type" => "Bearer",
197
+ "expires_in" => 3600,
198
+ "expiration" => 1_524_167_011,
199
+ "refresh_token" => "jy4gl91BQ"
200
+ }
201
+ stub_request(:get, "https://hello.world/v1/preauth/validateAuth")
202
+ .with(
203
+ headers: {
204
+ "Authorization" => "Basic aGVsbG86d29ybGQ=",
205
+ "Connection" => "close",
206
+ "Host" => "hello.world"
207
+ }
208
+ )
209
+ .to_return(status: 200, body: response.to_json, headers: {})
182
210
  authenticator = IBMCloudSdkCore::CloudPakForDataAuthenticator.new(
183
211
  username: "hello",
184
212
  password: "world",
185
- url: "hello.world"
213
+ url: "https://hello.world"
186
214
  )
187
215
  refute_nil(authenticator)
188
216
  end
@@ -8,21 +8,26 @@ WebMock.disable_net_connect!(allow_localhost: true)
8
8
  # Unit tests for the IAM Token Manager
9
9
  class IAMTokenManagerTest < Minitest::Test
10
10
  def test_request_token
11
+ token_layout = {
12
+ "username": "dummy",
13
+ "role": "Admin",
14
+ "permissions": %w[administrator manage_catalog],
15
+ "sub": "admin",
16
+ "iss": "sss",
17
+ "aud": "sss",
18
+ "uid": "sss",
19
+ "iat": Time.now.to_i + 3600,
20
+ "exp": Time.now.to_i
21
+ }
22
+ token = JWT.encode token_layout, "secret", "HS256"
11
23
  response = {
12
- "access_token" => "oAeisG8yqPY7sFR_x66Z15",
24
+ "access_token" => token,
13
25
  "token_type" => "Bearer",
14
26
  "expires_in" => 3600,
15
27
  "expiration" => 1_524_167_011,
16
28
  "refresh_token" => "jy4gl91BQ"
17
29
  }
18
30
 
19
- # Use default iam_url, client id/secret
20
- token_manager = IBMCloudSdkCore::IAMTokenManager.new(
21
- apikey: "apikey",
22
- url: "https://iam.cloud.ibm.com/identity/token",
23
- client_id: "bx",
24
- client_secret: "bx"
25
- )
26
31
  stub_request(:post, "https://iam.cloud.ibm.com/identity/token")
27
32
  .with(
28
33
  body: { "apikey" => "apikey", "grant_type" => "urn:ibm:params:oauth:grant-type:apikey", "response_type" => "cloud_iam" },
@@ -33,16 +38,19 @@ class IAMTokenManagerTest < Minitest::Test
33
38
  "Host" => "iam.cloud.ibm.com"
34
39
  }
35
40
  ).to_return(status: 200, body: response.to_json, headers: {})
41
+ # Use default iam_url, client id/secret
42
+ token_manager = IBMCloudSdkCore::IAMTokenManager.new(
43
+ apikey: "apikey",
44
+ url: "https://iam.cloud.ibm.com/identity/token",
45
+ client_id: "bx",
46
+ client_secret: "bx"
47
+ )
36
48
  token_response = token_manager.send(:request_token)
37
49
  assert_equal(response, token_response)
38
50
  end
39
51
 
40
52
  def test_request_token_fails
41
53
  iam_url = "https://iam.cloud.ibm.com/identity/token"
42
- token_manager = IBMCloudSdkCore::IAMTokenManager.new(
43
- apikey: "apikey",
44
- url: iam_url
45
- )
46
54
  response = {
47
55
  "code" => "500",
48
56
  "error" => "Oh no"
@@ -58,17 +66,14 @@ class IAMTokenManagerTest < Minitest::Test
58
66
  }
59
67
  ).to_return(status: 500, body: response.to_json, headers: {})
60
68
  assert_raises do
61
- token_manager.send(:request_token)
69
+ IBMCloudSdkCore::IAMTokenManager.new(
70
+ apikey: "apikey",
71
+ url: iam_url
72
+ )
62
73
  end
63
74
  end
64
75
 
65
76
  def test_request_token_fails_catch_exception
66
- token_manager = IBMCloudSdkCore::IAMTokenManager.new(
67
- apikey: "apikey",
68
- url: "https://iam.cloud.ibm.com/identity/token",
69
- client_id: "bx",
70
- client_secret: "bx"
71
- )
72
77
  response = {
73
78
  "code" => "500",
74
79
  "error" => "Oh no"
@@ -84,38 +89,18 @@ class IAMTokenManagerTest < Minitest::Test
84
89
  }
85
90
  ).to_return(status: 401, body: response.to_json, headers: {})
86
91
  begin
87
- token_manager.send(:request_token)
92
+ IBMCloudSdkCore::IAMTokenManager.new(
93
+ apikey: "apikey",
94
+ url: "https://iam.cloud.ibm.com/identity/token",
95
+ client_id: "bx",
96
+ client_secret: "bx"
97
+ )
88
98
  rescue IBMCloudSdkCore::ApiException => e
89
99
  assert(e.to_s.instance_of?(String))
90
100
  end
91
101
  end
92
102
 
93
- def test_is_token_expired
94
- token_manager = IBMCloudSdkCore::IAMTokenManager.new(
95
- apikey: "apikey",
96
- url: "https://url.com",
97
- client_id: "bx",
98
- client_secret: "bx"
99
- )
100
-
101
- assert(token_manager.send(:token_expired?))
102
- token_manager.instance_variable_set(:@time_to_live, 3600)
103
- token_manager.instance_variable_set(:@expire_time, Time.now.to_i + 6000)
104
- refute(token_manager.send(:token_expired?))
105
- token_manager.instance_variable_set(:@time_to_live, 3600)
106
- token_manager.instance_variable_set(:@expire_time, Time.now.to_i - 3600)
107
- assert(token_manager.send(:token_expired?))
108
- end
109
-
110
103
  def test_get_token
111
- iam_url = "https://iam.cloud.ibm.com/identity/token"
112
- token_manager = IBMCloudSdkCore::IAMTokenManager.new(
113
- apikey: "apikey",
114
- url: iam_url,
115
- client_id: "bx",
116
- client_secret: "bx"
117
- )
118
-
119
104
  access_token_layout = {
120
105
  "username" => "dummy",
121
106
  "role" => "Admin",
@@ -148,8 +133,14 @@ class IAMTokenManagerTest < Minitest::Test
148
133
  "Host" => "iam.cloud.ibm.com"
149
134
  }
150
135
  ).to_return(status: 200, body: response.to_json, headers: {})
151
- token = token_manager.token
152
- assert_equal(access_token, token)
136
+ iam_url = "https://iam.cloud.ibm.com/identity/token"
137
+ token_manager = IBMCloudSdkCore::IAMTokenManager.new(
138
+ apikey: "apikey",
139
+ url: iam_url,
140
+ client_id: "bx",
141
+ client_secret: "bx"
142
+ )
143
+ assert_equal(token_manager.access_token, access_token)
153
144
  end
154
145
 
155
146
  def test_client_id_only
@@ -8,19 +8,25 @@ WebMock.disable_net_connect!(allow_localhost: true)
8
8
  # Unit tests for the CP4D Token Manager
9
9
  class CP4DTokenManagerTest < Minitest::Test
10
10
  def test_request_token
11
+ token_layout = {
12
+ "username": "dummy",
13
+ "role": "Admin",
14
+ "permissions": %w[administrator manage_catalog],
15
+ "sub": "admin",
16
+ "iss": "sss",
17
+ "aud": "sss",
18
+ "uid": "sss",
19
+ "iat": Time.now.to_i + 3600,
20
+ "exp": Time.now.to_i
21
+ }
22
+ token = JWT.encode token_layout, "secret", "HS256"
11
23
  response = {
12
- "access_token" => "oAeisG8yqPY7sFR_x66Z15",
24
+ "accessToken" => token,
13
25
  "token_type" => "Bearer",
14
26
  "expires_in" => 3600,
15
27
  "expiration" => 1_524_167_011,
16
28
  "refresh_token" => "jy4gl91BQ"
17
29
  }
18
-
19
- token_manager = IBMCloudSdkCore::CP4DTokenManager.new(
20
- url: "https://the.sixth.one",
21
- username: "you",
22
- password: "me"
23
- )
24
30
  stub_request(:get, "https://the.sixth.one/v1/preauth/validateAuth")
25
31
  .with(
26
32
  headers: {
@@ -28,16 +34,17 @@ class CP4DTokenManagerTest < Minitest::Test
28
34
  "Host" => "the.sixth.one"
29
35
  }
30
36
  ).to_return(status: 200, body: response.to_json, headers: {})
31
- token_response = token_manager.send(:request_token)
32
- assert_equal(response, token_response)
33
- end
34
37
 
35
- def test_request_token_fails
36
38
  token_manager = IBMCloudSdkCore::CP4DTokenManager.new(
37
39
  url: "https://the.sixth.one",
38
40
  username: "you",
39
41
  password: "me"
40
42
  )
43
+ token_response = token_manager.send(:request_token)
44
+ assert_equal(response, token_response)
45
+ end
46
+
47
+ def test_request_token_fails
41
48
  response = {
42
49
  "code" => "500",
43
50
  "error" => "Oh no"
@@ -50,7 +57,11 @@ class CP4DTokenManagerTest < Minitest::Test
50
57
  }
51
58
  ).to_return(status: 500, body: response.to_json, headers: {})
52
59
  begin
53
- token_manager.send(:request_token)
60
+ IBMCloudSdkCore::CP4DTokenManager.new(
61
+ url: "https://the.sixth.one",
62
+ username: "you",
63
+ password: "me"
64
+ )
54
65
  rescue IBMCloudSdkCore::ApiException => e
55
66
  assert(e.to_s.instance_of?(String))
56
67
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ibm_cloud_sdk_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc1
4
+ version: 1.0.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mamoon Raja
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-29 00:00:00.000000000 Z
11
+ date: 2019-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby