workato-connector-sdk 1.1.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -2
  3. data/VERSION +1 -0
  4. data/lib/workato/cli/edit_command.rb +3 -1
  5. data/lib/workato/cli/exec_command.rb +103 -17
  6. data/lib/workato/cli/generate_command.rb +2 -2
  7. data/lib/workato/cli/main.rb +17 -10
  8. data/lib/workato/cli/multi_auth_selected_fallback.rb +33 -0
  9. data/lib/workato/cli/oauth2_command.rb +50 -12
  10. data/lib/workato/cli/push_command.rb +2 -2
  11. data/lib/workato/cli/schema_command.rb +2 -2
  12. data/lib/workato/connector/sdk/account_properties.rb +2 -2
  13. data/lib/workato/connector/sdk/action.rb +20 -70
  14. data/lib/workato/connector/sdk/block_invocation_refinements.rb +2 -10
  15. data/lib/workato/connector/sdk/connection.rb +115 -30
  16. data/lib/workato/connector/sdk/connector.rb +71 -81
  17. data/lib/workato/connector/sdk/core.rb +62 -0
  18. data/lib/workato/connector/sdk/dsl/aws.rb +8 -5
  19. data/lib/workato/connector/sdk/dsl/call.rb +1 -1
  20. data/lib/workato/connector/sdk/dsl/csv_package.rb +133 -0
  21. data/lib/workato/connector/sdk/dsl/execution_context.rb +45 -0
  22. data/lib/workato/connector/sdk/dsl/http.rb +1 -1
  23. data/lib/workato/connector/sdk/dsl/reinvoke_after.rb +84 -0
  24. data/lib/workato/connector/sdk/dsl/stream_package.rb +65 -0
  25. data/lib/workato/connector/sdk/dsl/time.rb +0 -14
  26. data/lib/workato/connector/sdk/dsl/workato_package.rb +146 -0
  27. data/lib/workato/connector/sdk/dsl.rb +64 -10
  28. data/lib/workato/connector/sdk/errors.rb +37 -9
  29. data/lib/workato/connector/sdk/lookup_tables.rb +3 -1
  30. data/lib/workato/connector/sdk/operation.rb +33 -10
  31. data/lib/workato/connector/sdk/request.rb +149 -69
  32. data/lib/workato/connector/sdk/schema/field/convertors.rb +2 -2
  33. data/lib/workato/connector/sdk/schema/type/unicode_string.rb +1 -1
  34. data/lib/workato/connector/sdk/schema.rb +12 -8
  35. data/lib/workato/connector/sdk/settings.rb +14 -3
  36. data/lib/workato/connector/sdk/stream.rb +243 -0
  37. data/lib/workato/connector/sdk/streams.rb +71 -0
  38. data/lib/workato/connector/sdk/summarize.rb +2 -2
  39. data/lib/workato/connector/sdk/trigger.rb +23 -15
  40. data/lib/workato/connector/sdk/version.rb +1 -1
  41. data/lib/workato/connector/sdk.rb +21 -47
  42. data/lib/workato/extension/array.rb +2 -0
  43. data/lib/workato/extension/case_sensitive_headers.rb +0 -26
  44. data/lib/workato/extension/content_encoding_decoder.rb +69 -0
  45. data/lib/workato/extension/currency/countries.rb +79 -0
  46. data/lib/workato/extension/currency/countries.yml +18433 -0
  47. data/lib/workato/extension/currency/currencies.rb +55 -0
  48. data/lib/workato/extension/currency/currencies.yml +479 -0
  49. data/lib/workato/extension/currency.rb +73 -5
  50. data/lib/workato/extension/enumerable.rb +2 -2
  51. data/lib/workato/extension/extra_chain_cert.rb +0 -14
  52. data/lib/workato/extension/hash_with_indifferent_access.rb +19 -0
  53. data/lib/workato/extension/metadata_fix_wrap_kw_args.rb +11 -0
  54. data/lib/workato/extension/string.rb +16 -112
  55. data/lib/workato/testing/vcr_encrypted_cassette_serializer.rb +2 -0
  56. data/lib/workato/types/binary.rb +55 -0
  57. data/lib/workato/{connector/sdk → utilities}/xml.rb +4 -4
  58. metadata +61 -64
  59. data/lib/workato/connector/sdk/dsl/workato_code_lib.rb +0 -160
@@ -1,160 +0,0 @@
1
- # typed: true
2
- # frozen_string_literal: true
3
-
4
- require 'jwt'
5
-
6
- module Workato
7
- module Connector
8
- module Sdk
9
- module Dsl
10
- module WorkatoCodeLib
11
- JWT_ALGORITHMS = %w[RS256 RS384 RS512].freeze
12
- JWT_RSA_KEY_MIN_LENGTH = 2048
13
-
14
- VERIFY_RCA_ALGORITHMS = %w[SHA SHA1 SHA224 SHA256 SHA384 SHA512].freeze
15
-
16
- def workato
17
- WorkatoCodeLib
18
- end
19
-
20
- def parse_json(source)
21
- WorkatoCodeLib.parse_json(source)
22
- end
23
-
24
- def uuid
25
- WorkatoCodeLib.uuid
26
- end
27
-
28
- def encrypt(text, key)
29
- ::Kernel.require('ruby_rncryptor')
30
-
31
- enc_text = ::RubyRNCryptor.encrypt(text, key)
32
- ::Base64.strict_encode64(enc_text)
33
- end
34
-
35
- def decrypt(text, key)
36
- ::Kernel.require('ruby_rncryptor')
37
-
38
- text = ::Base64.decode64(text)
39
- dec_text = ::RubyRNCryptor.decrypt(text, key)
40
- Workato::Extension::Binary.new(dec_text)
41
- rescue Exception => e # rubocop:disable Lint/RescueException
42
- message = e.message.to_s
43
- case message
44
- when /Password may be incorrect/
45
- ::Kernel.raise 'invalid/corrupt input or key'
46
- when /RubyRNCryptor only decrypts version/
47
- ::Kernel.raise 'invalid/corrupt input'
48
- else
49
- ::Kernel.raise
50
- end
51
- end
52
-
53
- def blank; end
54
-
55
- def clear; end
56
-
57
- def null; end
58
-
59
- def skip; end
60
-
61
- class << self
62
- def jwt_encode_rs256(payload, key, header_fields = {})
63
- jwt_encode(payload, key, 'RS256', header_fields)
64
- end
65
-
66
- def jwt_encode(payload, key, algorithm, header_fields = {})
67
- algorithm = algorithm.to_s.upcase
68
- unless JWT_ALGORITHMS.include?(algorithm)
69
- raise "Unsupported signing method. Supports only #{JWT_ALGORITHMS.join(', ')}. Got: '#{algorithm}'"
70
- end
71
-
72
- rsa_private = OpenSSL::PKey::RSA.new(key)
73
- if rsa_private.n.num_bits < JWT_RSA_KEY_MIN_LENGTH
74
- raise "A RSA key of size #{JWT_RSA_KEY_MIN_LENGTH} bits or larger MUST be used with JWT."
75
- end
76
-
77
- header_fields = header_fields.present? ? header_fields.with_indifferent_access.except(:typ, :alg) : {}
78
- ::JWT.encode(payload, rsa_private, algorithm, header_fields)
79
- end
80
-
81
- def verify_rsa(payload, certificate, signature, algorithm = 'SHA256')
82
- algorithm = algorithm.to_s.upcase
83
- unless VERIFY_RCA_ALGORITHMS.include?(algorithm)
84
- raise "Unsupported signing method. Supports only #{VERIFY_RCA_ALGORITHMS.join(', ')}. Got: '#{algorithm}'" # rubocop:disable Layout/LineLength
85
- end
86
-
87
- cert = OpenSSL::X509::Certificate.new(certificate)
88
- digest = OpenSSL::Digest.new(algorithm)
89
- cert.public_key.verify(digest, signature, payload)
90
- rescue OpenSSL::PKey::PKeyError
91
- raise 'An error occurred during signature verification. Check arguments'
92
- rescue OpenSSL::X509::CertificateError
93
- raise 'Invalid certificate format'
94
- end
95
-
96
- def parse_yaml(yaml)
97
- ::Psych.safe_load(yaml)
98
- rescue ::Psych::DisallowedClass => e
99
- raise e.message
100
- end
101
-
102
- def render_yaml(obj)
103
- ::Psych.dump(obj)
104
- end
105
-
106
- def parse_json(source)
107
- JSON.parse(source)
108
- end
109
-
110
- def uuid
111
- SecureRandom.uuid
112
- end
113
-
114
- RANDOM_SIZE = 32
115
-
116
- def random_bytes(len)
117
- unless (len.is_a? ::Integer) && (len <= RANDOM_SIZE)
118
- raise "The requested length or random bytes sequence should be <= #{RANDOM_SIZE}"
119
- end
120
-
121
- Extension::Binary.new(::OpenSSL::Random.random_bytes(len))
122
- end
123
-
124
- ALLOWED_KEY_SIZES = [128, 192, 256].freeze
125
-
126
- def aes_cbc_encrypt(string, key, init_vector = nil)
127
- key_size = key.bytesize * 8
128
- unless ALLOWED_KEY_SIZES.include?(key_size)
129
- raise 'Incorrect key size for AES'
130
- end
131
-
132
- cipher = ::OpenSSL::Cipher.new("AES-#{key_size}-CBC")
133
- cipher.encrypt
134
- cipher.key = key
135
- cipher.iv = init_vector if init_vector.present?
136
- Extension::Binary.new(cipher.update(string) + cipher.final)
137
- end
138
-
139
- def aes_cbc_decrypt(string, key, init_vector = nil)
140
- key_size = key.bytesize * 8
141
- unless ALLOWED_KEY_SIZES.include?(key_size)
142
- raise 'Incorrect key size for AES'
143
- end
144
-
145
- cipher = ::OpenSSL::Cipher.new("AES-#{key_size}-CBC")
146
- cipher.decrypt
147
- cipher.key = key
148
- cipher.iv = init_vector if init_vector.present?
149
- Extension::Binary.new(cipher.update(string) + cipher.final)
150
- end
151
-
152
- def pbkdf2_hmac_sha1(string, salt, iterations = 1000, key_len = 16)
153
- Extension::Binary.new(::OpenSSL::PKCS5.pbkdf2_hmac_sha1(string, salt, iterations, key_len))
154
- end
155
- end
156
- end
157
- end
158
- end
159
- end
160
- end