ibm_cloud_resource_controller 1.0.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/.bumpversion.cfg +13 -0
  3. data/.gitignore +13 -0
  4. data/.openapi-generator-ignore +23 -0
  5. data/.openapi-generator/VERSION +1 -0
  6. data/.rspec +3 -0
  7. data/.travis.yml +49 -0
  8. data/CHANGELOG.md +2 -0
  9. data/CODE_OF_CONDUCT.md +76 -0
  10. data/CONTRIBUTING.md +13 -0
  11. data/Gemfile +4 -6
  12. data/LICENSE +201 -0
  13. data/README.md +56 -120
  14. data/Rakefile +3 -7
  15. data/bin/console +14 -0
  16. data/bin/setup +8 -0
  17. data/ibm_cloud_resource_controller.gemspec +34 -37
  18. data/lib/ibm_cloud_resource_controller.rb +9 -64
  19. data/lib/ibm_cloud_resource_controller/authenticators.rb +15 -0
  20. data/lib/ibm_cloud_resource_controller/common.rb +22 -0
  21. data/lib/ibm_cloud_resource_controller/resource_controller_v2.rb +982 -0
  22. data/lib/ibm_cloud_resource_controller/resource_manager_v2.rb +303 -0
  23. data/lib/ibm_cloud_resource_controller/version.rb +1 -13
  24. metadata +59 -145
  25. data/docs/Credentials.md +0 -25
  26. data/docs/ErrorReport.md +0 -23
  27. data/docs/PlanHistoryItem.md +0 -19
  28. data/docs/Reclamation.md +0 -45
  29. data/docs/ReclamationActionsPost.md +0 -19
  30. data/docs/ReclamationsList.md +0 -17
  31. data/docs/ResourceAlias.md +0 -57
  32. data/docs/ResourceAliasPatch.md +0 -17
  33. data/docs/ResourceAliasPost.md +0 -21
  34. data/docs/ResourceAliasesApi.md +0 -302
  35. data/docs/ResourceAliasesList.md +0 -21
  36. data/docs/ResourceBinding.md +0 -57
  37. data/docs/ResourceBindingPatch.md +0 -17
  38. data/docs/ResourceBindingPost.md +0 -25
  39. data/docs/ResourceBindingPostParameters.md +0 -17
  40. data/docs/ResourceBindingsApi.md +0 -300
  41. data/docs/ResourceBindingsList.md +0 -21
  42. data/docs/ResourceInstance.md +0 -81
  43. data/docs/ResourceInstancePatch.md +0 -23
  44. data/docs/ResourceInstancePost.md +0 -29
  45. data/docs/ResourceInstancesApi.md +0 -418
  46. data/docs/ResourceInstancesList.md +0 -21
  47. data/docs/ResourceKey.md +0 -53
  48. data/docs/ResourceKeyPatch.md +0 -17
  49. data/docs/ResourceKeyPost.md +0 -23
  50. data/docs/ResourceKeysApi.md +0 -298
  51. data/docs/ResourceKeysList.md +0 -21
  52. data/docs/ResourceReclamationsApi.md +0 -128
  53. data/git_push.sh +0 -58
  54. data/lib/ibm_cloud_resource_controller/api/resource_aliases_api.rb +0 -363
  55. data/lib/ibm_cloud_resource_controller/api/resource_bindings_api.rb +0 -360
  56. data/lib/ibm_cloud_resource_controller/api/resource_instances_api.rb +0 -493
  57. data/lib/ibm_cloud_resource_controller/api/resource_keys_api.rb +0 -357
  58. data/lib/ibm_cloud_resource_controller/api/resource_reclamations_api.rb +0 -156
  59. data/lib/ibm_cloud_resource_controller/api_client.rb +0 -388
  60. data/lib/ibm_cloud_resource_controller/api_error.rb +0 -57
  61. data/lib/ibm_cloud_resource_controller/configuration.rb +0 -248
  62. data/lib/ibm_cloud_resource_controller/models/credentials.rb +0 -250
  63. data/lib/ibm_cloud_resource_controller/models/error_report.rb +0 -240
  64. data/lib/ibm_cloud_resource_controller/models/plan_history_item.rb +0 -230
  65. data/lib/ibm_cloud_resource_controller/models/reclamation.rb +0 -352
  66. data/lib/ibm_cloud_resource_controller/models/reclamation_actions_post.rb +0 -220
  67. data/lib/ibm_cloud_resource_controller/models/reclamations_list.rb +0 -212
  68. data/lib/ibm_cloud_resource_controller/models/resource_alias.rb +0 -410
  69. data/lib/ibm_cloud_resource_controller/models/resource_alias_patch.rb +0 -236
  70. data/lib/ibm_cloud_resource_controller/models/resource_alias_post.rb +0 -266
  71. data/lib/ibm_cloud_resource_controller/models/resource_aliases_list.rb +0 -247
  72. data/lib/ibm_cloud_resource_controller/models/resource_binding.rb +0 -410
  73. data/lib/ibm_cloud_resource_controller/models/resource_binding_patch.rb +0 -236
  74. data/lib/ibm_cloud_resource_controller/models/resource_binding_post.rb +0 -278
  75. data/lib/ibm_cloud_resource_controller/models/resource_binding_post_parameters.rb +0 -210
  76. data/lib/ibm_cloud_resource_controller/models/resource_bindings_list.rb +0 -247
  77. data/lib/ibm_cloud_resource_controller/models/resource_instance.rb +0 -536
  78. data/lib/ibm_cloud_resource_controller/models/resource_instance_patch.rb +0 -259
  79. data/lib/ibm_cloud_resource_controller/models/resource_instance_post.rb +0 -317
  80. data/lib/ibm_cloud_resource_controller/models/resource_instances_list.rb +0 -247
  81. data/lib/ibm_cloud_resource_controller/models/resource_key.rb +0 -390
  82. data/lib/ibm_cloud_resource_controller/models/resource_key_patch.rb +0 -236
  83. data/lib/ibm_cloud_resource_controller/models/resource_key_post.rb +0 -251
  84. data/lib/ibm_cloud_resource_controller/models/resource_keys_list.rb +0 -247
  85. data/spec/api/resource_aliases_api_spec.rb +0 -104
  86. data/spec/api/resource_bindings_api_spec.rb +0 -103
  87. data/spec/api/resource_instances_api_spec.rb +0 -130
  88. data/spec/api/resource_keys_api_spec.rb +0 -102
  89. data/spec/api/resource_reclamations_api_spec.rb +0 -62
  90. data/spec/api_client_spec.rb +0 -226
  91. data/spec/configuration_spec.rb +0 -42
  92. data/spec/models/credentials_spec.rb +0 -65
  93. data/spec/models/error_report_spec.rb +0 -59
  94. data/spec/models/plan_history_item_spec.rb +0 -47
  95. data/spec/models/reclamation_actions_post_spec.rb +0 -47
  96. data/spec/models/reclamation_spec.rb +0 -125
  97. data/spec/models/reclamations_list_spec.rb +0 -41
  98. data/spec/models/resource_alias_patch_spec.rb +0 -41
  99. data/spec/models/resource_alias_post_spec.rb +0 -53
  100. data/spec/models/resource_alias_spec.rb +0 -143
  101. data/spec/models/resource_aliases_list_spec.rb +0 -53
  102. data/spec/models/resource_binding_patch_spec.rb +0 -41
  103. data/spec/models/resource_binding_post_parameters_spec.rb +0 -41
  104. data/spec/models/resource_binding_post_spec.rb +0 -65
  105. data/spec/models/resource_binding_spec.rb +0 -137
  106. data/spec/models/resource_bindings_list_spec.rb +0 -53
  107. data/spec/models/resource_instance_patch_spec.rb +0 -59
  108. data/spec/models/resource_instance_post_spec.rb +0 -77
  109. data/spec/models/resource_instance_spec.rb +0 -191
  110. data/spec/models/resource_instances_list_spec.rb +0 -53
  111. data/spec/models/resource_key_patch_spec.rb +0 -41
  112. data/spec/models/resource_key_post_spec.rb +0 -59
  113. data/spec/models/resource_key_spec.rb +0 -125
  114. data/spec/models/resource_keys_list_spec.rb +0 -53
  115. data/spec/spec_helper.rb +0 -111
@@ -1,388 +0,0 @@
1
- =begin
2
- #IBM Cloud Resource Controller API
3
-
4
- #Manage lifecycle of your Cloud resources using Resource Controller APIs. Resources are provisioned globally in an account scope. Supports asynchronous provisioning of resources. Enables consumption of a global resource through a Cloud Foundry space in any region.
5
-
6
- The version of the OpenAPI document: 2.0
7
-
8
- Generated by: https://openapi-generator.tech
9
- OpenAPI Generator version: 5.0.0-beta2
10
-
11
- =end
12
-
13
- require 'date'
14
- require 'json'
15
- require 'logger'
16
- require 'tempfile'
17
- require 'typhoeus'
18
-
19
- module IbmCloudResourceController
20
- class ApiClient
21
- # The Configuration object holding settings to be used in the API client.
22
- attr_accessor :config
23
-
24
- # Defines the headers to be used in HTTP requests of all API calls by default.
25
- #
26
- # @return [Hash]
27
- attr_accessor :default_headers
28
-
29
- # Initializes the ApiClient
30
- # @option config [Configuration] Configuration for initializing the object, default to Configuration.default
31
- def initialize(config = Configuration.default)
32
- @config = config
33
- @user_agent = "OpenAPI-Generator/#{VERSION}/ruby"
34
- @default_headers = {
35
- 'Content-Type' => 'application/json',
36
- 'User-Agent' => @user_agent
37
- }
38
- end
39
-
40
- def self.default
41
- @@default ||= ApiClient.new
42
- end
43
-
44
- # Call an API with given options.
45
- #
46
- # @return [Array<(Object, Integer, Hash)>] an array of 3 elements:
47
- # the data deserialized from response body (could be nil), response status code and response headers.
48
- def call_api(http_method, path, opts = {})
49
- request = build_request(http_method, path, opts)
50
- response = request.run
51
-
52
- if @config.debugging
53
- @config.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n"
54
- end
55
-
56
- unless response.success?
57
- if response.timed_out?
58
- fail ApiError.new('Connection timed out')
59
- elsif response.code == 0
60
- # Errors from libcurl will be made visible here
61
- fail ApiError.new(:code => 0,
62
- :message => response.return_message)
63
- else
64
- fail ApiError.new(:code => response.code,
65
- :response_headers => response.headers,
66
- :response_body => response.body),
67
- response.status_message
68
- end
69
- end
70
-
71
- if opts[:return_type]
72
- data = deserialize(response, opts[:return_type])
73
- else
74
- data = nil
75
- end
76
- return data, response.code, response.headers
77
- end
78
-
79
- # Builds the HTTP request
80
- #
81
- # @param [String] http_method HTTP method/verb (e.g. POST)
82
- # @param [String] path URL path (e.g. /account/new)
83
- # @option opts [Hash] :header_params Header parameters
84
- # @option opts [Hash] :query_params Query parameters
85
- # @option opts [Hash] :form_params Query parameters
86
- # @option opts [Object] :body HTTP body (JSON/XML)
87
- # @return [Typhoeus::Request] A Typhoeus Request
88
- def build_request(http_method, path, opts = {})
89
- url = build_request_url(path)
90
- http_method = http_method.to_sym.downcase
91
-
92
- header_params = @default_headers.merge(opts[:header_params] || {})
93
- query_params = opts[:query_params] || {}
94
- form_params = opts[:form_params] || {}
95
-
96
- update_params_for_auth! header_params, query_params, opts[:auth_names]
97
-
98
- # set ssl_verifyhosts option based on @config.verify_ssl_host (true/false)
99
- _verify_ssl_host = @config.verify_ssl_host ? 2 : 0
100
-
101
- req_opts = {
102
- :method => http_method,
103
- :headers => header_params,
104
- :params => query_params,
105
- :params_encoding => @config.params_encoding,
106
- :timeout => @config.timeout,
107
- :ssl_verifypeer => @config.verify_ssl,
108
- :ssl_verifyhost => _verify_ssl_host,
109
- :sslcert => @config.cert_file,
110
- :sslkey => @config.key_file,
111
- :verbose => @config.debugging
112
- }
113
-
114
- # set custom cert, if provided
115
- req_opts[:cainfo] = @config.ssl_ca_cert if @config.ssl_ca_cert
116
-
117
- if [:post, :patch, :put, :delete].include?(http_method)
118
- req_body = build_request_body(header_params, form_params, opts[:body])
119
- req_opts.update :body => req_body
120
- if @config.debugging
121
- @config.logger.debug "HTTP request body param ~BEGIN~\n#{req_body}\n~END~\n"
122
- end
123
- end
124
-
125
- request = Typhoeus::Request.new(url, req_opts)
126
- download_file(request) if opts[:return_type] == 'File'
127
- request
128
- end
129
-
130
- # Builds the HTTP request body
131
- #
132
- # @param [Hash] header_params Header parameters
133
- # @param [Hash] form_params Query parameters
134
- # @param [Object] body HTTP body (JSON/XML)
135
- # @return [String] HTTP body data in the form of string
136
- def build_request_body(header_params, form_params, body)
137
- # http form
138
- if header_params['Content-Type'] == 'application/x-www-form-urlencoded' ||
139
- header_params['Content-Type'] == 'multipart/form-data'
140
- data = {}
141
- form_params.each do |key, value|
142
- case value
143
- when ::File, ::Array, nil
144
- # let typhoeus handle File, Array and nil parameters
145
- data[key] = value
146
- else
147
- data[key] = value.to_s
148
- end
149
- end
150
- elsif body
151
- data = body.is_a?(String) ? body : body.to_json
152
- else
153
- data = nil
154
- end
155
- data
156
- end
157
-
158
- # Check if the given MIME is a JSON MIME.
159
- # JSON MIME examples:
160
- # application/json
161
- # application/json; charset=UTF8
162
- # APPLICATION/JSON
163
- # */*
164
- # @param [String] mime MIME
165
- # @return [Boolean] True if the MIME is application/json
166
- def json_mime?(mime)
167
- (mime == '*/*') || !(mime =~ /Application\/.*json(?!p)(;.*)?/i).nil?
168
- end
169
-
170
- # Deserialize the response to the given return type.
171
- #
172
- # @param [Response] response HTTP response
173
- # @param [String] return_type some examples: "User", "Array<User>", "Hash<String, Integer>"
174
- def deserialize(response, return_type)
175
- body = response.body
176
-
177
- # handle file downloading - return the File instance processed in request callbacks
178
- # note that response body is empty when the file is written in chunks in request on_body callback
179
- return @tempfile if return_type == 'File'
180
-
181
- return nil if body.nil? || body.empty?
182
-
183
- # return response body directly for String return type
184
- return body if return_type == 'String'
185
-
186
- # ensuring a default content type
187
- content_type = response.headers['Content-Type'] || 'application/json'
188
-
189
- fail "Content-Type is not supported: #{content_type}" unless json_mime?(content_type)
190
-
191
- begin
192
- data = JSON.parse("[#{body}]", :symbolize_names => true)[0]
193
- rescue JSON::ParserError => e
194
- if %w(String Date DateTime).include?(return_type)
195
- data = body
196
- else
197
- raise e
198
- end
199
- end
200
-
201
- convert_to_type data, return_type
202
- end
203
-
204
- # Convert data to the given return type.
205
- # @param [Object] data Data to be converted
206
- # @param [String] return_type Return type
207
- # @return [Mixed] Data in a particular type
208
- def convert_to_type(data, return_type)
209
- return nil if data.nil?
210
- case return_type
211
- when 'String'
212
- data.to_s
213
- when 'Integer'
214
- data.to_i
215
- when 'Float'
216
- data.to_f
217
- when 'Boolean'
218
- data == true
219
- when 'DateTime'
220
- # parse date time (expecting ISO 8601 format)
221
- DateTime.parse data
222
- when 'Date'
223
- # parse date time (expecting ISO 8601 format)
224
- Date.parse data
225
- when 'Object'
226
- # generic object (usually a Hash), return directly
227
- data
228
- when /\AArray<(.+)>\z/
229
- # e.g. Array<Pet>
230
- sub_type = $1
231
- data.map { |item| convert_to_type(item, sub_type) }
232
- when /\AHash\<String, (.+)\>\z/
233
- # e.g. Hash<String, Integer>
234
- sub_type = $1
235
- {}.tap do |hash|
236
- data.each { |k, v| hash[k] = convert_to_type(v, sub_type) }
237
- end
238
- else
239
- # models, e.g. Pet
240
- IbmCloudResourceController.const_get(return_type).build_from_hash(data)
241
- end
242
- end
243
-
244
- # Save response body into a file in (the defined) temporary folder, using the filename
245
- # from the "Content-Disposition" header if provided, otherwise a random filename.
246
- # The response body is written to the file in chunks in order to handle files which
247
- # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
248
- # process can use.
249
- #
250
- # @see Configuration#temp_folder_path
251
- def download_file(request)
252
- tempfile = nil
253
- encoding = nil
254
- request.on_headers do |response|
255
- content_disposition = response.headers['Content-Disposition']
256
- if content_disposition && content_disposition =~ /filename=/i
257
- filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
258
- prefix = sanitize_filename(filename)
259
- else
260
- prefix = 'download-'
261
- end
262
- prefix = prefix + '-' unless prefix.end_with?('-')
263
- encoding = response.body.encoding
264
- tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
265
- @tempfile = tempfile
266
- end
267
- request.on_body do |chunk|
268
- chunk.force_encoding(encoding)
269
- tempfile.write(chunk)
270
- end
271
- request.on_complete do |response|
272
- if tempfile
273
- tempfile.close
274
- @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
275
- "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
276
- "will be deleted automatically with GC. It's also recommended to delete the temp file "\
277
- "explicitly with `tempfile.delete`"
278
- end
279
- end
280
- end
281
-
282
- # Sanitize filename by removing path.
283
- # e.g. ../../sun.gif becomes sun.gif
284
- #
285
- # @param [String] filename the filename to be sanitized
286
- # @return [String] the sanitized filename
287
- def sanitize_filename(filename)
288
- filename.gsub(/.*[\/\\]/, '')
289
- end
290
-
291
- def build_request_url(path)
292
- # Add leading and trailing slashes to path
293
- path = "/#{path}".gsub(/\/+/, '/')
294
- @config.base_url + path
295
- end
296
-
297
- # Update hearder and query params based on authentication settings.
298
- #
299
- # @param [Hash] header_params Header parameters
300
- # @param [Hash] query_params Query parameters
301
- # @param [String] auth_names Authentication scheme name
302
- def update_params_for_auth!(header_params, query_params, auth_names)
303
- Array(auth_names).each do |auth_name|
304
- auth_setting = @config.auth_settings[auth_name]
305
- next unless auth_setting
306
- case auth_setting[:in]
307
- when 'header' then header_params[auth_setting[:key]] = auth_setting[:value]
308
- when 'query' then query_params[auth_setting[:key]] = auth_setting[:value]
309
- else fail ArgumentError, 'Authentication token must be in `query` of `header`'
310
- end
311
- end
312
- end
313
-
314
- # Sets user agent in HTTP header
315
- #
316
- # @param [String] user_agent User agent (e.g. openapi-generator/ruby/1.0.0)
317
- def user_agent=(user_agent)
318
- @user_agent = user_agent
319
- @default_headers['User-Agent'] = @user_agent
320
- end
321
-
322
- # Return Accept header based on an array of accepts provided.
323
- # @param [Array] accepts array for Accept
324
- # @return [String] the Accept header (e.g. application/json)
325
- def select_header_accept(accepts)
326
- return nil if accepts.nil? || accepts.empty?
327
- # use JSON when present, otherwise use all of the provided
328
- json_accept = accepts.find { |s| json_mime?(s) }
329
- json_accept || accepts.join(',')
330
- end
331
-
332
- # Return Content-Type header based on an array of content types provided.
333
- # @param [Array] content_types array for Content-Type
334
- # @return [String] the Content-Type header (e.g. application/json)
335
- def select_header_content_type(content_types)
336
- # use application/json by default
337
- return 'application/json' if content_types.nil? || content_types.empty?
338
- # use JSON when present, otherwise use the first one
339
- json_content_type = content_types.find { |s| json_mime?(s) }
340
- json_content_type || content_types.first
341
- end
342
-
343
- # Convert object (array, hash, object, etc) to JSON string.
344
- # @param [Object] model object to be converted into JSON string
345
- # @return [String] JSON string representation of the object
346
- def object_to_http_body(model)
347
- return model if model.nil? || model.is_a?(String)
348
- local_body = nil
349
- if model.is_a?(Array)
350
- local_body = model.map { |m| object_to_hash(m) }
351
- else
352
- local_body = object_to_hash(model)
353
- end
354
- local_body.to_json
355
- end
356
-
357
- # Convert object(non-array) to hash.
358
- # @param [Object] obj object to be converted into JSON string
359
- # @return [String] JSON string representation of the object
360
- def object_to_hash(obj)
361
- if obj.respond_to?(:to_hash)
362
- obj.to_hash
363
- else
364
- obj
365
- end
366
- end
367
-
368
- # Build parameter value according to the given collection format.
369
- # @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi
370
- def build_collection_param(param, collection_format)
371
- case collection_format
372
- when :csv
373
- param.join(',')
374
- when :ssv
375
- param.join(' ')
376
- when :tsv
377
- param.join("\t")
378
- when :pipes
379
- param.join('|')
380
- when :multi
381
- # return the array directly as typhoeus will handle it as expected
382
- param
383
- else
384
- fail "unknown collection format: #{collection_format.inspect}"
385
- end
386
- end
387
- end
388
- end
@@ -1,57 +0,0 @@
1
- =begin
2
- #IBM Cloud Resource Controller API
3
-
4
- #Manage lifecycle of your Cloud resources using Resource Controller APIs. Resources are provisioned globally in an account scope. Supports asynchronous provisioning of resources. Enables consumption of a global resource through a Cloud Foundry space in any region.
5
-
6
- The version of the OpenAPI document: 2.0
7
-
8
- Generated by: https://openapi-generator.tech
9
- OpenAPI Generator version: 5.0.0-beta2
10
-
11
- =end
12
-
13
- module IbmCloudResourceController
14
- class ApiError < StandardError
15
- attr_reader :code, :response_headers, :response_body
16
-
17
- # Usage examples:
18
- # ApiError.new
19
- # ApiError.new("message")
20
- # ApiError.new(:code => 500, :response_headers => {}, :response_body => "")
21
- # ApiError.new(:code => 404, :message => "Not Found")
22
- def initialize(arg = nil)
23
- if arg.is_a? Hash
24
- if arg.key?(:message) || arg.key?('message')
25
- super(arg[:message] || arg['message'])
26
- else
27
- super arg
28
- end
29
-
30
- arg.each do |k, v|
31
- instance_variable_set "@#{k}", v
32
- end
33
- else
34
- super arg
35
- end
36
- end
37
-
38
- # Override to_s to display a friendly error message
39
- def to_s
40
- message
41
- end
42
-
43
- def message
44
- if @message.nil?
45
- msg = "Error message: the server returns an error"
46
- else
47
- msg = @message
48
- end
49
-
50
- msg += "\nHTTP status code: #{code}" if code
51
- msg += "\nResponse headers: #{response_headers}" if response_headers
52
- msg += "\nResponse body: #{response_body}" if response_body
53
-
54
- msg
55
- end
56
- end
57
- end
@@ -1,248 +0,0 @@
1
- =begin
2
- #IBM Cloud Resource Controller API
3
-
4
- #Manage lifecycle of your Cloud resources using Resource Controller APIs. Resources are provisioned globally in an account scope. Supports asynchronous provisioning of resources. Enables consumption of a global resource through a Cloud Foundry space in any region.
5
-
6
- The version of the OpenAPI document: 2.0
7
-
8
- Generated by: https://openapi-generator.tech
9
- OpenAPI Generator version: 5.0.0-beta2
10
-
11
- =end
12
-
13
- module IbmCloudResourceController
14
- class Configuration
15
- # Defines url scheme
16
- attr_accessor :scheme
17
-
18
- # Defines url host
19
- attr_accessor :host
20
-
21
- # Defines url base path
22
- attr_accessor :base_path
23
-
24
- # Defines API keys used with API Key authentications.
25
- #
26
- # @return [Hash] key: parameter name, value: parameter value (API key)
27
- #
28
- # @example parameter name is "api_key", API key is "xxx" (e.g. "api_key=xxx" in query string)
29
- # config.api_key['api_key'] = 'xxx'
30
- attr_accessor :api_key
31
-
32
- # Defines API key prefixes used with API Key authentications.
33
- #
34
- # @return [Hash] key: parameter name, value: API key prefix
35
- #
36
- # @example parameter name is "Authorization", API key prefix is "Token" (e.g. "Authorization: Token xxx" in headers)
37
- # config.api_key_prefix['api_key'] = 'Token'
38
- attr_accessor :api_key_prefix
39
-
40
- # Defines the username used with HTTP basic authentication.
41
- #
42
- # @return [String]
43
- attr_accessor :username
44
-
45
- # Defines the password used with HTTP basic authentication.
46
- #
47
- # @return [String]
48
- attr_accessor :password
49
-
50
- # Defines the access token (Bearer) used with OAuth2.
51
- attr_accessor :access_token
52
-
53
- # Set this to enable/disable debugging. When enabled (set to true), HTTP request/response
54
- # details will be logged with `logger.debug` (see the `logger` attribute).
55
- # Default to false.
56
- #
57
- # @return [true, false]
58
- attr_accessor :debugging
59
-
60
- # Defines the logger used for debugging.
61
- # Default to `Rails.logger` (when in Rails) or logging to STDOUT.
62
- #
63
- # @return [#debug]
64
- attr_accessor :logger
65
-
66
- # Defines the temporary folder to store downloaded files
67
- # (for API endpoints that have file response).
68
- # Default to use `Tempfile`.
69
- #
70
- # @return [String]
71
- attr_accessor :temp_folder_path
72
-
73
- # The time limit for HTTP request in seconds.
74
- # Default to 0 (never times out).
75
- attr_accessor :timeout
76
-
77
- # Set this to false to skip client side validation in the operation.
78
- # Default to true.
79
- # @return [true, false]
80
- attr_accessor :client_side_validation
81
-
82
- ### TLS/SSL setting
83
- # Set this to false to skip verifying SSL certificate when calling API from https server.
84
- # Default to true.
85
- #
86
- # @note Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks.
87
- #
88
- # @return [true, false]
89
- attr_accessor :verify_ssl
90
-
91
- ### TLS/SSL setting
92
- # Set this to false to skip verifying SSL host name
93
- # Default to true.
94
- #
95
- # @note Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks.
96
- #
97
- # @return [true, false]
98
- attr_accessor :verify_ssl_host
99
-
100
- ### TLS/SSL setting
101
- # Set this to customize the certificate file to verify the peer.
102
- #
103
- # @return [String] the path to the certificate file
104
- #
105
- # @see The `cainfo` option of Typhoeus, `--cert` option of libcurl. Related source code:
106
- # https://github.com/typhoeus/typhoeus/blob/master/lib/typhoeus/easy_factory.rb#L145
107
- attr_accessor :ssl_ca_cert
108
-
109
- ### TLS/SSL setting
110
- # Client certificate file (for client certificate)
111
- attr_accessor :cert_file
112
-
113
- ### TLS/SSL setting
114
- # Client private key file (for client certificate)
115
- attr_accessor :key_file
116
-
117
- # Set this to customize parameters encoding of array parameter with multi collectionFormat.
118
- # Default to nil.
119
- #
120
- # @see The params_encoding option of Ethon. Related source code:
121
- # https://github.com/typhoeus/ethon/blob/master/lib/ethon/easy/queryable.rb#L96
122
- attr_accessor :params_encoding
123
-
124
- attr_accessor :inject_format
125
-
126
- attr_accessor :force_ending_format
127
-
128
- def initialize
129
- @scheme = 'https'
130
- @host = 'resource-controller.cloud.ibm.com'
131
- @base_path = ''
132
- @api_key = {}
133
- @api_key_prefix = {}
134
- @timeout = 0
135
- @client_side_validation = true
136
- @verify_ssl = true
137
- @verify_ssl_host = true
138
- @params_encoding = nil
139
- @cert_file = nil
140
- @key_file = nil
141
- @debugging = false
142
- @inject_format = false
143
- @force_ending_format = false
144
- @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
145
-
146
- yield(self) if block_given?
147
- end
148
-
149
- # The default Configuration object.
150
- def self.default
151
- @@default ||= Configuration.new
152
- end
153
-
154
- def configure
155
- yield(self) if block_given?
156
- end
157
-
158
- def scheme=(scheme)
159
- # remove :// from scheme
160
- @scheme = scheme.sub(/:\/\//, '')
161
- end
162
-
163
- def host=(host)
164
- # remove http(s):// and anything after a slash
165
- @host = host.sub(/https?:\/\//, '').split('/').first
166
- end
167
-
168
- def base_path=(base_path)
169
- # Add leading and trailing slashes to base_path
170
- @base_path = "/#{base_path}".gsub(/\/+/, '/')
171
- @base_path = '' if @base_path == '/'
172
- end
173
-
174
- def base_url
175
- "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '')
176
- end
177
-
178
- # Gets API key (with prefix if set).
179
- # @param [String] param_name the parameter name of API key auth
180
- def api_key_with_prefix(param_name)
181
- if @api_key_prefix[param_name]
182
- "#{@api_key_prefix[param_name]} #{@api_key[param_name]}"
183
- else
184
- @api_key[param_name]
185
- end
186
- end
187
-
188
- # Gets Basic Auth token string
189
- def basic_auth_token
190
- 'Basic ' + ["#{username}:#{password}"].pack('m').delete("\r\n")
191
- end
192
-
193
- # Returns Auth Settings hash for api client.
194
- def auth_settings
195
- {
196
- 'IAM' =>
197
- {
198
- type: 'api_key',
199
- in: 'header',
200
- key: 'Authorization',
201
- value: api_key_with_prefix('Authorization')
202
- },
203
- }
204
- end
205
-
206
- # Returns an array of Server setting
207
- def server_settings
208
- [
209
- {
210
- url: "https://resource-controller.cloud.ibm.com",
211
- description: "Production",
212
- }
213
- ]
214
- end
215
-
216
- # Returns URL based on server settings
217
- #
218
- # @param index array index of the server settings
219
- # @param variables hash of variable and the corresponding value
220
- def server_url(index, variables = {})
221
- servers = server_settings
222
-
223
- # check array index out of bound
224
- if (index < 0 || index >= servers.size)
225
- fail ArgumentError, "Invalid index #{index} when selecting the server. Must be less than #{servers.size}"
226
- end
227
-
228
- server = servers[index]
229
- url = server[:url]
230
-
231
- # go through variable and assign a value
232
- server[:variables].each do |name, variable|
233
- if variables.key?(name)
234
- if (server[:variables][name][:enum_values].include? variables[name])
235
- url.gsub! "{" + name.to_s + "}", variables[name]
236
- else
237
- fail ArgumentError, "The variable `#{name}` in the server URL has invalid value #{variables[name]}. Must be #{server[:variables][name][:enum_values]}."
238
- end
239
- else
240
- # use default value
241
- url.gsub! "{" + name.to_s + "}", server[:variables][name][:default_value]
242
- end
243
- end
244
-
245
- url
246
- end
247
- end
248
- end