workato-connector-sdk 1.1.0 → 1.3.0
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/README.md +3 -2
- data/VERSION +1 -0
- data/lib/workato/cli/edit_command.rb +3 -1
- data/lib/workato/cli/exec_command.rb +103 -17
- data/lib/workato/cli/generate_command.rb +2 -2
- data/lib/workato/cli/main.rb +17 -10
- data/lib/workato/cli/multi_auth_selected_fallback.rb +33 -0
- data/lib/workato/cli/oauth2_command.rb +50 -12
- data/lib/workato/cli/push_command.rb +2 -2
- data/lib/workato/cli/schema_command.rb +2 -2
- data/lib/workato/connector/sdk/account_properties.rb +2 -2
- data/lib/workato/connector/sdk/action.rb +20 -70
- data/lib/workato/connector/sdk/block_invocation_refinements.rb +2 -10
- data/lib/workato/connector/sdk/connection.rb +115 -30
- data/lib/workato/connector/sdk/connector.rb +71 -81
- data/lib/workato/connector/sdk/core.rb +62 -0
- data/lib/workato/connector/sdk/dsl/aws.rb +8 -5
- data/lib/workato/connector/sdk/dsl/call.rb +1 -1
- data/lib/workato/connector/sdk/dsl/csv_package.rb +133 -0
- data/lib/workato/connector/sdk/dsl/execution_context.rb +45 -0
- data/lib/workato/connector/sdk/dsl/http.rb +1 -1
- data/lib/workato/connector/sdk/dsl/reinvoke_after.rb +84 -0
- data/lib/workato/connector/sdk/dsl/stream_package.rb +65 -0
- data/lib/workato/connector/sdk/dsl/time.rb +0 -14
- data/lib/workato/connector/sdk/dsl/workato_package.rb +146 -0
- data/lib/workato/connector/sdk/dsl.rb +64 -10
- data/lib/workato/connector/sdk/errors.rb +37 -9
- data/lib/workato/connector/sdk/lookup_tables.rb +3 -1
- data/lib/workato/connector/sdk/operation.rb +33 -10
- data/lib/workato/connector/sdk/request.rb +149 -69
- data/lib/workato/connector/sdk/schema/field/convertors.rb +2 -2
- data/lib/workato/connector/sdk/schema/type/unicode_string.rb +1 -1
- data/lib/workato/connector/sdk/schema.rb +12 -8
- data/lib/workato/connector/sdk/settings.rb +14 -3
- data/lib/workato/connector/sdk/stream.rb +243 -0
- data/lib/workato/connector/sdk/streams.rb +71 -0
- data/lib/workato/connector/sdk/summarize.rb +2 -2
- data/lib/workato/connector/sdk/trigger.rb +23 -15
- data/lib/workato/connector/sdk/version.rb +1 -1
- data/lib/workato/connector/sdk.rb +21 -47
- data/lib/workato/extension/array.rb +2 -0
- data/lib/workato/extension/case_sensitive_headers.rb +0 -26
- data/lib/workato/extension/content_encoding_decoder.rb +69 -0
- data/lib/workato/extension/currency/countries.rb +79 -0
- data/lib/workato/extension/currency/countries.yml +18433 -0
- data/lib/workato/extension/currency/currencies.rb +55 -0
- data/lib/workato/extension/currency/currencies.yml +479 -0
- data/lib/workato/extension/currency.rb +73 -5
- data/lib/workato/extension/enumerable.rb +2 -2
- data/lib/workato/extension/extra_chain_cert.rb +0 -14
- data/lib/workato/extension/hash_with_indifferent_access.rb +19 -0
- data/lib/workato/extension/metadata_fix_wrap_kw_args.rb +11 -0
- data/lib/workato/extension/string.rb +16 -112
- data/lib/workato/testing/vcr_encrypted_cassette_serializer.rb +2 -0
- data/lib/workato/types/binary.rb +55 -0
- data/lib/workato/{connector/sdk → utilities}/xml.rb +4 -4
- metadata +61 -64
- 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
|