akeyless 3.2.5 → 3.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +12 -1
- data/docs/CertAccessRules.md +2 -0
- data/docs/CreateAuthMethodCert.md +2 -0
- data/docs/CreateCertificate.md +1 -1
- data/docs/CreateClassicKey.md +1 -1
- data/docs/CreateDynamicSecret.md +1 -1
- data/docs/CreateLinkedTarget.md +1 -3
- data/docs/CreateRotatedSecret.md +1 -1
- data/docs/CreateSecret.md +1 -1
- data/docs/CreateWindowsTarget.md +2 -4
- data/docs/DecryptFile.md +6 -0
- data/docs/DescribeAssoc.md +24 -0
- data/docs/DescribeItem.md +2 -0
- data/docs/DynamicSecretProducerInfo.md +4 -0
- data/docs/EncryptFile.md +0 -2
- data/docs/GatewayBasicInfo.md +24 -0
- data/docs/GatewayCreateProducerArtifactory.md +1 -1
- data/docs/GatewayCreateProducerAws.md +1 -1
- data/docs/GatewayCreateProducerAzure.md +1 -1
- data/docs/GatewayCreateProducerCassandra.md +1 -1
- data/docs/GatewayCreateProducerCertificateAutomation.md +1 -1
- data/docs/GatewayCreateProducerChef.md +1 -1
- data/docs/GatewayCreateProducerCustom.md +1 -1
- data/docs/GatewayCreateProducerDockerhub.md +1 -1
- data/docs/GatewayCreateProducerEks.md +1 -1
- data/docs/GatewayCreateProducerGcp.md +1 -1
- data/docs/GatewayCreateProducerGke.md +1 -1
- data/docs/GatewayCreateProducerHanaDb.md +1 -1
- data/docs/GatewayCreateProducerLdap.md +1 -1
- data/docs/GatewayCreateProducerMSSQL.md +1 -1
- data/docs/GatewayCreateProducerMongo.md +1 -1
- data/docs/GatewayCreateProducerMySQL.md +1 -1
- data/docs/GatewayCreateProducerNativeK8S.md +11 -1
- data/docs/GatewayCreateProducerOracleDb.md +1 -1
- data/docs/GatewayCreateProducerPing.md +1 -1
- data/docs/GatewayCreateProducerPostgreSQL.md +1 -1
- data/docs/GatewayCreateProducerRabbitMQ.md +1 -1
- data/docs/GatewayCreateProducerRdp.md +1 -1
- data/docs/GatewayCreateProducerRedshift.md +1 -1
- data/docs/GatewayCreateProducerSnowflake.md +1 -1
- data/docs/GatewayDownloadCustomerFragments.md +22 -0
- data/docs/GatewayDownloadCustomerFragmentsOutput.md +18 -0
- data/docs/GatewayMessageQueueInfo.md +2 -0
- data/docs/GatewayUpdateProducerArtifactory.md +1 -1
- data/docs/GatewayUpdateProducerAws.md +1 -1
- data/docs/GatewayUpdateProducerAzure.md +1 -1
- data/docs/GatewayUpdateProducerCassandra.md +1 -1
- data/docs/GatewayUpdateProducerCertificateAutomation.md +1 -1
- data/docs/GatewayUpdateProducerChef.md +1 -1
- data/docs/GatewayUpdateProducerCustom.md +1 -1
- data/docs/GatewayUpdateProducerDockerhub.md +1 -1
- data/docs/GatewayUpdateProducerEks.md +1 -1
- data/docs/GatewayUpdateProducerGcp.md +1 -1
- data/docs/GatewayUpdateProducerGke.md +1 -1
- data/docs/GatewayUpdateProducerHanaDb.md +1 -1
- data/docs/GatewayUpdateProducerLdap.md +1 -1
- data/docs/GatewayUpdateProducerMSSQL.md +1 -1
- data/docs/GatewayUpdateProducerMongo.md +1 -1
- data/docs/GatewayUpdateProducerMySQL.md +1 -1
- data/docs/GatewayUpdateProducerNativeK8S.md +11 -1
- data/docs/GatewayUpdateProducerOracleDb.md +1 -1
- data/docs/GatewayUpdateProducerPing.md +1 -1
- data/docs/GatewayUpdateProducerPostgreSQL.md +1 -1
- data/docs/GatewayUpdateProducerRabbitMQ.md +1 -1
- data/docs/GatewayUpdateProducerRdp.md +1 -1
- data/docs/GatewayUpdateProducerRedshift.md +1 -1
- data/docs/GatewayUpdateProducerSnowflake.md +1 -1
- data/docs/GeneralConfigPart.md +2 -0
- data/docs/ImportPasswords.md +32 -0
- data/docs/ImportPasswordsOutput.md +22 -0
- data/docs/Item.md +4 -0
- data/docs/LinkedDetails.md +18 -0
- data/docs/RoleAssociationDetails.md +26 -0
- data/docs/TargetTypeDetailsInput.md +1 -3
- data/docs/UpdateAuthMethodCert.md +2 -0
- data/docs/UpdateLinkedTarget.md +2 -4
- data/docs/UpdateWindowsTarget.md +2 -4
- data/docs/V2Api.md +191 -2
- data/lib/akeyless/api/v2_api.rb +192 -0
- data/lib/akeyless/configuration.rb +5 -0
- data/lib/akeyless/models/cert_access_rules.rb +13 -1
- data/lib/akeyless/models/create_auth_method_cert.rb +11 -1
- data/lib/akeyless/models/create_certificate.rb +1 -1
- data/lib/akeyless/models/create_classic_key.rb +1 -1
- data/lib/akeyless/models/create_dynamic_secret.rb +1 -1
- data/lib/akeyless/models/create_linked_target.rb +2 -17
- data/lib/akeyless/models/create_rotated_secret.rb +1 -1
- data/lib/akeyless/models/create_secret.rb +1 -1
- data/lib/akeyless/models/create_windows_target.rb +9 -19
- data/lib/akeyless/models/decrypt_file.rb +35 -1
- data/lib/akeyless/models/describe_assoc.rb +257 -0
- data/lib/akeyless/models/describe_item.rb +13 -1
- data/lib/akeyless/models/dynamic_secret_producer_info.rb +21 -1
- data/lib/akeyless/models/encrypt_file.rb +1 -13
- data/lib/akeyless/models/gateway_basic_info.rb +246 -0
- data/lib/akeyless/models/gateway_create_producer_artifactory.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_aws.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_azure.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_cassandra.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_certificate_automation.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_chef.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_custom.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_dockerhub.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_eks.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_gcp.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_gke.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_hana_db.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_ldap.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_mongo.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_mssql.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_my_sql.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_native_k8_s.rb +52 -2
- data/lib/akeyless/models/gateway_create_producer_oracle_db.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_ping.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_postgre_sql.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_rabbit_mq.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_rdp.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_redshift.rb +1 -1
- data/lib/akeyless/models/gateway_create_producer_snowflake.rb +1 -1
- data/lib/akeyless/models/gateway_download_customer_fragments.rb +243 -0
- data/lib/akeyless/models/gateway_download_customer_fragments_output.rb +221 -0
- data/lib/akeyless/models/gateway_message_queue_info.rb +10 -1
- data/lib/akeyless/models/gateway_update_producer_artifactory.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_aws.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_azure.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_cassandra.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_certificate_automation.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_chef.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_custom.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_dockerhub.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_eks.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_gcp.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_gke.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_hana_db.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_ldap.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_mongo.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_mssql.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_my_sql.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_native_k8_s.rb +52 -2
- data/lib/akeyless/models/gateway_update_producer_oracle_db.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_ping.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_postgre_sql.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_rabbit_mq.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_rdp.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_redshift.rb +1 -1
- data/lib/akeyless/models/gateway_update_producer_snowflake.rb +1 -1
- data/lib/akeyless/models/general_config_part.rb +10 -1
- data/lib/akeyless/models/import_passwords.rb +304 -0
- data/lib/akeyless/models/import_passwords_output.rb +237 -0
- data/lib/akeyless/models/item.rb +21 -1
- data/lib/akeyless/models/linked_details.rb +221 -0
- data/lib/akeyless/models/role_association_details.rb +258 -0
- data/lib/akeyless/models/target_type_details_input.rb +3 -12
- data/lib/akeyless/models/update_auth_method_cert.rb +11 -1
- data/lib/akeyless/models/update_linked_target.rb +3 -18
- data/lib/akeyless/models/update_windows_target.rb +9 -19
- data/lib/akeyless/version.rb +1 -1
- data/lib/akeyless.rb +8 -0
- data/spec/models/describe_assoc_spec.rb +52 -0
- data/spec/models/gateway_basic_info_spec.rb +52 -0
- data/spec/models/gateway_download_customer_fragments_output_spec.rb +34 -0
- data/spec/models/gateway_download_customer_fragments_spec.rb +46 -0
- data/spec/models/import_passwords_output_spec.rb +46 -0
- data/spec/models/import_passwords_spec.rb +76 -0
- data/spec/models/linked_details_spec.rb +34 -0
- data/spec/models/role_association_details_spec.rb +58 -0
- metadata +34 -2
@@ -0,0 +1,258 @@
|
|
1
|
+
=begin
|
2
|
+
#Akeyless API
|
3
|
+
|
4
|
+
#The purpose of this application is to provide access to Akeyless API.
|
5
|
+
|
6
|
+
The version of the OpenAPI document: 2.0
|
7
|
+
Contact: support@akeyless.io
|
8
|
+
Generated by: https://openapi-generator.tech
|
9
|
+
OpenAPI Generator version: 6.5.0-SNAPSHOT
|
10
|
+
|
11
|
+
=end
|
12
|
+
|
13
|
+
require 'date'
|
14
|
+
require 'time'
|
15
|
+
|
16
|
+
module Akeyless
|
17
|
+
# RoleAssociationDetails includes details of an association between a role and an auth method.
|
18
|
+
class RoleAssociationDetails
|
19
|
+
attr_accessor :assoc_id
|
20
|
+
|
21
|
+
attr_accessor :auth_method_name
|
22
|
+
|
23
|
+
attr_accessor :auth_method_sub_claims
|
24
|
+
|
25
|
+
attr_accessor :role_name
|
26
|
+
|
27
|
+
attr_accessor :sub_claims_case_sensitive
|
28
|
+
|
29
|
+
# Attribute mapping from ruby-style variable name to JSON key.
|
30
|
+
def self.attribute_map
|
31
|
+
{
|
32
|
+
:'assoc_id' => :'assoc_id',
|
33
|
+
:'auth_method_name' => :'auth_method_name',
|
34
|
+
:'auth_method_sub_claims' => :'auth_method_sub_claims',
|
35
|
+
:'role_name' => :'role_name',
|
36
|
+
:'sub_claims_case_sensitive' => :'sub_claims_case_sensitive'
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns all the JSON keys this model knows about
|
41
|
+
def self.acceptable_attributes
|
42
|
+
attribute_map.values
|
43
|
+
end
|
44
|
+
|
45
|
+
# Attribute type mapping.
|
46
|
+
def self.openapi_types
|
47
|
+
{
|
48
|
+
:'assoc_id' => :'String',
|
49
|
+
:'auth_method_name' => :'String',
|
50
|
+
:'auth_method_sub_claims' => :'Hash<String, Array<String>>',
|
51
|
+
:'role_name' => :'String',
|
52
|
+
:'sub_claims_case_sensitive' => :'Boolean'
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
# List of attributes with nullable: true
|
57
|
+
def self.openapi_nullable
|
58
|
+
Set.new([
|
59
|
+
])
|
60
|
+
end
|
61
|
+
|
62
|
+
# Initializes the object
|
63
|
+
# @param [Hash] attributes Model attributes in the form of hash
|
64
|
+
def initialize(attributes = {})
|
65
|
+
if (!attributes.is_a?(Hash))
|
66
|
+
fail ArgumentError, "The input argument (attributes) must be a hash in `Akeyless::RoleAssociationDetails` initialize method"
|
67
|
+
end
|
68
|
+
|
69
|
+
# check to see if the attribute exists and convert string to symbol for hash key
|
70
|
+
attributes = attributes.each_with_object({}) { |(k, v), h|
|
71
|
+
if (!self.class.attribute_map.key?(k.to_sym))
|
72
|
+
fail ArgumentError, "`#{k}` is not a valid attribute in `Akeyless::RoleAssociationDetails`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
|
73
|
+
end
|
74
|
+
h[k.to_sym] = v
|
75
|
+
}
|
76
|
+
|
77
|
+
if attributes.key?(:'assoc_id')
|
78
|
+
self.assoc_id = attributes[:'assoc_id']
|
79
|
+
end
|
80
|
+
|
81
|
+
if attributes.key?(:'auth_method_name')
|
82
|
+
self.auth_method_name = attributes[:'auth_method_name']
|
83
|
+
end
|
84
|
+
|
85
|
+
if attributes.key?(:'auth_method_sub_claims')
|
86
|
+
if (value = attributes[:'auth_method_sub_claims']).is_a?(Hash)
|
87
|
+
self.auth_method_sub_claims = value
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
if attributes.key?(:'role_name')
|
92
|
+
self.role_name = attributes[:'role_name']
|
93
|
+
end
|
94
|
+
|
95
|
+
if attributes.key?(:'sub_claims_case_sensitive')
|
96
|
+
self.sub_claims_case_sensitive = attributes[:'sub_claims_case_sensitive']
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# Show invalid properties with the reasons. Usually used together with valid?
|
101
|
+
# @return Array for valid properties with the reasons
|
102
|
+
def list_invalid_properties
|
103
|
+
invalid_properties = Array.new
|
104
|
+
invalid_properties
|
105
|
+
end
|
106
|
+
|
107
|
+
# Check to see if the all the properties in the model are valid
|
108
|
+
# @return true if the model is valid
|
109
|
+
def valid?
|
110
|
+
true
|
111
|
+
end
|
112
|
+
|
113
|
+
# Checks equality by comparing each attribute.
|
114
|
+
# @param [Object] Object to be compared
|
115
|
+
def ==(o)
|
116
|
+
return true if self.equal?(o)
|
117
|
+
self.class == o.class &&
|
118
|
+
assoc_id == o.assoc_id &&
|
119
|
+
auth_method_name == o.auth_method_name &&
|
120
|
+
auth_method_sub_claims == o.auth_method_sub_claims &&
|
121
|
+
role_name == o.role_name &&
|
122
|
+
sub_claims_case_sensitive == o.sub_claims_case_sensitive
|
123
|
+
end
|
124
|
+
|
125
|
+
# @see the `==` method
|
126
|
+
# @param [Object] Object to be compared
|
127
|
+
def eql?(o)
|
128
|
+
self == o
|
129
|
+
end
|
130
|
+
|
131
|
+
# Calculates hash code according to all attributes.
|
132
|
+
# @return [Integer] Hash code
|
133
|
+
def hash
|
134
|
+
[assoc_id, auth_method_name, auth_method_sub_claims, role_name, sub_claims_case_sensitive].hash
|
135
|
+
end
|
136
|
+
|
137
|
+
# Builds the object from hash
|
138
|
+
# @param [Hash] attributes Model attributes in the form of hash
|
139
|
+
# @return [Object] Returns the model itself
|
140
|
+
def self.build_from_hash(attributes)
|
141
|
+
new.build_from_hash(attributes)
|
142
|
+
end
|
143
|
+
|
144
|
+
# Builds the object from hash
|
145
|
+
# @param [Hash] attributes Model attributes in the form of hash
|
146
|
+
# @return [Object] Returns the model itself
|
147
|
+
def build_from_hash(attributes)
|
148
|
+
return nil unless attributes.is_a?(Hash)
|
149
|
+
attributes = attributes.transform_keys(&:to_sym)
|
150
|
+
self.class.openapi_types.each_pair do |key, type|
|
151
|
+
if attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key)
|
152
|
+
self.send("#{key}=", nil)
|
153
|
+
elsif type =~ /\AArray<(.*)>/i
|
154
|
+
# check to ensure the input is an array given that the attribute
|
155
|
+
# is documented as an array but the input is not
|
156
|
+
if attributes[self.class.attribute_map[key]].is_a?(Array)
|
157
|
+
self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
|
158
|
+
end
|
159
|
+
elsif !attributes[self.class.attribute_map[key]].nil?
|
160
|
+
self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
self
|
165
|
+
end
|
166
|
+
|
167
|
+
# Deserializes the data based on type
|
168
|
+
# @param string type Data type
|
169
|
+
# @param string value Value to be deserialized
|
170
|
+
# @return [Object] Deserialized data
|
171
|
+
def _deserialize(type, value)
|
172
|
+
case type.to_sym
|
173
|
+
when :Time
|
174
|
+
Time.parse(value)
|
175
|
+
when :Date
|
176
|
+
Date.parse(value)
|
177
|
+
when :String
|
178
|
+
value.to_s
|
179
|
+
when :Integer
|
180
|
+
value.to_i
|
181
|
+
when :Float
|
182
|
+
value.to_f
|
183
|
+
when :Boolean
|
184
|
+
if value.to_s =~ /\A(true|t|yes|y|1)\z/i
|
185
|
+
true
|
186
|
+
else
|
187
|
+
false
|
188
|
+
end
|
189
|
+
when :Object
|
190
|
+
# generic object (usually a Hash), return directly
|
191
|
+
value
|
192
|
+
when /\AArray<(?<inner_type>.+)>\z/
|
193
|
+
inner_type = Regexp.last_match[:inner_type]
|
194
|
+
value.map { |v| _deserialize(inner_type, v) }
|
195
|
+
when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
|
196
|
+
k_type = Regexp.last_match[:k_type]
|
197
|
+
v_type = Regexp.last_match[:v_type]
|
198
|
+
{}.tap do |hash|
|
199
|
+
value.each do |k, v|
|
200
|
+
hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
|
201
|
+
end
|
202
|
+
end
|
203
|
+
else # model
|
204
|
+
# models (e.g. Pet) or oneOf
|
205
|
+
klass = Akeyless.const_get(type)
|
206
|
+
klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
# Returns the string representation of the object
|
211
|
+
# @return [String] String presentation of the object
|
212
|
+
def to_s
|
213
|
+
to_hash.to_s
|
214
|
+
end
|
215
|
+
|
216
|
+
# to_body is an alias to to_hash (backward compatibility)
|
217
|
+
# @return [Hash] Returns the object in the form of hash
|
218
|
+
def to_body
|
219
|
+
to_hash
|
220
|
+
end
|
221
|
+
|
222
|
+
# Returns the object in the form of hash
|
223
|
+
# @return [Hash] Returns the object in the form of hash
|
224
|
+
def to_hash
|
225
|
+
hash = {}
|
226
|
+
self.class.attribute_map.each_pair do |attr, param|
|
227
|
+
value = self.send(attr)
|
228
|
+
if value.nil?
|
229
|
+
is_nullable = self.class.openapi_nullable.include?(attr)
|
230
|
+
next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
|
231
|
+
end
|
232
|
+
|
233
|
+
hash[param] = _to_hash(value)
|
234
|
+
end
|
235
|
+
hash
|
236
|
+
end
|
237
|
+
|
238
|
+
# Outputs non-array value in the form of hash
|
239
|
+
# For object, use to_hash. Otherwise, just return the value
|
240
|
+
# @param [Object] value Any valid value
|
241
|
+
# @return [Hash] Returns the value in the form of hash
|
242
|
+
def _to_hash(value)
|
243
|
+
if value.is_a?(Array)
|
244
|
+
value.compact.map { |v| _to_hash(v) }
|
245
|
+
elsif value.is_a?(Hash)
|
246
|
+
{}.tap do |hash|
|
247
|
+
value.each { |k, v| hash[k] = _to_hash(v) }
|
248
|
+
end
|
249
|
+
elsif value.respond_to? :to_hash
|
250
|
+
value.to_hash
|
251
|
+
else
|
252
|
+
value
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
end
|
257
|
+
|
258
|
+
end
|
@@ -200,8 +200,6 @@ module Akeyless
|
|
200
200
|
|
201
201
|
attr_accessor :rabbitmq_server_user
|
202
202
|
|
203
|
-
attr_accessor :rdp_port
|
204
|
-
|
205
203
|
attr_accessor :security_token
|
206
204
|
|
207
205
|
attr_accessor :sf_account
|
@@ -326,7 +324,6 @@ module Akeyless
|
|
326
324
|
:'rabbitmq_server_password' => :'rabbitmq_server_password',
|
327
325
|
:'rabbitmq_server_uri' => :'rabbitmq_server_uri',
|
328
326
|
:'rabbitmq_server_user' => :'rabbitmq_server_user',
|
329
|
-
:'rdp_port' => :'rdp_port',
|
330
327
|
:'security_token' => :'security_token',
|
331
328
|
:'sf_account' => :'sf_account',
|
332
329
|
:'ssl_connection_certificate' => :'ssl_connection_certificate',
|
@@ -409,7 +406,7 @@ module Akeyless
|
|
409
406
|
:'gke_service_account_name' => :'String',
|
410
407
|
:'host' => :'String',
|
411
408
|
:'hostname' => :'String',
|
412
|
-
:'hosts' => :'
|
409
|
+
:'hosts' => :'Hash<String, String>',
|
413
410
|
:'implementation_type' => :'String',
|
414
411
|
:'k8s_bearer_token' => :'String',
|
415
412
|
:'k8s_cluster_ca_certificate' => :'String',
|
@@ -441,7 +438,6 @@ module Akeyless
|
|
441
438
|
:'rabbitmq_server_password' => :'String',
|
442
439
|
:'rabbitmq_server_uri' => :'String',
|
443
440
|
:'rabbitmq_server_user' => :'String',
|
444
|
-
:'rdp_port' => :'String',
|
445
441
|
:'security_token' => :'String',
|
446
442
|
:'sf_account' => :'String',
|
447
443
|
:'ssl_connection_certificate' => :'String',
|
@@ -707,7 +703,7 @@ module Akeyless
|
|
707
703
|
end
|
708
704
|
|
709
705
|
if attributes.key?(:'hosts')
|
710
|
-
if (value = attributes[:'hosts']).is_a?(
|
706
|
+
if (value = attributes[:'hosts']).is_a?(Hash)
|
711
707
|
self.hosts = value
|
712
708
|
end
|
713
709
|
end
|
@@ -836,10 +832,6 @@ module Akeyless
|
|
836
832
|
self.rabbitmq_server_user = attributes[:'rabbitmq_server_user']
|
837
833
|
end
|
838
834
|
|
839
|
-
if attributes.key?(:'rdp_port')
|
840
|
-
self.rdp_port = attributes[:'rdp_port']
|
841
|
-
end
|
842
|
-
|
843
835
|
if attributes.key?(:'security_token')
|
844
836
|
self.security_token = attributes[:'security_token']
|
845
837
|
end
|
@@ -1010,7 +1002,6 @@ module Akeyless
|
|
1010
1002
|
rabbitmq_server_password == o.rabbitmq_server_password &&
|
1011
1003
|
rabbitmq_server_uri == o.rabbitmq_server_uri &&
|
1012
1004
|
rabbitmq_server_user == o.rabbitmq_server_user &&
|
1013
|
-
rdp_port == o.rdp_port &&
|
1014
1005
|
security_token == o.security_token &&
|
1015
1006
|
sf_account == o.sf_account &&
|
1016
1007
|
ssl_connection_certificate == o.ssl_connection_certificate &&
|
@@ -1038,7 +1029,7 @@ module Akeyless
|
|
1038
1029
|
# Calculates hash code according to all attributes.
|
1039
1030
|
# @return [Integer] Hash code
|
1040
1031
|
def hash
|
1041
|
-
[administrative_port, app_private_key, artifactory_admin_apikey, artifactory_admin_username, artifactory_base_url, auth_flow, authorization_port, aws_access_key_id, aws_region, aws_secret_access_key, aws_session_token, azure_client_id, azure_client_secret, azure_resource_group_name, azure_resource_name, azure_subscription_id, azure_tenant_id, ca_cert_data, ca_cert_name, chef_server_host_name, chef_server_key, chef_server_port, chef_server_url, chef_server_username, chef_skip_ssl, client_id, client_secret, db_host_name, db_name, db_port, db_private_key, db_private_key_passphrase, db_pwd, db_server_certificates, db_server_name, db_user_name, eks_access_key_id, eks_cluster_ca_certificate, eks_cluster_endpoint, eks_cluster_name, eks_region, eks_secret_access_key, gcp_service_account_email, gcp_service_account_key, gcp_service_account_key_base64, github_app_id, github_app_private_key, github_base_url, gke_cluster_ca_certificate, gke_cluster_endpoint, gke_cluster_name, gke_service_account_key, gke_service_account_name, host, hostname, hosts, implementation_type, k8s_bearer_token, k8s_cluster_ca_certificate, k8s_cluster_endpoint, ldap_audience, ldap_bind_dn, ldap_bind_password, ldap_certificate, ldap_token_expiration, ldap_url, mongodb_atlas_api_private_key, mongodb_atlas_api_public_key, mongodb_atlas_project_id, mongodb_db_name, mongodb_default_auth_db, mongodb_host_port, mongodb_is_atlas, mongodb_password, mongodb_uri_connection, mongodb_uri_options, mongodb_username, password, payload, ping_url, port, private_key, private_key_password, privileged_user, rabbitmq_server_password, rabbitmq_server_uri, rabbitmq_server_user,
|
1032
|
+
[administrative_port, app_private_key, artifactory_admin_apikey, artifactory_admin_username, artifactory_base_url, auth_flow, authorization_port, aws_access_key_id, aws_region, aws_secret_access_key, aws_session_token, azure_client_id, azure_client_secret, azure_resource_group_name, azure_resource_name, azure_subscription_id, azure_tenant_id, ca_cert_data, ca_cert_name, chef_server_host_name, chef_server_key, chef_server_port, chef_server_url, chef_server_username, chef_skip_ssl, client_id, client_secret, db_host_name, db_name, db_port, db_private_key, db_private_key_passphrase, db_pwd, db_server_certificates, db_server_name, db_user_name, eks_access_key_id, eks_cluster_ca_certificate, eks_cluster_endpoint, eks_cluster_name, eks_region, eks_secret_access_key, gcp_service_account_email, gcp_service_account_key, gcp_service_account_key_base64, github_app_id, github_app_private_key, github_base_url, gke_cluster_ca_certificate, gke_cluster_endpoint, gke_cluster_name, gke_service_account_key, gke_service_account_name, host, hostname, hosts, implementation_type, k8s_bearer_token, k8s_cluster_ca_certificate, k8s_cluster_endpoint, ldap_audience, ldap_bind_dn, ldap_bind_password, ldap_certificate, ldap_token_expiration, ldap_url, mongodb_atlas_api_private_key, mongodb_atlas_api_public_key, mongodb_atlas_project_id, mongodb_db_name, mongodb_default_auth_db, mongodb_host_port, mongodb_is_atlas, mongodb_password, mongodb_uri_connection, mongodb_uri_options, mongodb_username, password, payload, ping_url, port, private_key, private_key_password, privileged_user, rabbitmq_server_password, rabbitmq_server_uri, rabbitmq_server_user, security_token, sf_account, ssl_connection_certificate, ssl_connection_mode, tenant_url, url, use_gw_cloud_identity, user_name, user_password, username, venafi_api_key, venafi_base_url, venafi_tpp_password, venafi_tpp_username, venafi_use_tpp, venafi_zone].hash
|
1042
1033
|
end
|
1043
1034
|
|
1044
1035
|
# Builds the object from hash
|
@@ -19,6 +19,9 @@ module Akeyless
|
|
19
19
|
# Access expiration date in Unix timestamp (select 0 for access without expiry date)
|
20
20
|
attr_accessor :access_expires
|
21
21
|
|
22
|
+
# Comma separated list of allowed CORS domains to be validated as part of the authentication flow.
|
23
|
+
attr_accessor :allowed_cors
|
24
|
+
|
22
25
|
# A list of names. At least one must exist in the Common Name. Supports globbing.
|
23
26
|
attr_accessor :bound_common_names
|
24
27
|
|
@@ -77,6 +80,7 @@ module Akeyless
|
|
77
80
|
def self.attribute_map
|
78
81
|
{
|
79
82
|
:'access_expires' => :'access-expires',
|
83
|
+
:'allowed_cors' => :'allowed-cors',
|
80
84
|
:'bound_common_names' => :'bound-common-names',
|
81
85
|
:'bound_dns_sans' => :'bound-dns-sans',
|
82
86
|
:'bound_email_sans' => :'bound-email-sans',
|
@@ -107,6 +111,7 @@ module Akeyless
|
|
107
111
|
def self.openapi_types
|
108
112
|
{
|
109
113
|
:'access_expires' => :'Integer',
|
114
|
+
:'allowed_cors' => :'String',
|
110
115
|
:'bound_common_names' => :'Array<String>',
|
111
116
|
:'bound_dns_sans' => :'Array<String>',
|
112
117
|
:'bound_email_sans' => :'Array<String>',
|
@@ -155,6 +160,10 @@ module Akeyless
|
|
155
160
|
self.access_expires = 0
|
156
161
|
end
|
157
162
|
|
163
|
+
if attributes.key?(:'allowed_cors')
|
164
|
+
self.allowed_cors = attributes[:'allowed_cors']
|
165
|
+
end
|
166
|
+
|
158
167
|
if attributes.key?(:'bound_common_names')
|
159
168
|
if (value = attributes[:'bound_common_names']).is_a?(Array)
|
160
169
|
self.bound_common_names = value
|
@@ -279,6 +288,7 @@ module Akeyless
|
|
279
288
|
return true if self.equal?(o)
|
280
289
|
self.class == o.class &&
|
281
290
|
access_expires == o.access_expires &&
|
291
|
+
allowed_cors == o.allowed_cors &&
|
282
292
|
bound_common_names == o.bound_common_names &&
|
283
293
|
bound_dns_sans == o.bound_dns_sans &&
|
284
294
|
bound_email_sans == o.bound_email_sans &&
|
@@ -308,7 +318,7 @@ module Akeyless
|
|
308
318
|
# Calculates hash code according to all attributes.
|
309
319
|
# @return [Integer] Hash code
|
310
320
|
def hash
|
311
|
-
[access_expires, bound_common_names, bound_dns_sans, bound_email_sans, bound_extensions, bound_ips, bound_organizational_units, bound_uri_sans, certificate_data, force_sub_claims, gw_bound_ips, json, jwt_ttl, name, new_name, revoked_cert_ids, token, uid_token, unique_identifier].hash
|
321
|
+
[access_expires, allowed_cors, bound_common_names, bound_dns_sans, bound_email_sans, bound_extensions, bound_ips, bound_organizational_units, bound_uri_sans, certificate_data, force_sub_claims, gw_bound_ips, json, jwt_ttl, name, new_name, revoked_cert_ids, token, uid_token, unique_identifier].hash
|
312
322
|
end
|
313
323
|
|
314
324
|
# Builds the object from hash
|
@@ -15,16 +15,13 @@ require 'time'
|
|
15
15
|
|
16
16
|
module Akeyless
|
17
17
|
class UpdateLinkedTarget
|
18
|
-
#
|
18
|
+
# A comma seperated list of new server hosts and server descriptions joined by semicolon ';' that will be added to the Linked Target hosts.
|
19
19
|
attr_accessor :add_hosts
|
20
20
|
|
21
|
-
# Deprecated - use description
|
22
|
-
attr_accessor :comment
|
23
|
-
|
24
21
|
# Description of the object
|
25
22
|
attr_accessor :description
|
26
23
|
|
27
|
-
# A comma seperated list of server hosts.
|
24
|
+
# A comma seperated list of server hosts and server descriptions joined by semicolon ';' (i.e. 'server-dev.com;My Dev server,server-prod.com;My Prod server description')
|
28
25
|
attr_accessor :hosts
|
29
26
|
|
30
27
|
# Set output format to JSON
|
@@ -55,7 +52,6 @@ module Akeyless
|
|
55
52
|
def self.attribute_map
|
56
53
|
{
|
57
54
|
:'add_hosts' => :'add-hosts',
|
58
|
-
:'comment' => :'comment',
|
59
55
|
:'description' => :'description',
|
60
56
|
:'hosts' => :'hosts',
|
61
57
|
:'json' => :'json',
|
@@ -78,7 +74,6 @@ module Akeyless
|
|
78
74
|
def self.openapi_types
|
79
75
|
{
|
80
76
|
:'add_hosts' => :'String',
|
81
|
-
:'comment' => :'String',
|
82
77
|
:'description' => :'String',
|
83
78
|
:'hosts' => :'String',
|
84
79
|
:'json' => :'Boolean',
|
@@ -117,10 +112,6 @@ module Akeyless
|
|
117
112
|
self.add_hosts = attributes[:'add_hosts']
|
118
113
|
end
|
119
114
|
|
120
|
-
if attributes.key?(:'comment')
|
121
|
-
self.comment = attributes[:'comment']
|
122
|
-
end
|
123
|
-
|
124
115
|
if attributes.key?(:'description')
|
125
116
|
self.description = attributes[:'description']
|
126
117
|
end
|
@@ -168,10 +159,6 @@ module Akeyless
|
|
168
159
|
# @return Array for valid properties with the reasons
|
169
160
|
def list_invalid_properties
|
170
161
|
invalid_properties = Array.new
|
171
|
-
if @hosts.nil?
|
172
|
-
invalid_properties.push('invalid value for "hosts", hosts cannot be nil.')
|
173
|
-
end
|
174
|
-
|
175
162
|
if @name.nil?
|
176
163
|
invalid_properties.push('invalid value for "name", name cannot be nil.')
|
177
164
|
end
|
@@ -182,7 +169,6 @@ module Akeyless
|
|
182
169
|
# Check to see if the all the properties in the model are valid
|
183
170
|
# @return true if the model is valid
|
184
171
|
def valid?
|
185
|
-
return false if @hosts.nil?
|
186
172
|
return false if @name.nil?
|
187
173
|
true
|
188
174
|
end
|
@@ -193,7 +179,6 @@ module Akeyless
|
|
193
179
|
return true if self.equal?(o)
|
194
180
|
self.class == o.class &&
|
195
181
|
add_hosts == o.add_hosts &&
|
196
|
-
comment == o.comment &&
|
197
182
|
description == o.description &&
|
198
183
|
hosts == o.hosts &&
|
199
184
|
json == o.json &&
|
@@ -215,7 +200,7 @@ module Akeyless
|
|
215
200
|
# Calculates hash code according to all attributes.
|
216
201
|
# @return [Integer] Hash code
|
217
202
|
def hash
|
218
|
-
[add_hosts,
|
203
|
+
[add_hosts, description, hosts, json, keep_prev_version, name, new_name, parent_target_name, rm_hosts, token, uid_token].hash
|
219
204
|
end
|
220
205
|
|
221
206
|
# Builds the object from hash
|
@@ -15,9 +15,6 @@ require 'time'
|
|
15
15
|
|
16
16
|
module Akeyless
|
17
17
|
class UpdateWindowsTarget
|
18
|
-
# Deprecated - use description
|
19
|
-
attr_accessor :comment
|
20
|
-
|
21
18
|
# Description of the object
|
22
19
|
attr_accessor :description
|
23
20
|
|
@@ -42,8 +39,8 @@ module Akeyless
|
|
42
39
|
# The privileged user password
|
43
40
|
attr_accessor :password
|
44
41
|
|
45
|
-
# Server
|
46
|
-
attr_accessor :
|
42
|
+
# Server WinRM HTTPS port
|
43
|
+
attr_accessor :port
|
47
44
|
|
48
45
|
# Authentication token (see `/auth` and `/configure`)
|
49
46
|
attr_accessor :token
|
@@ -60,7 +57,6 @@ module Akeyless
|
|
60
57
|
# Attribute mapping from ruby-style variable name to JSON key.
|
61
58
|
def self.attribute_map
|
62
59
|
{
|
63
|
-
:'comment' => :'comment',
|
64
60
|
:'description' => :'description',
|
65
61
|
:'hostname' => :'hostname',
|
66
62
|
:'json' => :'json',
|
@@ -69,7 +65,7 @@ module Akeyless
|
|
69
65
|
:'name' => :'name',
|
70
66
|
:'new_name' => :'new-name',
|
71
67
|
:'password' => :'password',
|
72
|
-
:'
|
68
|
+
:'port' => :'port',
|
73
69
|
:'token' => :'token',
|
74
70
|
:'uid_token' => :'uid-token',
|
75
71
|
:'update_version' => :'update-version',
|
@@ -85,7 +81,6 @@ module Akeyless
|
|
85
81
|
# Attribute type mapping.
|
86
82
|
def self.openapi_types
|
87
83
|
{
|
88
|
-
:'comment' => :'String',
|
89
84
|
:'description' => :'String',
|
90
85
|
:'hostname' => :'String',
|
91
86
|
:'json' => :'Boolean',
|
@@ -94,7 +89,7 @@ module Akeyless
|
|
94
89
|
:'name' => :'String',
|
95
90
|
:'new_name' => :'String',
|
96
91
|
:'password' => :'String',
|
97
|
-
:'
|
92
|
+
:'port' => :'String',
|
98
93
|
:'token' => :'String',
|
99
94
|
:'uid_token' => :'String',
|
100
95
|
:'update_version' => :'Boolean',
|
@@ -123,10 +118,6 @@ module Akeyless
|
|
123
118
|
h[k.to_sym] = v
|
124
119
|
}
|
125
120
|
|
126
|
-
if attributes.key?(:'comment')
|
127
|
-
self.comment = attributes[:'comment']
|
128
|
-
end
|
129
|
-
|
130
121
|
if attributes.key?(:'description')
|
131
122
|
self.description = attributes[:'description']
|
132
123
|
end
|
@@ -161,10 +152,10 @@ module Akeyless
|
|
161
152
|
self.password = attributes[:'password']
|
162
153
|
end
|
163
154
|
|
164
|
-
if attributes.key?(:'
|
165
|
-
self.
|
155
|
+
if attributes.key?(:'port')
|
156
|
+
self.port = attributes[:'port']
|
166
157
|
else
|
167
|
-
self.
|
158
|
+
self.port = '5986'
|
168
159
|
end
|
169
160
|
|
170
161
|
if attributes.key?(:'token')
|
@@ -207,7 +198,6 @@ module Akeyless
|
|
207
198
|
def ==(o)
|
208
199
|
return true if self.equal?(o)
|
209
200
|
self.class == o.class &&
|
210
|
-
comment == o.comment &&
|
211
201
|
description == o.description &&
|
212
202
|
hostname == o.hostname &&
|
213
203
|
json == o.json &&
|
@@ -216,7 +206,7 @@ module Akeyless
|
|
216
206
|
name == o.name &&
|
217
207
|
new_name == o.new_name &&
|
218
208
|
password == o.password &&
|
219
|
-
|
209
|
+
port == o.port &&
|
220
210
|
token == o.token &&
|
221
211
|
uid_token == o.uid_token &&
|
222
212
|
update_version == o.update_version &&
|
@@ -232,7 +222,7 @@ module Akeyless
|
|
232
222
|
# Calculates hash code according to all attributes.
|
233
223
|
# @return [Integer] Hash code
|
234
224
|
def hash
|
235
|
-
[
|
225
|
+
[description, hostname, json, keep_prev_version, key, name, new_name, password, port, token, uid_token, update_version, username].hash
|
236
226
|
end
|
237
227
|
|
238
228
|
# Builds the object from hash
|
data/lib/akeyless/version.rb
CHANGED
data/lib/akeyless.rb
CHANGED
@@ -179,6 +179,7 @@ require 'akeyless/models/delete_roles'
|
|
179
179
|
require 'akeyless/models/delete_target'
|
180
180
|
require 'akeyless/models/delete_target_association'
|
181
181
|
require 'akeyless/models/delete_targets'
|
182
|
+
require 'akeyless/models/describe_assoc'
|
182
183
|
require 'akeyless/models/describe_item'
|
183
184
|
require 'akeyless/models/describe_permissions'
|
184
185
|
require 'akeyless/models/describe_permissions_output'
|
@@ -206,6 +207,7 @@ require 'akeyless/models/external_kms_key_id'
|
|
206
207
|
require 'akeyless/models/gcp_access_rules'
|
207
208
|
require 'akeyless/models/gcp_payload'
|
208
209
|
require 'akeyless/models/gcp_secrets_migration'
|
210
|
+
require 'akeyless/models/gateway_basic_info'
|
209
211
|
require 'akeyless/models/gateway_create_k8_s_auth_config'
|
210
212
|
require 'akeyless/models/gateway_create_k8_s_auth_config_output'
|
211
213
|
require 'akeyless/models/gateway_create_migration'
|
@@ -265,6 +267,8 @@ require 'akeyless/models/gateway_delete_k8_s_auth_config_output'
|
|
265
267
|
require 'akeyless/models/gateway_delete_migration'
|
266
268
|
require 'akeyless/models/gateway_delete_producer'
|
267
269
|
require 'akeyless/models/gateway_delete_producer_output'
|
270
|
+
require 'akeyless/models/gateway_download_customer_fragments'
|
271
|
+
require 'akeyless/models/gateway_download_customer_fragments_output'
|
268
272
|
require 'akeyless/models/gateway_get_config'
|
269
273
|
require 'akeyless/models/gateway_get_k8_s_auth_config'
|
270
274
|
require 'akeyless/models/gateway_get_k8_s_auth_config_output'
|
@@ -384,6 +388,8 @@ require 'akeyless/models/gw_cluster_identity'
|
|
384
388
|
require 'akeyless/models/hashi_migration'
|
385
389
|
require 'akeyless/models/hashi_payload'
|
386
390
|
require 'akeyless/models/huawei_access_rules'
|
391
|
+
require 'akeyless/models/import_passwords'
|
392
|
+
require 'akeyless/models/import_passwords_output'
|
387
393
|
require 'akeyless/models/importer_info'
|
388
394
|
require 'akeyless/models/item'
|
389
395
|
require 'akeyless/models/item_general_info'
|
@@ -427,6 +433,7 @@ require 'akeyless/models/last_config_change'
|
|
427
433
|
require 'akeyless/models/last_status_info'
|
428
434
|
require 'akeyless/models/ldap_config_part'
|
429
435
|
require 'akeyless/models/leadership_config_part'
|
436
|
+
require 'akeyless/models/linked_details'
|
430
437
|
require 'akeyless/models/list_auth_methods'
|
431
438
|
require 'akeyless/models/list_auth_methods_output'
|
432
439
|
require 'akeyless/models/list_gateways'
|
@@ -476,6 +483,7 @@ require 'akeyless/models/reverse_rbac_client'
|
|
476
483
|
require 'akeyless/models/reverse_rbac_output'
|
477
484
|
require 'akeyless/models/revoke_creds'
|
478
485
|
require 'akeyless/models/role'
|
486
|
+
require 'akeyless/models/role_association_details'
|
479
487
|
require 'akeyless/models/role_auth_method_association'
|
480
488
|
require 'akeyless/models/rollback_secret'
|
481
489
|
require 'akeyless/models/rollback_secret_output'
|
@@ -0,0 +1,52 @@
|
|
1
|
+
=begin
|
2
|
+
#Akeyless API
|
3
|
+
|
4
|
+
#The purpose of this application is to provide access to Akeyless API.
|
5
|
+
|
6
|
+
The version of the OpenAPI document: 2.0
|
7
|
+
Contact: support@akeyless.io
|
8
|
+
Generated by: https://openapi-generator.tech
|
9
|
+
OpenAPI Generator version: 6.5.0-SNAPSHOT
|
10
|
+
|
11
|
+
=end
|
12
|
+
|
13
|
+
require 'spec_helper'
|
14
|
+
require 'json'
|
15
|
+
require 'date'
|
16
|
+
|
17
|
+
# Unit tests for Akeyless::DescribeAssoc
|
18
|
+
# Automatically generated by openapi-generator (https://openapi-generator.tech)
|
19
|
+
# Please update as you see appropriate
|
20
|
+
describe Akeyless::DescribeAssoc do
|
21
|
+
let(:instance) { Akeyless::DescribeAssoc.new }
|
22
|
+
|
23
|
+
describe 'test an instance of DescribeAssoc' do
|
24
|
+
it 'should create an instance of DescribeAssoc' do
|
25
|
+
expect(instance).to be_instance_of(Akeyless::DescribeAssoc)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
describe 'test attribute "assoc_id"' do
|
29
|
+
it 'should work' do
|
30
|
+
# assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'test attribute "json"' do
|
35
|
+
it 'should work' do
|
36
|
+
# assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe 'test attribute "token"' do
|
41
|
+
it 'should work' do
|
42
|
+
# assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe 'test attribute "uid_token"' do
|
47
|
+
it 'should work' do
|
48
|
+
# assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|