ibm_cloud_sdk_core 1.0.0.rc3 → 1.0.0.rc4
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/ibm_cloud_sdk_core/authenticators/basic_authenticator.rb +0 -1
- data/lib/ibm_cloud_sdk_core/authenticators/bearer_token_authenticator.rb +0 -1
- data/lib/ibm_cloud_sdk_core/authenticators/config_based_authenticator_factory.rb +2 -0
- data/lib/ibm_cloud_sdk_core/base_service.rb +7 -7
- data/lib/ibm_cloud_sdk_core/utils.rb +4 -4
- data/lib/ibm_cloud_sdk_core/version.rb +1 -1
- data/test/unit/test_base_service.rb +10 -9
- data/test/unit/test_iam_authenticator.rb +42 -0
- data/test/unit/test_jwt_token_manager.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2199b7e854aa1782e0a5f75e89ed01033c93eba058a7143213668625ebf6a9ce
|
4
|
+
data.tar.gz: 0175abf279e3d455ccc8b9fd226024d4a9ab0052720e3644661f0cdb40bcf96d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c003a64cb4671105912a4d7428098b25230ad04d63a04b6a0304e7117f3f5b22c01f4bd9348e8fa9e423f75a2bc8b4fd47d3dc5cafa2a81cc22e17d660593bb4
|
7
|
+
data.tar.gz: 93670092b8bd6d66fd4c607e01590cb9f1bfbb6f4b7e245dc8fb702cbb8c1083cd5ba323bd7b65ce790112f787d5af94ab22303c1c38685229f359a2d9f01455
|
@@ -24,7 +24,6 @@ module IBMCloudSdkCore
|
|
24
24
|
def authenticate(headers)
|
25
25
|
base64_authentication = Base64.strict_encode64("#{@username}:#{@password}")
|
26
26
|
headers["Authorization"] = "Basic #{base64_authentication}"
|
27
|
-
headers
|
28
27
|
end
|
29
28
|
|
30
29
|
# Checks if all the inputs needed are present
|
@@ -26,6 +26,8 @@ module IBMCloudSdkCore
|
|
26
26
|
else
|
27
27
|
auth_type = config[:auth_type]
|
28
28
|
end
|
29
|
+
config.delete(:url) unless config[:url].nil?
|
30
|
+
config[:url] = config[:auth_url] unless config[:auth_url].nil?
|
29
31
|
return BasicAuthenticator.new(config) if auth_type.casecmp(AUTH_TYPE_BASIC).zero?
|
30
32
|
return BearerTokenAuthenticator.new(config) if auth_type.casecmp(AUTH_TYPE_BEARER_TOKEN).zero?
|
31
33
|
return CloudPakForDataAuthenticator.new(config) if auth_type.casecmp(AUTH_TYPE_CP4D).zero?
|
@@ -23,21 +23,21 @@ end
|
|
23
23
|
module IBMCloudSdkCore
|
24
24
|
# Class for interacting with the API
|
25
25
|
class BaseService
|
26
|
-
attr_accessor :
|
26
|
+
attr_accessor :service_name, :service_url, :disable_ssl_verification
|
27
27
|
attr_reader :conn, :authenticator
|
28
28
|
def initialize(vars)
|
29
29
|
defaults = {
|
30
30
|
authenticator: nil,
|
31
31
|
disable_ssl_verification: false,
|
32
|
-
|
32
|
+
service_name: nil
|
33
33
|
}
|
34
34
|
vars = defaults.merge(vars)
|
35
35
|
@service_url = vars[:service_url]
|
36
36
|
@authenticator = vars[:authenticator]
|
37
37
|
@disable_ssl_verification = vars[:disable_ssl_verification]
|
38
|
-
@
|
39
|
-
|
40
|
-
|
38
|
+
@service_name = vars[:service_name]
|
39
|
+
|
40
|
+
raise ArgumentError.new("authenticator must be provided") if @authenticator.nil?
|
41
41
|
|
42
42
|
if @service_name && !@service_url
|
43
43
|
config = get_service_properties(@service_name)
|
@@ -75,9 +75,9 @@ module IBMCloudSdkCore
|
|
75
75
|
|
76
76
|
conn = @conn
|
77
77
|
|
78
|
-
@authenticator.authenticate(
|
78
|
+
@authenticator.authenticate(args[:headers])
|
79
79
|
args[:headers] = args[:headers].merge(@temp_headers) unless @temp_headers.nil?
|
80
|
-
@temp_headers =
|
80
|
+
@temp_headers = {} unless @temp_headers.nil?
|
81
81
|
|
82
82
|
raise ArgumentError.new("service_url must be provided") if @service_url.nil?
|
83
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)
|
@@ -20,15 +20,15 @@ end
|
|
20
20
|
def load_from_credential_file(service_name, separator = "=")
|
21
21
|
credential_file_path = ENV["IBM_CREDENTIALS_FILE"]
|
22
22
|
|
23
|
-
#
|
23
|
+
# Top-level directory of the project
|
24
24
|
if credential_file_path.nil?
|
25
|
-
file_path =
|
25
|
+
file_path = File.join(File.dirname(__FILE__), "/../../" + DEFAULT_CREDENTIALS_FILE_NAME)
|
26
26
|
credential_file_path = file_path if File.exist?(file_path)
|
27
27
|
end
|
28
28
|
|
29
|
-
#
|
29
|
+
# Home directory
|
30
30
|
if credential_file_path.nil?
|
31
|
-
file_path =
|
31
|
+
file_path = ENV["HOME"] + "/" + DEFAULT_CREDENTIALS_FILE_NAME
|
32
32
|
credential_file_path = file_path if File.exist?(file_path)
|
33
33
|
end
|
34
34
|
|
@@ -48,10 +48,11 @@ class BaseServiceTest < Minitest::Test
|
|
48
48
|
ENV["IBM_CREDENTIALS_FILE"] = file_path
|
49
49
|
authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "red_sox")
|
50
50
|
service = IBMCloudSdkCore::BaseService.new(
|
51
|
-
|
51
|
+
service_name: "assistant",
|
52
52
|
authenticator: authenticator
|
53
53
|
)
|
54
54
|
refute_nil(service)
|
55
|
+
ENV.delete("IBM_CREDENTIALS_FILE")
|
55
56
|
end
|
56
57
|
|
57
58
|
def test_correct_creds_and_headers
|
@@ -60,7 +61,7 @@ class BaseServiceTest < Minitest::Test
|
|
60
61
|
password: "password"
|
61
62
|
)
|
62
63
|
service = IBMCloudSdkCore::BaseService.new(
|
63
|
-
|
64
|
+
service_name: "assistant",
|
64
65
|
authenticator: authenticator
|
65
66
|
)
|
66
67
|
service.add_default_headers(
|
@@ -85,7 +86,7 @@ class BaseServiceTest < Minitest::Test
|
|
85
86
|
file_path = File.join(File.dirname(__FILE__), "../../resources/ibm-credentials.env")
|
86
87
|
ENV["IBM_CREDENTIALS_FILE"] = file_path
|
87
88
|
authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "leo_messi")
|
88
|
-
service = IBMCloudSdkCore::BaseService.new(
|
89
|
+
service = IBMCloudSdkCore::BaseService.new(service_name: "leo_messi", url: "some.url", authenticator: authenticator)
|
89
90
|
assert_equal(authenticator.authentication_type, "bearerToken")
|
90
91
|
refute_nil(service)
|
91
92
|
end
|
@@ -93,9 +94,9 @@ class BaseServiceTest < Minitest::Test
|
|
93
94
|
def test_vcap_services
|
94
95
|
ENV["VCAP_SERVICES"] = JSON.parse(File.read(Dir.getwd + "/resources/vcap-testing.json")).to_json
|
95
96
|
authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "salah")
|
96
|
-
service = IBMCloudSdkCore::BaseService.new(
|
97
|
+
service = IBMCloudSdkCore::BaseService.new(service_name: "salah", authenticator: authenticator)
|
97
98
|
assert_equal(authenticator.username, "mo")
|
98
|
-
assert_equal(service.
|
99
|
+
assert_equal(service.service_name, "salah")
|
99
100
|
end
|
100
101
|
|
101
102
|
def test_dummy_request
|
@@ -107,7 +108,7 @@ class BaseServiceTest < Minitest::Test
|
|
107
108
|
}
|
108
109
|
).to_return(status: 200, body: "", headers: {})
|
109
110
|
authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "salah")
|
110
|
-
service = IBMCloudSdkCore::BaseService.new(
|
111
|
+
service = IBMCloudSdkCore::BaseService.new(service_name: "salah", authenticator: authenticator, service_url: "https://we.the.best")
|
111
112
|
service_response = service.request(method: "GET", url: "/music", headers: {})
|
112
113
|
assert_equal("", service_response.result)
|
113
114
|
end
|
@@ -115,7 +116,7 @@ class BaseServiceTest < Minitest::Test
|
|
115
116
|
def test_dummy_request_form_data
|
116
117
|
authenticator = IBMCloudSdkCore::BearerTokenAuthenticator.new(bearer_token: "token")
|
117
118
|
service = IBMCloudSdkCore::BaseService.new(
|
118
|
-
|
119
|
+
service_name: "assistant",
|
119
120
|
authenticator: authenticator,
|
120
121
|
service_url: "https://gateway.watsonplatform.net/"
|
121
122
|
)
|
@@ -150,7 +151,7 @@ class BaseServiceTest < Minitest::Test
|
|
150
151
|
}
|
151
152
|
).to_return(status: 500, body: response.to_json, headers: {})
|
152
153
|
authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "salah")
|
153
|
-
service = IBMCloudSdkCore::BaseService.new(
|
154
|
+
service = IBMCloudSdkCore::BaseService.new(service_name: "salah", authenticator: authenticator, service_url: "https://we.the.best")
|
154
155
|
assert_raises IBMCloudSdkCore::ApiException do
|
155
156
|
service.request(method: "GET", url: "/music", headers: {})
|
156
157
|
end
|
@@ -176,7 +177,7 @@ class BaseServiceTest < Minitest::Test
|
|
176
177
|
password: "icp-xyz"
|
177
178
|
)
|
178
179
|
service = IBMCloudSdkCore::BaseService.new(
|
179
|
-
|
180
|
+
service_name: "assistant",
|
180
181
|
authenticator: authenticator,
|
181
182
|
service_url: "https://we.the.best"
|
182
183
|
)
|
@@ -140,4 +140,46 @@ class IamAuthenticatorTest < Minitest::Test
|
|
140
140
|
authenticator.authenticate(headers)
|
141
141
|
assert_equal(headers, authenticated_headers)
|
142
142
|
end
|
143
|
+
|
144
|
+
def test_iam_authenticator_auth_url
|
145
|
+
file_path = File.join(File.dirname(__FILE__), "../../resources/ibm-credentials.env")
|
146
|
+
ENV["IBM_CREDENTIALS_FILE"] = file_path
|
147
|
+
token_layout = {
|
148
|
+
"username": "dummy",
|
149
|
+
"role": "Admin",
|
150
|
+
"permissions": %w[administrator manage_catalog],
|
151
|
+
"sub": "admin",
|
152
|
+
"iss": "sss",
|
153
|
+
"aud": "sss",
|
154
|
+
"uid": "sss",
|
155
|
+
"iat": Time.now.to_i + 3600,
|
156
|
+
"exp": Time.now.to_i
|
157
|
+
}
|
158
|
+
token = JWT.encode token_layout, "secret", "HS256"
|
159
|
+
response = {
|
160
|
+
"access_token" => token,
|
161
|
+
"token_type" => "Bearer",
|
162
|
+
"expires_in" => 3600,
|
163
|
+
"expiration" => 1_524_167_011,
|
164
|
+
"refresh_token" => "jy4gl91BQ"
|
165
|
+
}
|
166
|
+
stub_request(:post, "https://my.link/identity/token")
|
167
|
+
.with(
|
168
|
+
body: {
|
169
|
+
"apikey" => "mesSi",
|
170
|
+
"grant_type" => "urn:ibm:params:oauth:grant-type:apikey",
|
171
|
+
"response_type" => "cloud_iam"
|
172
|
+
},
|
173
|
+
headers: {
|
174
|
+
"Connection" => "close",
|
175
|
+
"Host" => "my.link",
|
176
|
+
"User-Agent" => "http.rb/4.1.1"
|
177
|
+
}
|
178
|
+
)
|
179
|
+
.to_return(status: 200, body: response.to_json, headers: {})
|
180
|
+
authenticator = IBMCloudSdkCore::ConfigBasedAuthenticatorFactory.new.get_authenticator(service_name: "my_service")
|
181
|
+
refute_nil(authenticator)
|
182
|
+
assert_equal(authenticator.instance_variable_get(:@token_manager).access_token, token)
|
183
|
+
ENV.delete("IBM_CREDENTIALS_FILE")
|
184
|
+
end
|
143
185
|
end
|
@@ -125,7 +125,7 @@ class JWTTokenManagerTest < Minitest::Test
|
|
125
125
|
disable_ssl_verification: true
|
126
126
|
)
|
127
127
|
IBMCloudSdkCore::BaseService.new(
|
128
|
-
|
128
|
+
service_name: "assistant",
|
129
129
|
service_url: "http://the.com",
|
130
130
|
authenticator: authenticator
|
131
131
|
)
|
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.
|
4
|
+
version: 1.0.0.rc4
|
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-09-
|
11
|
+
date: 2019-09-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|