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.
- 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
|