workato-connector-sdk 1.3.8 → 1.3.10

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: ab098bba65e812d5ec811d584358c98d6d51e42433019af516a7cff3d1817e1d
4
- data.tar.gz: 4433f811d9d144826a40868958a4c783fd18ab6834b230b5332d0b7fc7f6dfac
3
+ metadata.gz: a4307598e8aa6c86eb54f75b63648f20bc192be58e22a6a5f7c5aa0b4efefd01
4
+ data.tar.gz: 1db7b500cec4f2e761a2ca3eb9d21c11b14b0a7b67c239f600348bbdac0ec393
5
5
  SHA512:
6
- metadata.gz: bded379a7c421201fb92a51db40cc7b4d14e35f84c28bfd42cb26259aba4d1e1f0e99c49793ea84df2dc4adce0564e643aa01f5bc2b42990ee66a5a4fd58efbb
7
- data.tar.gz: bec9736d31ebf8d492924e54e3b4e255d6672a6eb059dfcdcb604d968c876bddfd9512d553aff5a6b01bb36c9025d1496b0062315381b97f4130cfe71efa51a3
6
+ metadata.gz: d4e29f03eed4679751a90297de15988ac154cd83404da08a95484d2651c95c2bdc3aa7bc6a3647225bbb78776de222fe482ef846e21f0d6e8a5cc4d7953be620
7
+ data.tar.gz: 9d82d01badd7c60f971d3b2bbecf452d6d80314a7833f414b05fd8eb4d6510d7c7328a7c893c99daa6b713c7a66714e4f04d086f4bf2161bfb114e6f08639a47
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.8
1
+ 1.3.10
@@ -70,7 +70,7 @@ module Workato
70
70
  extended_input_schema,
71
71
  extended_output_schema,
72
72
  next_continue,
73
- &(block || action[:execute])
73
+ &block || action[:execute]
74
74
  )
75
75
  end
76
76
  rescue RequestFailedError => e
@@ -1,4 +1,5 @@
1
1
  # typed: false
2
2
  # frozen_string_literal: true
3
+
3
4
  #
4
5
  # This file is intentionally left blank. Do not remove
@@ -268,7 +268,7 @@ module Workato
268
268
 
269
269
  sig { void }
270
270
  def define_action_methods
271
- methods.each do |method, _definition|
271
+ methods.each_key do |method|
272
272
  define_singleton_method(method) do |*args|
273
273
  @actions[method] ||= Action.new(
274
274
  action: {
@@ -40,6 +40,12 @@ module Workato
40
40
  ALLOWED_KEY_SIZES = [128, 192, 256].freeze
41
41
  private_constant :ALLOWED_KEY_SIZES
42
42
 
43
+ ALLOWED_INITIALIZATION_VECTOR_SIZE = 96
44
+ private_constant :ALLOWED_INITIALIZATION_VECTOR_SIZE
45
+
46
+ ALLOWED_AUTH_TAG_SIZES = [96, 104, 112, 120, 128].freeze
47
+ private_constant :ALLOWED_AUTH_TAG_SIZES
48
+
43
49
  def initialize(streams:, connection:)
44
50
  @streams = streams
45
51
  @connection = connection
@@ -163,6 +169,33 @@ module Workato
163
169
  Types::Binary.new(cipher.update(string) + cipher.final)
164
170
  end
165
171
 
172
+ def aes_gcm_encrypt(string, key, init_vector, auth_data = '')
173
+ unless string.is_a?(String) && key.is_a?(String) && init_vector.is_a?(String) && auth_data.is_a?(String)
174
+ raise Sdk::ArgumentError, 'All arguments must be of type String'
175
+ end
176
+
177
+ unless string.valid_encoding?
178
+ raise Sdk::ArgumentEncodingError, 'Data to be encrypted must have valid encoding'
179
+ end
180
+
181
+ raise Sdk::ArgumentError, 'Data to be encrypted must not be empty' if string.empty?
182
+
183
+ key_size = key.bytesize * 8
184
+ raise Sdk::ArgumentError, 'Incorrect key size for AES' unless ALLOWED_KEY_SIZES.include?(key_size)
185
+
186
+ init_vector_size = init_vector.bytesize * 8
187
+ unless init_vector_size == ALLOWED_INITIALIZATION_VECTOR_SIZE
188
+ raise Sdk::ArgumentError, 'Incorrect key size for Initialization Vector'
189
+ end
190
+
191
+ cipher = ::OpenSSL::Cipher.new("AES-#{key_size}-GCM")
192
+ cipher.encrypt
193
+ cipher.key = key
194
+ cipher.iv = init_vector
195
+ cipher.auth_data = auth_data
196
+ [cipher.update(string) + cipher.final, cipher.auth_tag].map { |v| Types::Binary.new(v) }
197
+ end
198
+
166
199
  def aes_cbc_decrypt(string, key, init_vector = nil)
167
200
  key_size = key.bytesize * 8
168
201
  unless ALLOWED_KEY_SIZES.include?(key_size)
@@ -178,6 +211,39 @@ module Workato
178
211
  raise Sdk::ArgumentError, e.message
179
212
  end
180
213
 
214
+ def aes_gcm_decrypt(encrypted, key, auth_tag, init_vector, auth_data = '')
215
+ unless encrypted.is_a?(String) &&
216
+ key.is_a?(String) &&
217
+ auth_tag.is_a?(String) &&
218
+ init_vector.is_a?(String) &&
219
+ auth_data.is_a?(String)
220
+ raise Sdk::ArgumentError, 'All arguments must be of type String'
221
+ end
222
+
223
+ unless encrypted.valid_encoding?
224
+ raise Sdk::ArgumentEncodingError, 'Data to be decrypted must have valid encoding'
225
+ end
226
+
227
+ raise Sdk::ArgumentError, 'Data to be decrypted must not be empty' if encrypted.blank?
228
+
229
+ auth_tag_size = auth_tag.bytesize * 8
230
+ unless ALLOWED_AUTH_TAG_SIZES.include?(auth_tag_size)
231
+ raise Sdk::ArgumentError, 'Incorrect authentication tag size'
232
+ end
233
+
234
+ key_size = key.bytesize * 8
235
+ raise Sdk::ArgumentError, 'Incorrect key size for AES' unless ALLOWED_KEY_SIZES.include?(key_size)
236
+
237
+ decipher = ::OpenSSL::Cipher.new("AES-#{key_size}-GCM").decrypt
238
+ decipher.key = key
239
+ decipher.iv = init_vector
240
+ decipher.auth_data = auth_data
241
+ decipher.auth_tag = auth_tag
242
+ Types::Binary.new(decipher.update(encrypted) + decipher.final)
243
+ rescue OpenSSL::Cipher::CipherError
244
+ raise Sdk::ArgumentError, 'Not able to decrypt, please check input values again'
245
+ end
246
+
181
247
  def pbkdf2_hmac_sha1(string, salt, iterations = 1000, key_len = 16)
182
248
  Types::Binary.new(::OpenSSL::PKCS5.pbkdf2_hmac_sha1(string, salt, iterations, key_len))
183
249
  end
@@ -12,8 +12,12 @@ module Workato
12
12
 
13
13
  ArgumentError = Class.new(Error)
14
14
 
15
+ ArgumentEncodingError = Class.new(ArgumentError)
16
+
15
17
  InvalidDefinitionError = Class.new(Error)
16
18
 
19
+ InvalidURIError = Class.new(Error)
20
+
17
21
  class UnexpectedMethodDefinitionError < InvalidDefinitionError
18
22
  attr_reader :name
19
23
  attr_reader :definition
@@ -21,12 +21,14 @@ module Workato
21
21
 
22
22
  using BlockInvocationRefinements
23
23
 
24
+ ALLOWED_URI_TYPES = [URI::Generic, String].freeze
25
+ private_constant :ALLOWED_URI_TYPES
26
+
24
27
  def initialize(uri, method: 'GET', connection: nil, action: nil)
25
28
  super(nil)
26
29
  @uri = uri
27
30
  @method = method
28
31
  @connection = connection
29
- @base_uri = connection&.base_uri(connection&.settings || {})
30
32
  @action = action
31
33
  @headers = {}
32
34
  @case_sensitive_headers = {}
@@ -153,8 +155,8 @@ module Workato
153
155
  self
154
156
  end
155
157
 
156
- def format_xml(root_element_name, namespaces = {}, strip_response_namespaces: false)
157
- request_format_xml(root_element_name, namespaces)
158
+ def format_xml(root_element_name, namespaces = {}, strip_response_namespaces: false, **kwargs)
159
+ request_format_xml(root_element_name, namespaces.merge(kwargs))
158
160
  .response_format_xml(strip_response_namespaces: strip_response_namespaces)
159
161
  end
160
162
 
@@ -273,6 +275,8 @@ module Workato
273
275
  begin
274
276
  request = RestClientRequest.new(rest_request_params)
275
277
  response = execute_request(request)
278
+ rescue URI::InvalidURIError => e
279
+ Kernel.raise(InvalidURIError, e.message)
276
280
  rescue RestClient::Unauthorized => e
277
281
  Kernel.raise e unless @digest_auth
278
282
 
@@ -331,8 +335,18 @@ module Workato
331
335
  end
332
336
 
333
337
  def build_url
334
- uri = if @base_uri
335
- merge_uris(@base_uri, @uri)
338
+ uri = if (base_uri = @connection&.base_uri)
339
+ unless valid_uri?(@uri)
340
+ raise_invalid_uri_error(
341
+ "Expected String or URI as request URL, got: #{@uri.class.name}"
342
+ )
343
+ end
344
+ unless valid_uri?(base_uri)
345
+ raise_invalid_uri_error(
346
+ "Expected String or URI as output of base_uri lambda, got: #{base_uri.class.name}"
347
+ )
348
+ end
349
+ merge_uris(base_uri, @uri)
336
350
  else
337
351
  URI.parse(@uri)
338
352
  end
@@ -357,6 +371,14 @@ module Workato
357
371
  uri.to_s
358
372
  end
359
373
 
374
+ def valid_uri?(path)
375
+ ALLOWED_URI_TYPES.any? { |type| path.is_a?(type) }
376
+ end
377
+
378
+ def raise_invalid_uri_error(message)
379
+ Kernel.raise(InvalidURIError, message)
380
+ end
381
+
360
382
  def merge_uris(uri1, uri2)
361
383
  (uri1.is_a?(::String) ? URI.parse(uri1) : uri1).merge(uri2)
362
384
  end
@@ -549,6 +571,23 @@ module Workato
549
571
  net.extra_chain_cert = ssl_extra_chain_cert if ssl_extra_chain_cert
550
572
  net
551
573
  end
574
+
575
+ private
576
+
577
+ def parse_url_with_auth!(url)
578
+ # Fix Ruby 2.7 vs 3.0 incompatibility
579
+ # In ruby 2.7 URI.parse("http:///foo/bar").hostname returns nil
580
+ # In ruby 3.0 URI.parse("http:///foo/bar").hostname returns ""
581
+ uri = URI.parse(url)
582
+
583
+ if uri.hostname.nil? || uri.hostname.empty?
584
+ raise URI::InvalidURIError, "bad URI(no host provided): #{url}"
585
+ end
586
+
587
+ super
588
+ rescue ArgumentError => e
589
+ raise URI::InvalidURIError, "Invalid URL: #{e.message}"
590
+ end
552
591
  end
553
592
 
554
593
  private_constant :RestClientRequest
@@ -35,7 +35,7 @@ module Workato
35
35
 
36
36
  sig { params(streams_source: SorbetTypes::SourceHash).void }
37
37
  def define_action_methods(streams_source)
38
- streams_source.each do |stream, _stream_proc|
38
+ streams_source.each_key do |stream|
39
39
  define_singleton_method(stream) do |input = {}, from = 0, to = nil, frame_size = Stream::DEFAULT_FRAME_SIZE|
40
40
  to ||= from + frame_size
41
41
  self[stream].chunk(input, from, to, frame_size)
@@ -54,7 +54,7 @@ module Workato
54
54
  time = ::Time.strptime(self, format)
55
55
  form == :utc ? time.utc : time.getlocal
56
56
  else
57
- super form
57
+ super(form)
58
58
  end
59
59
  end
60
60
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: workato-connector-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.8
4
+ version: 1.3.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Abolmasov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-30 00:00:00.000000000 Z
11
+ date: 2024-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -34,14 +34,20 @@ dependencies:
34
34
  name: aws-sigv4
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - '='
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.2'
40
+ - - ">="
38
41
  - !ruby/object:Gem::Version
39
42
  version: 1.2.4
40
43
  type: :runtime
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
44
- - - '='
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.2'
50
+ - - ">="
45
51
  - !ruby/object:Gem::Version
46
52
  version: 1.2.4
47
53
  - !ruby/object:Gem::Dependency
@@ -90,14 +96,20 @@ dependencies:
90
96
  name: gyoku
91
97
  requirement: !ruby/object:Gem::Requirement
92
98
  requirements:
93
- - - '='
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '1.3'
102
+ - - ">="
94
103
  - !ruby/object:Gem::Version
95
104
  version: 1.3.1
96
105
  type: :runtime
97
106
  prerelease: false
98
107
  version_requirements: !ruby/object:Gem::Requirement
99
108
  requirements:
100
- - - '='
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '1.3'
112
+ - - ">="
101
113
  - !ruby/object:Gem::Version
102
114
  version: 1.3.1
103
115
  - !ruby/object:Gem::Dependency
@@ -158,16 +170,16 @@ dependencies:
158
170
  name: net-http-digest_auth
159
171
  requirement: !ruby/object:Gem::Requirement
160
172
  requirements:
161
- - - '='
173
+ - - "~>"
162
174
  - !ruby/object:Gem::Version
163
- version: 1.4.0
175
+ version: '1.4'
164
176
  type: :runtime
165
177
  prerelease: false
166
178
  version_requirements: !ruby/object:Gem::Requirement
167
179
  requirements:
168
- - - '='
180
+ - - "~>"
169
181
  - !ruby/object:Gem::Version
170
- version: 1.4.0
182
+ version: '1.4'
171
183
  - !ruby/object:Gem::Dependency
172
184
  name: nokogiri
173
185
  requirement: !ruby/object:Gem::Requirement
@@ -177,7 +189,7 @@ dependencies:
177
189
  version: 1.13.10
178
190
  - - "<"
179
191
  - !ruby/object:Gem::Version
180
- version: '1.15'
192
+ version: '1.16'
181
193
  type: :runtime
182
194
  prerelease: false
183
195
  version_requirements: !ruby/object:Gem::Requirement
@@ -187,7 +199,7 @@ dependencies:
187
199
  version: 1.13.10
188
200
  - - "<"
189
201
  - !ruby/object:Gem::Version
190
- version: '1.15'
202
+ version: '1.16'
191
203
  - !ruby/object:Gem::Dependency
192
204
  name: rack
193
205
  requirement: !ruby/object:Gem::Requirement