ibm_cloud_sdk_core 1.0.0.rc2 → 1.0.0.rc3

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: 24cf43bb93090b3c2cdb627369b7645ca17eadc7262f16fbb18b40e76f1285b2
4
- data.tar.gz: 2d8be9a330480c90327a5b52d6d2121476aaaf85ecb5ef3e3574945b4ceb75f1
3
+ metadata.gz: 552a7ea5d30afc2a3e9764b365e6a1ea1666852e7eefe54e01e63dc949cfdf02
4
+ data.tar.gz: 5acfc4a1cfd2f358096bf4c6153282ad39761ed9535ee283dfb28a3f499c7858
5
5
  SHA512:
6
- metadata.gz: 1294cd526ded8bccfd89556c9450e7111fcff4ae31162a9f4ea5004d6c718ca360a0b6a09a6f83bc1b3910993f8593d76add495736d361b1c876115df5f35ac9
7
- data.tar.gz: de99be13ca0a0ce0e0a4d73852bb7c2f25171717bc654e51d7dca70a834f26c1c05a8cac4bf98b2f14f908e0467ad9cd06e8c3799da8e4dbad0c6457e3752189
6
+ metadata.gz: 967664c0155975c23714884c142259824a74e363df6134bbfaff7236701f61ef3ec5b37950509cd78fcbb37b185e75eda451891fdc88f02f5f9766b9e7c040ed
7
+ data.tar.gz: e9005fe810d53199e88963ff13a4099c09c624e7f7664243aae7be405bd5bf77d71639cf8a0ace8f61a55beb569eb14343f430bbc8e689abdd8ab42c86003c96
@@ -26,11 +26,11 @@ module IBMCloudSdkCore
26
26
  else
27
27
  auth_type = config[:auth_type]
28
28
  end
29
- return BasicAuthenticator.new(config) if auth_type == AUTH_TYPE_BASIC
30
- return BearerTokenAuthenticator.new(config) if auth_type == AUTH_TYPE_BEARER_TOKEN
31
- return CloudPakForDataAuthenticator.new(config) if auth_type == AUTH_TYPE_CP4D
32
- return IamAuthenticator.new(config) if auth_type == AUTH_TYPE_IAM
33
- return NoAuthAUthenticator.new if auth_type == AUTH_TYPE_NO_AUTH
29
+ return BasicAuthenticator.new(config) if auth_type.casecmp(AUTH_TYPE_BASIC).zero?
30
+ return BearerTokenAuthenticator.new(config) if auth_type.casecmp(AUTH_TYPE_BEARER_TOKEN).zero?
31
+ return CloudPakForDataAuthenticator.new(config) if auth_type.casecmp(AUTH_TYPE_CP4D).zero?
32
+ return IamAuthenticator.new(config) if auth_type.casecmp(AUTH_TYPE_IAM).zero?
33
+ return NoAuthAuthenticator.new if auth_type.casecmp(AUTH_TYPE_NO_AUTH).zero?
34
34
  end
35
35
  end
36
36
  end
@@ -8,7 +8,7 @@ require_relative("../utils.rb")
8
8
  module IBMCloudSdkCore
9
9
  # Basic Authenticator
10
10
  class CloudPakForDataAuthenticator < Authenticator
11
- attr_accessor :authentication_type
11
+ attr_accessor :authentication_type, :disable_ssl_verification
12
12
  def initialize(vars)
13
13
  defaults = {
14
14
  username: nil,
@@ -33,14 +33,14 @@ module IBMCloudSdkCore
33
33
  end
34
34
 
35
35
  # Adds the Authorization header, if possible
36
- def authenticate(connector)
37
- connector.default_options.headers.add("Authorization", "Bearer #{@token_manager.access_token}")
36
+ def authenticate(headers)
37
+ headers["Authorization"] = "Bearer #{@token_manager.access_token}"
38
38
  end
39
39
 
40
40
  # Checks if all the inputs needed are present
41
41
  def validate
42
42
  raise ArgumentError.new("The username or password shouldn\'t be None.") if @username.nil? || @password.nil?
43
- raise ArgumentError.new("The url or password shouldn\'t be None.") if @url.nil?
43
+ raise ArgumentError.new("The url shouldn\'t be None.") if @url.nil?
44
44
  raise ArgumentError.new('The username shouldn\'t start or end with curly brackets or quotes. Be sure to remove any {} and \" characters surrounding your username') if check_bad_first_or_last_char(@username)
45
45
  raise ArgumentError.new('The password shouldn\'t start or end with curly brackets or quotes. Be sure to remove any {} and \" characters surrounding your password') if check_bad_first_or_last_char(@password)
46
46
  raise ArgumentError.new('The url shouldn\'t start or end with curly brackets or quotes. Be sure to remove any {} and \" characters surrounding your url') if check_bad_first_or_last_char(@url)
@@ -8,10 +8,7 @@ require_relative("../utils.rb")
8
8
  module IBMCloudSdkCore
9
9
  # Basic Authenticator
10
10
  class IamAuthenticator < Authenticator
11
- DEFAULT_CLIENT_ID = "bx"
12
- DEFAULT_CLIENT_SECRET = "bx"
13
-
14
- attr_accessor :authentication_type
11
+ attr_accessor :authentication_type, :disable_ssl_verification, :client_id, :client_secret
15
12
  def initialize(vars)
16
13
  defaults = {
17
14
  url: nil,
@@ -39,7 +36,6 @@ module IBMCloudSdkCore
39
36
 
40
37
  def authenticate(headers)
41
38
  headers["Authorization"] = "Bearer #{@token_manager.access_token}"
42
- headers
43
39
  end
44
40
 
45
41
  def validate
@@ -48,12 +44,7 @@ module IBMCloudSdkCore
48
44
  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)
49
45
 
50
46
  # Both the client id and secret should be provided or neither should be provided.
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.")
56
- end
47
+ raise ArgumentError.new("Only one of 'client_id' or 'client_secret' were specified, but both parameters should be specified together.") if (@client_id.nil? && !@client_secret.nil?) || (!@client_id.nil? && @client_secret.nil?)
57
48
  end
58
49
  end
59
50
  end
@@ -23,7 +23,7 @@ end
23
23
  module IBMCloudSdkCore
24
24
  # Class for interacting with the API
25
25
  class BaseService
26
- attr_accessor :display_name
26
+ attr_accessor :display_name, :service_url, :disable_ssl_verification
27
27
  attr_reader :conn, :authenticator
28
28
  def initialize(vars)
29
29
  defaults = {
@@ -32,15 +32,16 @@ module IBMCloudSdkCore
32
32
  display_name: nil
33
33
  }
34
34
  vars = defaults.merge(vars)
35
- @url = vars[:url]
35
+ @service_url = vars[:service_url]
36
36
  @authenticator = vars[:authenticator]
37
37
  @disable_ssl_verification = vars[:disable_ssl_verification]
38
38
  @display_name = vars[:display_name]
39
39
  @service_name = @display_name.tr(" ", "_").downcase unless @display_name.nil?
40
+ @authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: @service_name) if @authenticator.nil?
40
41
 
41
- if @service_name && !@url
42
+ if @service_name && !@service_url
42
43
  config = get_service_properties(@service_name)
43
- @url = config[:url] unless config.nil?
44
+ @service_url = config[:url] unless config.nil?
44
45
  end
45
46
 
46
47
  @temp_headers = {}
@@ -74,13 +75,17 @@ module IBMCloudSdkCore
74
75
 
75
76
  conn = @conn
76
77
 
78
+ @authenticator.authenticate(@temp_headers)
77
79
  args[:headers] = args[:headers].merge(@temp_headers) unless @temp_headers.nil?
78
80
  @temp_headers = nil unless @temp_headers.nil?
79
81
 
82
+ raise ArgumentError.new("service_url must be provided") if @service_url.nil?
83
+ raise ArgumentError.new('The service_url shouldn\'t start or end with curly brackets or quotes. Be sure to remove any {} and \" characters surrounding your username') if check_bad_first_or_last_char(@service_url)
84
+
80
85
  if args.key?(:form)
81
86
  response = conn.follow.request(
82
87
  args[:method],
83
- HTTP::URI.parse(@url + args[:url]),
88
+ HTTP::URI.parse(@service_url + args[:url]),
84
89
  headers: conn.default_options.headers.merge(HTTP::Headers.coerce(args[:headers])),
85
90
  params: args[:params],
86
91
  form: args[:form]
@@ -88,7 +93,7 @@ module IBMCloudSdkCore
88
93
  else
89
94
  response = conn.follow.request(
90
95
  args[:method],
91
- HTTP::URI.parse(@url + args[:url]),
96
+ HTTP::URI.parse(@service_url + args[:url]),
92
97
  headers: conn.default_options.headers.merge(HTTP::Headers.coerce(args[:headers])),
93
98
  body: args[:json],
94
99
  params: args[:params]
@@ -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, :token_name
19
+ attr_accessor :token_info, :token_name, :client_id, :client_secret
20
20
  def initialize(
21
21
  apikey: nil,
22
22
  url: nil,
@@ -35,10 +35,6 @@ module IBMCloudSdkCore
35
35
  end
36
36
  end
37
37
 
38
- def ssl_verification(disable_ssl_verification)
39
- @disable_ssl_verification = disable_ssl_verification
40
- end
41
-
42
38
  private
43
39
 
44
40
  # Check if currently stored token is expired.
@@ -65,10 +61,10 @@ module IBMCloudSdkCore
65
61
  end
66
62
 
67
63
  def request(method:, url:, headers: nil, params: nil, data: nil, username: nil, password: nil)
68
- if @disable_ssl_verification
69
- ssl_context = OpenSSL::SSL::SSLContext.new
70
- ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
71
- response = HTTP.basic_auth(user: username, pass: password).request(
64
+ ssl_context = OpenSSL::SSL::SSLContext.new
65
+ ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE if @disable_ssl_verification
66
+ if username.nil? && password.nil?
67
+ response = HTTP.request(
72
68
  method,
73
69
  url,
74
70
  body: data,
@@ -82,7 +78,8 @@ module IBMCloudSdkCore
82
78
  url,
83
79
  body: data,
84
80
  headers: headers,
85
- params: params
81
+ params: params,
82
+ ssl_context: ssl_context
86
83
  )
87
84
  end
88
85
  return JSON.parse(response.body.to_s) if (200..299).cover?(response.code)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module IBMCloudSdkCore
4
- VERSION = "1.0.0.rc2"
4
+ VERSION = "1.0.0.rc3"
5
5
  end
@@ -21,10 +21,10 @@ class BaseServiceTest < Minitest::Test
21
21
  end
22
22
 
23
23
  def test_wrong_apikey
24
+ file_path = File.join(File.dirname(__FILE__), "../../resources/ibm-credentials.env")
25
+ ENV["IBM_CREDENTIALS_FILE"] = file_path
24
26
  assert_raises do
25
- IBMCloudSdkCore::IamAuthenticator.new(
26
- apikey: "{apikey"
27
- )
27
+ IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "wrong")
28
28
  end
29
29
  end
30
30
 
@@ -37,6 +37,23 @@ class BaseServiceTest < Minitest::Test
37
37
  end
38
38
  end
39
39
 
40
+ def test_iam_client_id_only
41
+ assert_raises ArgumentError do
42
+ IBMCloudSdkCore::IamAuthenticator.new(apikey: "apikey", client_id: "Salah")
43
+ end
44
+ end
45
+
46
+ def test_no_auth_authenticator
47
+ file_path = File.join(File.dirname(__FILE__), "../../resources/ibm-credentials.env")
48
+ ENV["IBM_CREDENTIALS_FILE"] = file_path
49
+ authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "red_sox")
50
+ service = IBMCloudSdkCore::BaseService.new(
51
+ display_name: "Assistant",
52
+ authenticator: authenticator
53
+ )
54
+ refute_nil(service)
55
+ end
56
+
40
57
  def test_correct_creds_and_headers
41
58
  authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
42
59
  username: "username",
@@ -56,21 +73,11 @@ class BaseServiceTest < Minitest::Test
56
73
  refute_nil(service)
57
74
  end
58
75
 
59
- def test_set_credentials_from_path_in_env
60
- file_path = File.join(File.dirname(__FILE__), "../../resources/ibm-credentials.env")
61
- ENV["IBM_CREDENTIALS_FILE"] = file_path
62
- service = IBMCloudSdkCore::BaseService.new(display_name: "Visual Recognition")
63
- assert_equal(service.instance_variable_get(:@url), "https://gateway.ronaldo.com")
64
- refute_nil(service)
65
- ENV.delete("IBM_CREDENTIALS_FILE")
66
- end
67
-
68
76
  def test_set_credentials_from_path_in_env_nlu
69
77
  file_path = File.join(File.dirname(__FILE__), "../../resources/ibm-credentials.env")
70
78
  ENV["IBM_CREDENTIALS_FILE"] = file_path
71
- service = IBMCloudSdkCore::BaseService.new(display_name: "Natural Language Understanding")
72
- assert_equal(service.instance_variable_get(:@url), "https://gateway.messi.com")
73
- refute_nil(service)
79
+ authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "natural_language_understanding")
80
+ assert_equal(authenticator.authentication_type, "bearerToken")
74
81
  ENV.delete("IBM_CREDENTIALS_FILE")
75
82
  end
76
83
 
@@ -81,7 +88,6 @@ class BaseServiceTest < Minitest::Test
81
88
  service = IBMCloudSdkCore::BaseService.new(display_name: "Leo Messi", url: "some.url", authenticator: authenticator)
82
89
  assert_equal(authenticator.authentication_type, "bearerToken")
83
90
  refute_nil(service)
84
- ENV.delete("IBM_CREDENTIALS_FILE")
85
91
  end
86
92
 
87
93
  def test_vcap_services
@@ -100,18 +106,18 @@ class BaseServiceTest < Minitest::Test
100
106
  "Host" => "we.the.best"
101
107
  }
102
108
  ).to_return(status: 200, body: "", headers: {})
103
- authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "Salah")
104
- service = IBMCloudSdkCore::BaseService.new(display_name: "Salah", authenticator: authenticator, url: "https://we.the.best")
109
+ authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "salah")
110
+ service = IBMCloudSdkCore::BaseService.new(display_name: "Salah", authenticator: authenticator, service_url: "https://we.the.best")
105
111
  service_response = service.request(method: "GET", url: "/music", headers: {})
106
112
  assert_equal("", service_response.result)
107
113
  end
108
114
 
109
115
  def test_dummy_request_form_data
116
+ authenticator = IBMCloudSdkCore::BearerTokenAuthenticator.new(bearer_token: "token")
110
117
  service = IBMCloudSdkCore::BaseService.new(
111
118
  display_name: "Assistant",
112
- apikey: "apikey",
113
- iam_access_token: "token",
114
- url: "https://gateway.watsonplatform.net/"
119
+ authenticator: authenticator,
120
+ service_url: "https://gateway.watsonplatform.net/"
115
121
  )
116
122
  form_data = {}
117
123
  file = File.open(Dir.getwd + "/resources/cnc_test.pdf")
@@ -143,9 +149,9 @@ class BaseServiceTest < Minitest::Test
143
149
  "Host" => "we.the.best"
144
150
  }
145
151
  ).to_return(status: 500, body: response.to_json, headers: {})
146
- authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "Salah")
147
- service = IBMCloudSdkCore::BaseService.new(display_name: "Salah", authenticator: authenticator, url: "https://we.the.best")
148
- assert_raises do
152
+ authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "salah")
153
+ service = IBMCloudSdkCore::BaseService.new(display_name: "Salah", authenticator: authenticator, service_url: "https://we.the.best")
154
+ assert_raises IBMCloudSdkCore::ApiException do
149
155
  service.request(method: "GET", url: "/music", headers: {})
150
156
  end
151
157
  end
@@ -172,66 +178,9 @@ class BaseServiceTest < Minitest::Test
172
178
  service = IBMCloudSdkCore::BaseService.new(
173
179
  display_name: "Assistant",
174
180
  authenticator: authenticator,
175
- url: "https://we.the.best"
181
+ service_url: "https://we.the.best"
176
182
  )
177
183
  service_response = service.request(method: "GET", url: "/music", headers: {})
178
184
  assert_equal(response, service_response.result)
179
185
  end
180
-
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: {})
210
- authenticator = IBMCloudSdkCore::CloudPakForDataAuthenticator.new(
211
- username: "hello",
212
- password: "world",
213
- url: "https://hello.world"
214
- )
215
- refute_nil(authenticator)
216
- end
217
-
218
- # def test_CP4D_disable_ssl
219
- # authenticator = IBMCloudSdkCore::CloudPakForDataAuthenticator.new(
220
- # username: "username",
221
- # password: "password"
222
- # )
223
- # IBMCloudSdkCore::BaseService.new(
224
- # display_name: "Assistant",
225
- # url: "http://the.com",
226
- # authenticator: authenticator
227
- # )
228
- # stub_request(:get, "http://the.com/music")
229
- # .with(
230
- # headers: {
231
- # "Authorization" => "Basic Og==",
232
- # "Host" => "the.com"
233
- # }
234
- # ).to_return(status: 200, body: {}.to_json, headers: {})
235
- # assert_equal(authenticator.instance_variable_get(:@access_token), "token")
236
- # end
237
186
  end
@@ -9,11 +9,14 @@ WebMock.disable_net_connect!(allow_localhost: true)
9
9
  # Unit tests for the configure_http_client customizations, such as proxies and timeouts
10
10
  class HTTPConfigTest < Minitest::Test
11
11
  def test_proxy_address_port
12
- service = IBMCloudSdkCore::BaseService.new(
13
- version: "2018-03-16",
12
+ authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
14
13
  username: "username",
15
14
  password: "password"
16
15
  )
16
+ service = IBMCloudSdkCore::BaseService.new(
17
+ version: "2018-03-16",
18
+ authenticator: authenticator
19
+ )
17
20
  service.configure_http_client(
18
21
  proxy: {
19
22
  address: "bogus_address.com",
@@ -26,11 +29,14 @@ class HTTPConfigTest < Minitest::Test
26
29
  end
27
30
 
28
31
  def test_proxy_username_password
29
- service = IBMCloudSdkCore::BaseService.new(
30
- version: "2018-03-16",
32
+ authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
31
33
  username: "username",
32
34
  password: "password"
33
35
  )
36
+ service = IBMCloudSdkCore::BaseService.new(
37
+ version: "2018-03-16",
38
+ authenticator: authenticator
39
+ )
34
40
  service.configure_http_client(
35
41
  proxy: {
36
42
  address: "bogus_address.com",
@@ -47,11 +53,14 @@ class HTTPConfigTest < Minitest::Test
47
53
  end
48
54
 
49
55
  def test_proxy_headers
50
- service = IBMCloudSdkCore::BaseService.new(
51
- version: "2018-03-16",
56
+ authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
52
57
  username: "username",
53
58
  password: "password"
54
59
  )
60
+ service = IBMCloudSdkCore::BaseService.new(
61
+ version: "2018-03-16",
62
+ authenticator: authenticator
63
+ )
55
64
  service.configure_http_client(
56
65
  proxy: {
57
66
  address: "bogus_address.com",
@@ -68,11 +77,14 @@ class HTTPConfigTest < Minitest::Test
68
77
  end
69
78
 
70
79
  def test_proxy_username_password_headers
71
- service = IBMCloudSdkCore::BaseService.new(
72
- version: "2018-03-16",
80
+ authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
73
81
  username: "username",
74
82
  password: "password"
75
83
  )
84
+ service = IBMCloudSdkCore::BaseService.new(
85
+ version: "2018-03-16",
86
+ authenticator: authenticator
87
+ )
76
88
  service.configure_http_client(
77
89
  proxy: {
78
90
  address: "bogus_address.com",
@@ -93,11 +105,14 @@ class HTTPConfigTest < Minitest::Test
93
105
  end
94
106
 
95
107
  def test_timeout_per_operation
96
- service = IBMCloudSdkCore::BaseService.new(
97
- version: "2018-03-16",
108
+ authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
98
109
  username: "username",
99
110
  password: "password"
100
111
  )
112
+ service = IBMCloudSdkCore::BaseService.new(
113
+ version: "2018-03-16",
114
+ authenticator: authenticator
115
+ )
101
116
  service.configure_http_client(
102
117
  timeout: {
103
118
  per_operation: {
@@ -120,11 +135,14 @@ class HTTPConfigTest < Minitest::Test
120
135
  end
121
136
 
122
137
  def test_timeout_global
123
- service = IBMCloudSdkCore::BaseService.new(
124
- version: "2018-03-16",
138
+ authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
125
139
  username: "username",
126
140
  password: "password"
127
141
  )
142
+ service = IBMCloudSdkCore::BaseService.new(
143
+ version: "2018-03-16",
144
+ authenticator: authenticator
145
+ )
128
146
  service.configure_http_client(
129
147
  timeout: {
130
148
  global: 20
@@ -141,11 +159,14 @@ class HTTPConfigTest < Minitest::Test
141
159
  end
142
160
 
143
161
  def test_disable_ssl_verification
144
- service = IBMCloudSdkCore::BaseService.new(
145
- version: "2018-03-16",
162
+ authenticator = IBMCloudSdkCore::BasicAuthenticator.new(
146
163
  username: "username",
147
164
  password: "password"
148
165
  )
166
+ service = IBMCloudSdkCore::BaseService.new(
167
+ version: "2018-03-16",
168
+ authenticator: authenticator
169
+ )
149
170
  service.configure_http_client(disable_ssl_verification: true)
150
171
  refute_nil(service.conn.default_options.ssl_context)
151
172
  end
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ require("json")
4
+ require("jwt")
5
+ require_relative("./../test_helper.rb")
6
+ require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/basic_authenticator")
7
+ require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/config_based_authenticator_factory")
8
+ require("webmock/minitest")
9
+
10
+ WebMock.disable_net_connect!(allow_localhost: true)
11
+
12
+ # Unit tests for the base service
13
+ class Cp4dAuthenticatorTest < Minitest::Test
14
+ def test_cp4d_authenticator
15
+ token_layout = {
16
+ "username": "dummy",
17
+ "role": "Admin",
18
+ "permissions": %w[administrator manage_catalog],
19
+ "sub": "admin",
20
+ "iss": "sss",
21
+ "aud": "sss",
22
+ "uid": "sss",
23
+ "iat": Time.now.to_i + 3600,
24
+ "exp": Time.now.to_i
25
+ }
26
+ token = JWT.encode token_layout, "secret", "HS256"
27
+ response = {
28
+ "accessToken" => token,
29
+ "token_type" => "Bearer",
30
+ "expires_in" => 3600,
31
+ "expiration" => 1_524_167_011,
32
+ "refresh_token" => "jy4gl91BQ"
33
+ }
34
+ stub_request(:get, "https://icp.com/v1/preauth/validateAuth")
35
+ .with(
36
+ headers: {
37
+ "Authorization" => "Basic dXNlcm5hbWU6cGFzc3dvcmQ=",
38
+ "Connection" => "close",
39
+ "Host" => "icp.com",
40
+ "User-Agent" => "http.rb/4.1.1"
41
+ }
42
+ )
43
+ .to_return(status: 200, body: response.to_json, headers: {})
44
+ authenticator = IBMCloudSdkCore::CloudPakForDataAuthenticator.new(
45
+ username: "username",
46
+ password: "password",
47
+ url: "https://icp.com",
48
+ disable_ssl_verification: true
49
+ )
50
+ refute_nil(authenticator)
51
+ assert_equal(authenticator.instance_variable_get(:@token_manager).access_token, token)
52
+ end
53
+
54
+ def test_cp4d_authenticator_authenticate
55
+ token_layout = {
56
+ "username": "dummy",
57
+ "role": "Admin",
58
+ "permissions": %w[administrator manage_catalog],
59
+ "sub": "admin",
60
+ "iss": "sss",
61
+ "aud": "sss",
62
+ "uid": "sss",
63
+ "iat": Time.now.to_i + 3600,
64
+ "exp": Time.now.to_i
65
+ }
66
+ token = JWT.encode token_layout, "secret", "HS256"
67
+ response = {
68
+ "accessToken" => token,
69
+ "token_type" => "Bearer",
70
+ "expires_in" => 3600,
71
+ "expiration" => 1_524_167_011,
72
+ "refresh_token" => "jy4gl91BQ"
73
+ }
74
+ stub_request(:get, "https://icp.com/v1/preauth/validateAuth")
75
+ .with(
76
+ headers: {
77
+ "Authorization" => "Basic dXNlcm5hbWU6cGFzc3dvcmQ=",
78
+ "Connection" => "close",
79
+ "Host" => "icp.com",
80
+ "User-Agent" => "http.rb/4.1.1"
81
+ }
82
+ )
83
+ .to_return(status: 200, body: response.to_json, headers: {})
84
+ authenticator = IBMCloudSdkCore::CloudPakForDataAuthenticator.new(
85
+ username: "username",
86
+ password: "password",
87
+ url: "https://icp.com",
88
+ disable_ssl_verification: true
89
+ )
90
+ refute_nil(authenticator)
91
+ assert_equal(authenticator.instance_variable_get(:@token_manager).access_token, token)
92
+ headers = {}
93
+ authenticated_headers = { "Authorization" => "Bearer " + token }
94
+ authenticator.authenticate(headers)
95
+ assert_equal(headers, authenticated_headers)
96
+ end
97
+ end
@@ -0,0 +1,143 @@
1
+ # frozen_string_literal: true
2
+
3
+ require("json")
4
+ require("jwt")
5
+ require_relative("./../test_helper.rb")
6
+ require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/basic_authenticator")
7
+ require_relative("./../../lib/ibm_cloud_sdk_core/authenticators/config_based_authenticator_factory")
8
+ require("webmock/minitest")
9
+
10
+ WebMock.disable_net_connect!(allow_localhost: true)
11
+
12
+ # Unit tests for the base service
13
+ class IamAuthenticatorTest < Minitest::Test
14
+ def test_iam_authenticator
15
+ token_layout = {
16
+ "username": "dummy",
17
+ "role": "Admin",
18
+ "permissions": %w[administrator manage_catalog],
19
+ "sub": "admin",
20
+ "iss": "sss",
21
+ "aud": "sss",
22
+ "uid": "sss",
23
+ "iat": Time.now.to_i + 3600,
24
+ "exp": Time.now.to_i
25
+ }
26
+ token = JWT.encode token_layout, "secret", "HS256"
27
+ response = {
28
+ "access_token" => token,
29
+ "token_type" => "Bearer",
30
+ "expires_in" => 3600,
31
+ "expiration" => 1_524_167_011,
32
+ "refresh_token" => "jy4gl91BQ"
33
+ }
34
+ stub_request(:post, "https://iam.cloud.ibm.com/identity/token")
35
+ .with(
36
+ body: {
37
+ "apikey" => "apikey",
38
+ "grant_type" => "urn:ibm:params:oauth:grant-type:apikey",
39
+ "response_type" => "cloud_iam"
40
+ },
41
+ headers: {
42
+ "Connection" => "close",
43
+ "Host" => "iam.cloud.ibm.com",
44
+ "User-Agent" => "http.rb/4.1.1"
45
+ }
46
+ )
47
+ .to_return(status: 200, body: response.to_json, headers: {})
48
+ authenticator = IBMCloudSdkCore::IamAuthenticator.new(
49
+ apikey: "apikey"
50
+ )
51
+ refute_nil(authenticator)
52
+ assert_equal(authenticator.instance_variable_get(:@token_manager).access_token, token)
53
+ end
54
+
55
+ def test_iam_authenticator_client_id_client_secret
56
+ token_layout = {
57
+ "username": "dummy",
58
+ "role": "Admin",
59
+ "permissions": %w[administrator manage_catalog],
60
+ "sub": "admin",
61
+ "iss": "sss",
62
+ "aud": "sss",
63
+ "uid": "sss",
64
+ "iat": Time.now.to_i + 3600,
65
+ "exp": Time.now.to_i
66
+ }
67
+ token = JWT.encode token_layout, "secret", "HS256"
68
+ response = {
69
+ "access_token" => token,
70
+ "token_type" => "Bearer",
71
+ "expires_in" => 3600,
72
+ "expiration" => 1_524_167_011,
73
+ "refresh_token" => "jy4gl91BQ"
74
+ }
75
+ stub_request(:post, "https://iam.cloud.ibm.com/identity/token")
76
+ .with(
77
+ body: {
78
+ "apikey" => "apikey",
79
+ "grant_type" => "urn:ibm:params:oauth:grant-type:apikey",
80
+ "response_type" => "cloud_iam"
81
+ },
82
+ headers: {
83
+ "Connection" => "close",
84
+ "Authorization" => "Basic Yng6Yng=",
85
+ "Host" => "iam.cloud.ibm.com",
86
+ "User-Agent" => "http.rb/4.1.1"
87
+ }
88
+ )
89
+ .to_return(status: 200, body: response.to_json, headers: {})
90
+ authenticator = IBMCloudSdkCore::IamAuthenticator.new(
91
+ apikey: "apikey",
92
+ client_id: "bx",
93
+ client_secret: "bx"
94
+ )
95
+ refute_nil(authenticator)
96
+ assert_equal(authenticator.instance_variable_get(:@token_manager).access_token, token)
97
+ end
98
+
99
+ def test_cp4d_authenticator_authenticate
100
+ token_layout = {
101
+ "username": "dummy",
102
+ "role": "Admin",
103
+ "permissions": %w[administrator manage_catalog],
104
+ "sub": "admin",
105
+ "iss": "sss",
106
+ "aud": "sss",
107
+ "uid": "sss",
108
+ "iat": Time.now.to_i + 3600,
109
+ "exp": Time.now.to_i
110
+ }
111
+ token = JWT.encode token_layout, "secret", "HS256"
112
+ response = {
113
+ "access_token" => token,
114
+ "token_type" => "Bearer",
115
+ "expires_in" => 3600,
116
+ "expiration" => 1_524_167_011,
117
+ "refresh_token" => "jy4gl91BQ"
118
+ }
119
+ stub_request(:post, "https://iam.cloud.ibm.com/identity/token")
120
+ .with(
121
+ body: {
122
+ "apikey" => "apikey",
123
+ "grant_type" => "urn:ibm:params:oauth:grant-type:apikey",
124
+ "response_type" => "cloud_iam"
125
+ },
126
+ headers: {
127
+ "Connection" => "close",
128
+ "Host" => "iam.cloud.ibm.com",
129
+ "User-Agent" => "http.rb/4.1.1"
130
+ }
131
+ )
132
+ .to_return(status: 200, body: response.to_json, headers: {})
133
+ authenticator = IBMCloudSdkCore::IamAuthenticator.new(
134
+ apikey: "apikey"
135
+ )
136
+ refute_nil(authenticator)
137
+ assert_equal(authenticator.instance_variable_get(:@token_manager).access_token, token)
138
+ headers = {}
139
+ authenticated_headers = { "Authorization" => "Bearer " + token }
140
+ authenticator.authenticate(headers)
141
+ assert_equal(headers, authenticated_headers)
142
+ end
143
+ end
@@ -60,7 +60,6 @@ class IAMTokenManagerTest < Minitest::Test
60
60
  body: { "apikey" => "apikey", "grant_type" => "urn:ibm:params:oauth:grant-type:apikey", "response_type" => "cloud_iam" },
61
61
  headers: {
62
62
  "Accept" => "application/json",
63
- "Authorization" => "Basic Og==",
64
63
  "Content-Type" => "application/x-www-form-urlencoded",
65
64
  "Host" => "iam.cloud.ibm.com"
66
65
  }
@@ -25,7 +25,6 @@ class JWTTokenManagerTest < Minitest::Test
25
25
  stub_request(:get, "https://the.sixth.one")
26
26
  .with(
27
27
  headers: {
28
- "Authorization" => "Basic Og==",
29
28
  "Host" => "the.sixth.one"
30
29
  }
31
30
  ).to_return(status: 200, body: response.to_json, headers: {})
@@ -46,7 +45,6 @@ class JWTTokenManagerTest < Minitest::Test
46
45
  stub_request(:get, "https://the.sixth.one/")
47
46
  .with(
48
47
  headers: {
49
- "Authorization" => "Basic Og==",
50
48
  "Host" => "the.sixth.one"
51
49
  }
52
50
  ).to_return(status: 500, body: response.to_json, headers: {})
@@ -89,4 +87,55 @@ class JWTTokenManagerTest < Minitest::Test
89
87
  token_response = token_manager.send(:token)
90
88
  assert_equal(access_token, token_response)
91
89
  end
90
+
91
+ def test_cp4d_disable_ssl
92
+ token_layout = {
93
+ "username": "dummy",
94
+ "role": "Admin",
95
+ "permissions": %w[administrator manage_catalog],
96
+ "sub": "admin",
97
+ "iss": "sss",
98
+ "aud": "sss",
99
+ "uid": "sss",
100
+ "iat": Time.now.to_i + 3600,
101
+ "exp": Time.now.to_i
102
+ }
103
+ token = JWT.encode token_layout, "secret", "HS256"
104
+ response = {
105
+ "accessToken" => token,
106
+ "token_type" => "Bearer",
107
+ "expires_in" => 3600,
108
+ "expiration" => 1_524_167_011,
109
+ "refresh_token" => "jy4gl91BQ"
110
+ }
111
+ stub_request(:get, "https://icp.com/v1/preauth/validateAuth")
112
+ .with(
113
+ headers: {
114
+ "Authorization" => "Basic dXNlcm5hbWU6cGFzc3dvcmQ=",
115
+ "Connection" => "close",
116
+ "Host" => "icp.com",
117
+ "User-Agent" => "http.rb/4.1.1"
118
+ }
119
+ )
120
+ .to_return(status: 200, body: response.to_json, headers: {})
121
+ authenticator = IBMCloudSdkCore::CloudPakForDataAuthenticator.new(
122
+ username: "username",
123
+ password: "password",
124
+ url: "https://icp.com",
125
+ disable_ssl_verification: true
126
+ )
127
+ IBMCloudSdkCore::BaseService.new(
128
+ display_name: "Assistant",
129
+ service_url: "http://the.com",
130
+ authenticator: authenticator
131
+ )
132
+ stub_request(:get, "http://the.com/music")
133
+ .with(
134
+ headers: {
135
+ "Authorization" => "Basic Og==",
136
+ "Host" => "the.com"
137
+ }
138
+ ).to_return(status: 200, body: {}.to_json, headers: {})
139
+ assert_equal(authenticator.instance_variable_get(:@token_manager).access_token, token)
140
+ end
92
141
  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.rc2
4
+ version: 1.0.0.rc3
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-30 00:00:00.000000000 Z
11
+ date: 2019-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -247,9 +247,11 @@ files:
247
247
  - test/test_helper.rb
248
248
  - test/unit/test_base_service.rb
249
249
  - test/unit/test_configure_http_proxy.rb
250
+ - test/unit/test_cp4d_authenticator.rb
251
+ - test/unit/test_cp4d_token_manager.rb
250
252
  - test/unit/test_detailed_response.rb
253
+ - test/unit/test_iam_authenticator.rb
251
254
  - test/unit/test_iam_token_manager.rb
252
- - test/unit/test_icp4d_token_manager.rb
253
255
  - test/unit/test_jwt_token_manager.rb
254
256
  homepage: https://www.github.com/IBM
255
257
  licenses: