auth0 6.5.0 → 6.6.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/.fern/metadata.json +3 -3
- data/.fern/replay.lock +10 -52
- data/.version +1 -1
- data/CHANGELOG.md +8 -0
- data/EXAMPLES.md +20 -0
- data/README.md +18 -0
- data/examples/ruby-api/Gemfile.lock +1 -1
- data/lib/auth0/attack_protection/brute_force_protection/types/update_brute_force_settings_request_content.rb +2 -2
- data/lib/auth0/attack_protection/client.rb +0 -5
- data/lib/auth0/auth_client.rb +27 -2
- data/lib/auth0/client.rb +15 -2
- data/lib/auth0/clients/client.rb +3 -0
- data/lib/auth0/clients/types/create_client_request_content.rb +2 -0
- data/lib/auth0/clients/types/list_clients_request_parameters.rb +2 -0
- data/lib/auth0/clients/types/update_client_request_content.rb +2 -0
- data/lib/auth0/connections/keys/client.rb +5 -5
- data/lib/auth0/experimentation/experiments/client.rb +2 -1
- data/lib/auth0/experimentation/experiments/types/create_experiment_request_content.rb +1 -1
- data/lib/auth0/experimentation/segments/client.rb +4 -1
- data/lib/auth0/experimentation/segments/types/list_segments_request_parameters.rb +2 -0
- data/lib/auth0/internal/http/rate_limit.rb +103 -0
- data/lib/auth0/internal/http/raw_client.rb +14 -2
- data/lib/auth0/mixins/httpproxy.rb +9 -1
- data/lib/auth0/mixins/initializer.rb +5 -0
- data/lib/auth0/portals/client.rb +198 -0
- data/lib/auth0/portals/types/create_portal_request_content.rb +21 -0
- data/lib/auth0/portals/types/update_portal_request_content.rb +23 -0
- data/lib/auth0/resource_servers/types/create_resource_server_request_content.rb +4 -0
- data/lib/auth0/resource_servers/types/update_resource_server_request_content.rb +4 -0
- data/lib/auth0/types/client.rb +4 -0
- data/lib/auth0/types/client_oidc_support.rb +14 -0
- data/lib/auth0/types/client_profile_client_configuration.rb +2 -0
- data/lib/auth0/types/client_profile_client_configuration_oidc_support.rb +10 -0
- data/lib/auth0/types/client_profile_client_configuration_oidc_support_allowed_scopes_enum.rb +14 -0
- data/lib/auth0/types/client_profile_client_configuration_oidc_support_default_value.rb +14 -0
- data/lib/auth0/types/client_search_response.rb +4 -0
- data/lib/auth0/types/{list_attack_protection_captcha_policies_response_content.rb → connection_client_id_samlxaa_requesting_app.rb} +2 -2
- data/lib/auth0/types/connection_client_secret_samlxaa_requesting_app.rb +23 -0
- data/lib/auth0/types/connection_options_auth0.rb +2 -0
- data/lib/auth0/types/connection_options_saml.rb +10 -0
- data/lib/auth0/types/connection_otp_channel_settings.rb +12 -0
- data/lib/auth0/types/connection_otp_settings.rb +12 -0
- data/lib/auth0/types/connection_properties_options.rb +2 -0
- data/lib/auth0/types/connection_response_content_saml.rb +2 -0
- data/lib/auth0/types/consent_signing_key.rb +15 -0
- data/lib/auth0/types/create_client_response_content.rb +4 -0
- data/lib/auth0/types/create_connection_request_content_saml.rb +2 -0
- data/lib/auth0/types/create_resource_server_response_content.rb +4 -0
- data/lib/auth0/types/event_stream_cloud_event_context.rb +2 -0
- data/lib/auth0/types/event_stream_cloud_event_context_transaction.rb +30 -0
- data/lib/auth0/types/event_stream_cloud_event_context_transaction_protocol_enum.rb +24 -0
- data/lib/auth0/types/event_stream_cloud_event_context_transaction_response_mode_enum.rb +14 -0
- data/lib/auth0/types/event_stream_cloud_event_context_transaction_response_type_item_enum.rb +13 -0
- data/lib/auth0/types/get_brute_force_settings_response_content.rb +2 -2
- data/lib/auth0/types/get_client_response_content.rb +4 -0
- data/lib/auth0/types/get_resource_server_response_content.rb +4 -0
- data/lib/auth0/types/guardian_factor_name_enum.rb +1 -0
- data/lib/auth0/types/internal_server_error_body.rb +13 -0
- data/lib/auth0/types/internal_server_error_body_error.rb +11 -0
- data/lib/auth0/types/list_portals_response_content.rb +9 -0
- data/lib/auth0/types/list_user_consent_signing_keys_response_content.rb +9 -0
- data/lib/auth0/types/oauth_scope.rb +4 -0
- data/lib/auth0/types/page_component.rb +33 -0
- data/lib/auth0/types/page_component_auth0form.rb +9 -0
- data/lib/auth0/types/page_component_auth0form_config.rb +11 -0
- data/lib/auth0/types/page_component_auth0media_image.rb +9 -0
- data/lib/auth0/types/page_component_auth0media_image_config.rb +13 -0
- data/lib/auth0/types/page_component_auth0my_account_mfa_management.rb +9 -0
- data/lib/auth0/types/page_component_auth0my_account_mfa_management_config.rb +7 -0
- data/lib/auth0/types/page_component_auth0my_account_passkey_management.rb +9 -0
- data/lib/auth0/types/page_component_auth0my_account_passkey_management_config.rb +7 -0
- data/lib/auth0/types/page_component_auth0my_organization_details_edit.rb +9 -0
- data/lib/auth0/types/page_component_auth0my_organization_details_edit_config.rb +7 -0
- data/lib/auth0/types/page_component_auth0my_organization_domain_table.rb +9 -0
- data/lib/auth0/types/page_component_auth0my_organization_domain_table_config.rb +7 -0
- data/lib/auth0/types/page_component_auth0my_organization_member_management.rb +9 -0
- data/lib/auth0/types/page_component_auth0my_organization_member_management_config.rb +7 -0
- data/lib/auth0/types/page_component_auth0structure_section.rb +9 -0
- data/lib/auth0/types/page_component_auth0structure_section_config.rb +15 -0
- data/lib/auth0/types/page_component_auth0structure_section_variant_enum.rb +12 -0
- data/lib/auth0/types/page_component_auth0structure_separator.rb +9 -0
- data/lib/auth0/types/page_component_auth0structure_separator_config.rb +11 -0
- data/lib/auth0/types/page_component_auth0structure_separator_variant_enum.rb +13 -0
- data/lib/auth0/types/page_component_auth0typography_heading.rb +9 -0
- data/lib/auth0/types/page_component_auth0typography_heading_config.rb +11 -0
- data/lib/auth0/types/page_component_auth0typography_rich_text.rb +9 -0
- data/lib/auth0/types/page_component_auth0typography_rich_text_config.rb +9 -0
- data/lib/auth0/types/page_component_no_children.rb +31 -0
- data/lib/auth0/types/page_slug.rb +23 -0
- data/lib/auth0/types/portal.rb +25 -0
- data/lib/auth0/types/portal_client_secret_post.rb +11 -0
- data/lib/auth0/types/portal_client_secret_post_request.rb +13 -0
- data/lib/auth0/types/portal_client_secret_post_request_token_endpoint_auth_method.rb +11 -0
- data/lib/auth0/types/portal_client_secret_post_token_endpoint_auth_method.rb +11 -0
- data/lib/auth0/types/portal_custom_code.rb +9 -0
- data/lib/auth0/types/portal_custom_code_nullable.rb +23 -0
- data/lib/auth0/types/portal_date_time.rb +23 -0
- data/lib/auth0/types/portal_id.rb +23 -0
- data/lib/auth0/types/portal_name.rb +23 -0
- data/lib/auth0/types/portal_navigation.rb +9 -0
- data/lib/auth0/types/portal_navigation_nullable.rb +23 -0
- data/lib/auth0/types/portal_page.rb +13 -0
- data/lib/auth0/types/portal_pages_by_type.rb +11 -0
- data/lib/auth0/types/portal_pages_by_type_nullable.rb +23 -0
- data/lib/auth0/types/portal_slug.rb +23 -0
- data/lib/auth0/types/portal_summary.rb +17 -0
- data/lib/auth0/types/position.rb +13 -0
- data/lib/auth0/types/resource_server.rb +4 -0
- data/lib/auth0/types/resource_server_agent_subject_claims_response_enum.rb +12 -0
- data/lib/auth0/types/resource_server_agent_subject_claims_schema_enum.rb +12 -0
- data/lib/auth0/types/resource_server_search_response.rb +4 -0
- data/lib/auth0/types/resource_server_type_enum.rb +11 -0
- data/lib/auth0/types/rotate_client_secret_response_content.rb +4 -0
- data/lib/auth0/types/sidebar.rb +9 -0
- data/lib/auth0/types/sidebar_component.rb +19 -0
- data/lib/auth0/types/sidebar_component_auth0external_link.rb +10 -0
- data/lib/auth0/types/sidebar_component_auth0external_link_config.rb +13 -0
- data/lib/auth0/types/sidebar_component_auth0external_link_v2.rb +9 -0
- data/lib/auth0/types/sidebar_component_auth0external_link_v2config.rb +13 -0
- data/lib/auth0/types/sidebar_component_auth0internal_link.rb +10 -0
- data/lib/auth0/types/sidebar_component_auth0internal_link_config.rb +13 -0
- data/lib/auth0/types/sidebar_component_auth0internal_link_v2.rb +9 -0
- data/lib/auth0/types/sidebar_component_auth0internal_link_v2config.rb +13 -0
- data/lib/auth0/types/update_brute_force_settings_response_content.rb +2 -2
- data/lib/auth0/types/update_client_response_content.rb +4 -0
- data/lib/auth0/types/update_connection_options.rb +2 -0
- data/lib/auth0/types/update_connection_request_content_saml.rb +2 -0
- data/lib/auth0/types/update_resource_server_response_content.rb +4 -0
- data/lib/auth0/types/update_variation_overrides_map.rb +1 -1
- data/lib/auth0/users/client.rb +120 -0
- data/lib/auth0/version.rb +1 -1
- data/lib/auth0.rb +79 -22
- data/wiremock/wiremock-mappings.json +308 -188
- metadata +81 -23
- data/lib/auth0/attack_protection/captcha_policies/client.rb +0 -210
- data/lib/auth0/attack_protection/captcha_policies/types/create_attack_protection_captcha_policy_request_content.rb +0 -21
- data/lib/auth0/attack_protection/captcha_policies/types/update_attack_protection_captcha_policy_request_content.rb +0 -23
- data/lib/auth0/types/attack_protection_captcha_policy.rb +0 -24
- data/lib/auth0/types/attack_protection_captcha_policy_action.rb +0 -24
- data/lib/auth0/types/attack_protection_captcha_policy_action_input.rb +0 -24
- data/lib/auth0/types/attack_protection_captcha_policy_match.rb +0 -12
- data/lib/auth0/types/captcha_active_provider_enum.rb +0 -17
- data/lib/auth0/types/captcha_policy_action_arkose.rb +0 -16
- data/lib/auth0/types/captcha_policy_action_arkose_input.rb +0 -18
- data/lib/auth0/types/captcha_policy_action_auth_challenge.rb +0 -10
- data/lib/auth0/types/captcha_policy_action_friendly_captcha.rb +0 -10
- data/lib/auth0/types/captcha_policy_action_friendly_captcha_input.rb +0 -12
- data/lib/auth0/types/captcha_policy_action_hcaptcha.rb +0 -10
- data/lib/auth0/types/captcha_policy_action_hcaptcha_input.rb +0 -12
- data/lib/auth0/types/captcha_policy_action_recaptcha_enterprise.rb +0 -12
- data/lib/auth0/types/captcha_policy_action_recaptcha_enterprise_input.rb +0 -14
- data/lib/auth0/types/captcha_policy_action_recaptcha_v2.rb +0 -10
- data/lib/auth0/types/captcha_policy_action_recaptcha_v2input.rb +0 -12
- data/lib/auth0/types/captcha_policy_action_simple_captcha.rb +0 -8
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Portals
|
|
5
|
+
class Client
|
|
6
|
+
# @param client [Auth0::Internal::Http::RawClient]
|
|
7
|
+
#
|
|
8
|
+
# @return [void]
|
|
9
|
+
def initialize(client:)
|
|
10
|
+
@client = client
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# @param request_options [Hash]
|
|
14
|
+
# @param _params [Hash]
|
|
15
|
+
# @option request_options [String] :base_url
|
|
16
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
17
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
18
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
19
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
20
|
+
#
|
|
21
|
+
# @example
|
|
22
|
+
# client.portals.list
|
|
23
|
+
#
|
|
24
|
+
# @return [Auth0::Types::ListPortalsResponseContent]
|
|
25
|
+
def list(request_options: {}, **_params)
|
|
26
|
+
request = Auth0::Internal::JSON::Request.new(
|
|
27
|
+
base_url: request_options[:base_url],
|
|
28
|
+
method: "GET",
|
|
29
|
+
path: "portals",
|
|
30
|
+
request_options: request_options
|
|
31
|
+
)
|
|
32
|
+
begin
|
|
33
|
+
response = @client.send(request)
|
|
34
|
+
rescue Net::HTTPRequestTimeout
|
|
35
|
+
raise Auth0::Errors::TimeoutError
|
|
36
|
+
end
|
|
37
|
+
code = response.code.to_i
|
|
38
|
+
if code.between?(200, 299)
|
|
39
|
+
(response.body.to_s.empty? ? nil : Auth0::Types::ListPortalsResponseContent.load(response.body))
|
|
40
|
+
else
|
|
41
|
+
error_class = Auth0::Errors::ResponseError.subclass_for_code(code)
|
|
42
|
+
raise error_class.new(response.body, code: code)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @param request_options [Hash]
|
|
47
|
+
# @param params [Auth0::Portals::Types::CreatePortalRequestContent]
|
|
48
|
+
# @option request_options [String] :base_url
|
|
49
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
50
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
51
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
52
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
53
|
+
#
|
|
54
|
+
# @example
|
|
55
|
+
# client.portals.create(
|
|
56
|
+
# slug: "slug",
|
|
57
|
+
# name: "name",
|
|
58
|
+
# client: {
|
|
59
|
+
# token_endpoint_auth_method: "client_secret_post",
|
|
60
|
+
# client_id: "client_id",
|
|
61
|
+
# client_secret: "client_secret"
|
|
62
|
+
# }
|
|
63
|
+
# )
|
|
64
|
+
#
|
|
65
|
+
# @return [Auth0::Types::Portal]
|
|
66
|
+
def create(request_options: {}, **params)
|
|
67
|
+
params = Auth0::Internal::Types::Utils.normalize_keys(params)
|
|
68
|
+
request = Auth0::Internal::JSON::Request.new(
|
|
69
|
+
base_url: request_options[:base_url],
|
|
70
|
+
method: "POST",
|
|
71
|
+
path: "portals",
|
|
72
|
+
body: Auth0::Portals::Types::CreatePortalRequestContent.new(params).to_h,
|
|
73
|
+
request_options: request_options
|
|
74
|
+
)
|
|
75
|
+
begin
|
|
76
|
+
response = @client.send(request)
|
|
77
|
+
rescue Net::HTTPRequestTimeout
|
|
78
|
+
raise Auth0::Errors::TimeoutError
|
|
79
|
+
end
|
|
80
|
+
code = response.code.to_i
|
|
81
|
+
if code.between?(200, 299)
|
|
82
|
+
(response.body.to_s.empty? ? nil : Auth0::Types::Portal.load(response.body))
|
|
83
|
+
else
|
|
84
|
+
error_class = Auth0::Errors::ResponseError.subclass_for_code(code)
|
|
85
|
+
raise error_class.new(response.body, code: code)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# @param request_options [Hash]
|
|
90
|
+
# @param params [Hash]
|
|
91
|
+
# @option request_options [String] :base_url
|
|
92
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
93
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
94
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
95
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
96
|
+
# @option params [Auth0::Types::PortalID] :id
|
|
97
|
+
#
|
|
98
|
+
# @example
|
|
99
|
+
# client.portals.get(id: "id")
|
|
100
|
+
#
|
|
101
|
+
# @return [Auth0::Types::Portal]
|
|
102
|
+
def get(request_options: {}, **params)
|
|
103
|
+
params = Auth0::Internal::Types::Utils.normalize_keys(params)
|
|
104
|
+
request = Auth0::Internal::JSON::Request.new(
|
|
105
|
+
base_url: request_options[:base_url],
|
|
106
|
+
method: "GET",
|
|
107
|
+
path: "portals/#{URI.encode_uri_component(params[:id].to_s)}",
|
|
108
|
+
request_options: request_options
|
|
109
|
+
)
|
|
110
|
+
begin
|
|
111
|
+
response = @client.send(request)
|
|
112
|
+
rescue Net::HTTPRequestTimeout
|
|
113
|
+
raise Auth0::Errors::TimeoutError
|
|
114
|
+
end
|
|
115
|
+
code = response.code.to_i
|
|
116
|
+
if code.between?(200, 299)
|
|
117
|
+
(response.body.to_s.empty? ? nil : Auth0::Types::Portal.load(response.body))
|
|
118
|
+
else
|
|
119
|
+
error_class = Auth0::Errors::ResponseError.subclass_for_code(code)
|
|
120
|
+
raise error_class.new(response.body, code: code)
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# @param request_options [Hash]
|
|
125
|
+
# @param params [Hash]
|
|
126
|
+
# @option request_options [String] :base_url
|
|
127
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
128
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
129
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
130
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
131
|
+
# @option params [Auth0::Types::PortalID] :id
|
|
132
|
+
#
|
|
133
|
+
# @example
|
|
134
|
+
# client.portals.delete(id: "id")
|
|
135
|
+
#
|
|
136
|
+
# @return [untyped]
|
|
137
|
+
def delete(request_options: {}, **params)
|
|
138
|
+
params = Auth0::Internal::Types::Utils.normalize_keys(params)
|
|
139
|
+
request = Auth0::Internal::JSON::Request.new(
|
|
140
|
+
base_url: request_options[:base_url],
|
|
141
|
+
method: "DELETE",
|
|
142
|
+
path: "portals/#{URI.encode_uri_component(params[:id].to_s)}",
|
|
143
|
+
request_options: request_options
|
|
144
|
+
)
|
|
145
|
+
begin
|
|
146
|
+
response = @client.send(request)
|
|
147
|
+
rescue Net::HTTPRequestTimeout
|
|
148
|
+
raise Auth0::Errors::TimeoutError
|
|
149
|
+
end
|
|
150
|
+
code = response.code.to_i
|
|
151
|
+
return if code.between?(200, 299)
|
|
152
|
+
|
|
153
|
+
error_class = Auth0::Errors::ResponseError.subclass_for_code(code)
|
|
154
|
+
raise error_class.new(response.body, code: code)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# @param request_options [Hash]
|
|
158
|
+
# @param params [Auth0::Portals::Types::UpdatePortalRequestContent]
|
|
159
|
+
# @option request_options [String] :base_url
|
|
160
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
161
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
162
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
163
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
164
|
+
# @option params [Auth0::Types::PortalID] :id
|
|
165
|
+
#
|
|
166
|
+
# @example
|
|
167
|
+
# client.portals.update(id: "id")
|
|
168
|
+
#
|
|
169
|
+
# @return [Auth0::Types::Portal]
|
|
170
|
+
def update(request_options: {}, **params)
|
|
171
|
+
params = Auth0::Internal::Types::Utils.normalize_keys(params)
|
|
172
|
+
request_data = Auth0::Portals::Types::UpdatePortalRequestContent.new(params).to_h
|
|
173
|
+
non_body_param_names = %w[id]
|
|
174
|
+
body = request_data.except(*non_body_param_names)
|
|
175
|
+
|
|
176
|
+
request = Auth0::Internal::JSON::Request.new(
|
|
177
|
+
base_url: request_options[:base_url],
|
|
178
|
+
method: "PATCH",
|
|
179
|
+
path: "portals/#{URI.encode_uri_component(params[:id].to_s)}",
|
|
180
|
+
body: body,
|
|
181
|
+
request_options: request_options
|
|
182
|
+
)
|
|
183
|
+
begin
|
|
184
|
+
response = @client.send(request)
|
|
185
|
+
rescue Net::HTTPRequestTimeout
|
|
186
|
+
raise Auth0::Errors::TimeoutError
|
|
187
|
+
end
|
|
188
|
+
code = response.code.to_i
|
|
189
|
+
if code.between?(200, 299)
|
|
190
|
+
(response.body.to_s.empty? ? nil : Auth0::Types::Portal.load(response.body))
|
|
191
|
+
else
|
|
192
|
+
error_class = Auth0::Errors::ResponseError.subclass_for_code(code)
|
|
193
|
+
raise error_class.new(response.body, code: code)
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Portals
|
|
5
|
+
module Types
|
|
6
|
+
class CreatePortalRequestContent < Internal::Types::Model
|
|
7
|
+
field :slug, -> { String }, optional: false, nullable: false
|
|
8
|
+
|
|
9
|
+
field :name, -> { String }, optional: false, nullable: false
|
|
10
|
+
|
|
11
|
+
field :client, -> { Auth0::Types::PortalClientSecretPostRequest }, optional: false, nullable: false
|
|
12
|
+
|
|
13
|
+
field :navigation, -> { Auth0::Types::PortalNavigation }, optional: true, nullable: false
|
|
14
|
+
|
|
15
|
+
field :pages, -> { Auth0::Types::PortalPagesByType }, optional: true, nullable: false
|
|
16
|
+
|
|
17
|
+
field :custom_code, -> { Auth0::Types::PortalCustomCode }, optional: true, nullable: false
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Portals
|
|
5
|
+
module Types
|
|
6
|
+
class UpdatePortalRequestContent < Internal::Types::Model
|
|
7
|
+
field :id, -> { String }, optional: false, nullable: false
|
|
8
|
+
|
|
9
|
+
field :slug, -> { String }, optional: true, nullable: false
|
|
10
|
+
|
|
11
|
+
field :name, -> { String }, optional: true, nullable: false
|
|
12
|
+
|
|
13
|
+
field :client, -> { Auth0::Types::PortalClientSecretPostRequest }, optional: true, nullable: false
|
|
14
|
+
|
|
15
|
+
field :navigation, -> { Auth0::Types::PortalNavigation }, optional: true, nullable: false
|
|
16
|
+
|
|
17
|
+
field :pages, -> { Auth0::Types::PortalPagesByType }, optional: true, nullable: false
|
|
18
|
+
|
|
19
|
+
field :custom_code, -> { Auth0::Types::PortalCustomCode }, optional: true, nullable: false
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -45,6 +45,10 @@ module Auth0
|
|
|
45
45
|
field :subject_type_authorization, -> { Auth0::Types::ResourceServerSubjectTypeAuthorization }, optional: true, nullable: false
|
|
46
46
|
|
|
47
47
|
field :authorization_policy, -> { Auth0::Types::ResourceServerAuthorizationPolicy }, optional: true, nullable: false
|
|
48
|
+
|
|
49
|
+
field :agent_subject_claims, -> { Auth0::Types::ResourceServerAgentSubjectClaimsSchemaEnum }, optional: true, nullable: false
|
|
50
|
+
|
|
51
|
+
field :type, -> { Auth0::Types::ResourceServerTypeEnum }, optional: true, nullable: false
|
|
48
52
|
end
|
|
49
53
|
end
|
|
50
54
|
end
|
|
@@ -45,6 +45,10 @@ module Auth0
|
|
|
45
45
|
field :subject_type_authorization, -> { Auth0::Types::ResourceServerSubjectTypeAuthorization }, optional: true, nullable: false
|
|
46
46
|
|
|
47
47
|
field :authorization_policy, -> { Auth0::Types::ResourceServerAuthorizationPolicy }, optional: true, nullable: false
|
|
48
|
+
|
|
49
|
+
field :agent_subject_claims, -> { Auth0::Types::ResourceServerAgentSubjectClaimsSchemaEnum }, optional: true, nullable: false
|
|
50
|
+
|
|
51
|
+
field :type, -> { Auth0::Types::ResourceServerTypeEnum }, optional: true, nullable: false
|
|
48
52
|
end
|
|
49
53
|
end
|
|
50
54
|
end
|
data/lib/auth0/types/client.rb
CHANGED
|
@@ -127,6 +127,8 @@ module Auth0
|
|
|
127
127
|
|
|
128
128
|
field :third_party_security_mode, -> { Auth0::Types::ClientThirdPartySecurityModeEnum }, optional: true, nullable: false
|
|
129
129
|
|
|
130
|
+
field :oidc_support, -> { Auth0::Types::ClientOidcSupport }, optional: true, nullable: false
|
|
131
|
+
|
|
130
132
|
field :redirection_policy, -> { Auth0::Types::ClientRedirectionPolicyEnum }, optional: true, nullable: false
|
|
131
133
|
|
|
132
134
|
field :resource_server_identifier, -> { String }, optional: true, nullable: false
|
|
@@ -139,6 +141,8 @@ module Auth0
|
|
|
139
141
|
|
|
140
142
|
field :external_metadata_status, -> { Auth0::Types::ClientExternalMetadataStatusEnum }, optional: true, nullable: false
|
|
141
143
|
|
|
144
|
+
field :agent_id, -> { String }, optional: true, nullable: false
|
|
145
|
+
|
|
142
146
|
field :external_client_id, -> { String }, optional: true, nullable: false
|
|
143
147
|
|
|
144
148
|
field :jwks_uri, -> { String }, optional: true, nullable: false
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Types
|
|
5
|
+
# OIDC support configuration for this client.
|
|
6
|
+
class ClientOidcSupport < Internal::Types::Model
|
|
7
|
+
field :is_allowed, -> { Internal::Types::Boolean }, optional: true, nullable: false
|
|
8
|
+
|
|
9
|
+
field :allow_all_scopes, -> { Internal::Types::Boolean }, optional: true, nullable: false
|
|
10
|
+
|
|
11
|
+
field :allowed_scopes, -> { Internal::Types::Array[Auth0::Types::ClientOidcSupportAllowedScopesEnum] }, optional: true, nullable: false
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -13,6 +13,8 @@ module Auth0
|
|
|
13
13
|
field :organization_discovery_methods, -> { Auth0::Types::ClientProfileClientConfigurationOrganizationDiscoveryMethods }, optional: true, nullable: false
|
|
14
14
|
|
|
15
15
|
field :require_proof_of_possession, -> { Auth0::Types::ClientProfileClientConfigurationRequireProofOfPossession }, optional: true, nullable: false
|
|
16
|
+
|
|
17
|
+
field :oidc_support, -> { Auth0::Types::ClientProfileClientConfigurationOidcSupport }, optional: true, nullable: false
|
|
16
18
|
end
|
|
17
19
|
end
|
|
18
20
|
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Types
|
|
5
|
+
# Default OIDC support applied to matched clients.
|
|
6
|
+
class ClientProfileClientConfigurationOidcSupport < Internal::Types::Model
|
|
7
|
+
field :default_value, -> { Auth0::Types::ClientProfileClientConfigurationOidcSupportDefaultValue }, optional: false, nullable: false
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Types
|
|
5
|
+
module ClientProfileClientConfigurationOidcSupportAllowedScopesEnum
|
|
6
|
+
extend Auth0::Internal::Types::Enum
|
|
7
|
+
|
|
8
|
+
PROFILE = "profile"
|
|
9
|
+
EMAIL = "email"
|
|
10
|
+
ADDRESS = "address"
|
|
11
|
+
PHONE = "phone"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Types
|
|
5
|
+
# OIDC support settings applied to matched clients.
|
|
6
|
+
class ClientProfileClientConfigurationOidcSupportDefaultValue < Internal::Types::Model
|
|
7
|
+
field :is_allowed, -> { Internal::Types::Boolean }, optional: false, nullable: false
|
|
8
|
+
|
|
9
|
+
field :allow_all_scopes, -> { Internal::Types::Boolean }, optional: true, nullable: false
|
|
10
|
+
|
|
11
|
+
field :allowed_scopes, -> { Internal::Types::Array[Auth0::Types::ClientProfileClientConfigurationOidcSupportAllowedScopesEnum] }, optional: true, nullable: false
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -119,6 +119,8 @@ module Auth0
|
|
|
119
119
|
|
|
120
120
|
field :third_party_security_mode, -> { Auth0::Types::ClientThirdPartySecurityModeEnum }, optional: true, nullable: false
|
|
121
121
|
|
|
122
|
+
field :oidc_support, -> { Auth0::Types::ClientOidcSupport }, optional: true, nullable: false
|
|
123
|
+
|
|
122
124
|
field :redirection_policy, -> { Auth0::Types::ClientRedirectionPolicyEnum }, optional: true, nullable: false
|
|
123
125
|
|
|
124
126
|
field :resource_server_identifier, -> { String }, optional: true, nullable: false
|
|
@@ -131,6 +133,8 @@ module Auth0
|
|
|
131
133
|
|
|
132
134
|
field :external_metadata_status, -> { Auth0::Types::ClientExternalMetadataStatusEnum }, optional: true, nullable: false
|
|
133
135
|
|
|
136
|
+
field :agent_id, -> { String }, optional: true, nullable: false
|
|
137
|
+
|
|
134
138
|
field :external_client_id, -> { String }, optional: true, nullable: false
|
|
135
139
|
|
|
136
140
|
field :jwks_uri, -> { String }, optional: true, nullable: false
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Auth0
|
|
4
4
|
module Types
|
|
5
|
-
module
|
|
6
|
-
#
|
|
5
|
+
module ConnectionClientIDSamlxaaRequestingApp
|
|
6
|
+
# ConnectionClientIDSamlxaaRequestingApp is an alias for ConnectionClientIDOidc
|
|
7
7
|
|
|
8
8
|
# @option str [String]
|
|
9
9
|
#
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Types
|
|
5
|
+
module ConnectionClientSecretSamlxaaRequestingApp
|
|
6
|
+
# ConnectionClientSecretSamlxaaRequestingApp is an alias for String
|
|
7
|
+
|
|
8
|
+
# @option str [String]
|
|
9
|
+
#
|
|
10
|
+
# @return [untyped]
|
|
11
|
+
def self.load(str)
|
|
12
|
+
::JSON.parse(str)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @option value [untyped]
|
|
16
|
+
#
|
|
17
|
+
# @return [String]
|
|
18
|
+
def self.dump(value)
|
|
19
|
+
::JSON.generate(value)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -28,6 +28,8 @@ module Auth0
|
|
|
28
28
|
|
|
29
29
|
field :mfa, -> { Auth0::Types::ConnectionMfa }, optional: true, nullable: false
|
|
30
30
|
|
|
31
|
+
field :otp_settings, -> { Auth0::Types::ConnectionOtpSettings }, optional: true, nullable: false
|
|
32
|
+
|
|
31
33
|
field :passkey_options, -> { Auth0::Types::ConnectionPasskeyOptions }, optional: true, nullable: false
|
|
32
34
|
|
|
33
35
|
field :password_policy, -> { Auth0::Types::ConnectionPasswordPolicyEnum }, optional: true, nullable: false, api_name: "passwordPolicy"
|
|
@@ -40,6 +40,10 @@ module Auth0
|
|
|
40
40
|
|
|
41
41
|
field :non_persistent_attrs, -> { Internal::Types::Array[String] }, optional: true, nullable: false
|
|
42
42
|
|
|
43
|
+
field :client_id, -> { String }, optional: true, nullable: false
|
|
44
|
+
|
|
45
|
+
field :client_secret, -> { String }, optional: true, nullable: false
|
|
46
|
+
|
|
43
47
|
field :debug, -> { Internal::Types::Boolean }, optional: true, nullable: false
|
|
44
48
|
|
|
45
49
|
field :deflate, -> { Internal::Types::Boolean }, optional: true, nullable: false
|
|
@@ -72,6 +76,12 @@ module Auth0
|
|
|
72
76
|
|
|
73
77
|
field :sign_out_endpoint, -> { String }, optional: true, nullable: false, api_name: "signOutEndpoint"
|
|
74
78
|
|
|
79
|
+
field :token_endpoint_auth_method, -> { Auth0::Types::ConnectionTokenEndpointAuthMethodEnum }, optional: true, nullable: false
|
|
80
|
+
|
|
81
|
+
field :token_endpoint_auth_signing_alg, -> { Auth0::Types::ConnectionTokenEndpointAuthSigningAlgEnum }, optional: true, nullable: false
|
|
82
|
+
|
|
83
|
+
field :token_endpoint_jwtca_aud_format, -> { Auth0::Types::ConnectionTokenEndpointJwtcaAudFormatEnumOidc }, optional: true, nullable: false
|
|
84
|
+
|
|
75
85
|
field :user_id_attribute, -> { String }, optional: true, nullable: false
|
|
76
86
|
end
|
|
77
87
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Types
|
|
5
|
+
# OTP settings for a delivery channel.
|
|
6
|
+
class ConnectionOtpChannelSettings < Internal::Types::Model
|
|
7
|
+
field :otp_length, -> { Integer }, optional: true, nullable: false
|
|
8
|
+
|
|
9
|
+
field :otp_expiry, -> { Integer }, optional: true, nullable: false
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Types
|
|
5
|
+
# One-time password settings, configurable per delivery channel.
|
|
6
|
+
class ConnectionOtpSettings < Internal::Types::Model
|
|
7
|
+
field :email, -> { Auth0::Types::ConnectionOtpChannelSettings }, optional: true, nullable: false
|
|
8
|
+
|
|
9
|
+
field :phone, -> { Auth0::Types::ConnectionOtpChannelSettings }, optional: true, nullable: false
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -22,6 +22,8 @@ module Auth0
|
|
|
22
22
|
|
|
23
23
|
field :custom_scripts, -> { Auth0::Types::ConnectionCustomScripts }, optional: true, nullable: false, api_name: "customScripts"
|
|
24
24
|
|
|
25
|
+
field :otp_settings, -> { Auth0::Types::ConnectionOtpSettings }, optional: true, nullable: false
|
|
26
|
+
|
|
25
27
|
field :authentication_methods, -> { Auth0::Types::ConnectionAuthenticationMethods }, optional: true, nullable: false
|
|
26
28
|
|
|
27
29
|
field :passkey_options, -> { Auth0::Types::ConnectionPasskeyOptions }, optional: true, nullable: false
|
|
@@ -24,6 +24,8 @@ module Auth0
|
|
|
24
24
|
|
|
25
25
|
field :strategy, -> { Auth0::Types::ConnectionResponseContentSAMLStrategy }, optional: false, nullable: false
|
|
26
26
|
|
|
27
|
+
field :cross_app_access_requesting_app, -> { Auth0::Types::CrossAppAccessRequestingApp }, optional: true, nullable: false
|
|
28
|
+
|
|
27
29
|
field :cross_app_access_resource_app, -> { Auth0::Types::ConnectionCrossAppAccessResourceApp }, optional: true, nullable: false
|
|
28
30
|
|
|
29
31
|
field :options, -> { Auth0::Types::ConnectionOptionsSAML }, optional: true, nullable: false
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Types
|
|
5
|
+
class ConsentSigningKey < Internal::Types::Model
|
|
6
|
+
field :kid, -> { String }, optional: false, nullable: false
|
|
7
|
+
|
|
8
|
+
field :device_identifier, -> { String }, optional: false, nullable: false
|
|
9
|
+
|
|
10
|
+
field :created_at, -> { String }, optional: false, nullable: false
|
|
11
|
+
|
|
12
|
+
field :expires_at, -> { String }, optional: false, nullable: false
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -127,6 +127,8 @@ module Auth0
|
|
|
127
127
|
|
|
128
128
|
field :third_party_security_mode, -> { Auth0::Types::ClientThirdPartySecurityModeEnum }, optional: true, nullable: false
|
|
129
129
|
|
|
130
|
+
field :oidc_support, -> { Auth0::Types::ClientOidcSupport }, optional: true, nullable: false
|
|
131
|
+
|
|
130
132
|
field :redirection_policy, -> { Auth0::Types::ClientRedirectionPolicyEnum }, optional: true, nullable: false
|
|
131
133
|
|
|
132
134
|
field :resource_server_identifier, -> { String }, optional: true, nullable: false
|
|
@@ -139,6 +141,8 @@ module Auth0
|
|
|
139
141
|
|
|
140
142
|
field :external_metadata_status, -> { Auth0::Types::ClientExternalMetadataStatusEnum }, optional: true, nullable: false
|
|
141
143
|
|
|
144
|
+
field :agent_id, -> { String }, optional: true, nullable: false
|
|
145
|
+
|
|
142
146
|
field :external_client_id, -> { String }, optional: true, nullable: false
|
|
143
147
|
|
|
144
148
|
field :jwks_uri, -> { String }, optional: true, nullable: false
|
|
@@ -16,6 +16,8 @@ module Auth0
|
|
|
16
16
|
|
|
17
17
|
field :strategy, -> { Auth0::Types::CreateConnectionRequestContentSAMLStrategy }, optional: false, nullable: false
|
|
18
18
|
|
|
19
|
+
field :cross_app_access_requesting_app, -> { Auth0::Types::CrossAppAccessRequestingApp }, optional: true, nullable: false
|
|
20
|
+
|
|
19
21
|
field :cross_app_access_resource_app, -> { Auth0::Types::ConnectionCrossAppAccessResourceApp }, optional: true, nullable: false
|
|
20
22
|
|
|
21
23
|
field :options, -> { Auth0::Types::ConnectionOptionsSAML }, optional: true, nullable: false
|
|
@@ -52,6 +52,10 @@ module Auth0
|
|
|
52
52
|
field :authorization_policy, -> { Auth0::Types::ResourceServerAuthorizationPolicy }, optional: true, nullable: false
|
|
53
53
|
|
|
54
54
|
field :client_id, -> { String }, optional: true, nullable: false
|
|
55
|
+
|
|
56
|
+
field :agent_subject_claims, -> { Auth0::Types::ResourceServerAgentSubjectClaimsResponseEnum }, optional: true, nullable: false
|
|
57
|
+
|
|
58
|
+
field :type, -> { Auth0::Types::ResourceServerTypeEnum }, optional: true, nullable: false
|
|
55
59
|
end
|
|
56
60
|
end
|
|
57
61
|
end
|
|
@@ -15,6 +15,8 @@ module Auth0
|
|
|
15
15
|
field :request, -> { Auth0::Types::EventStreamCloudEventContextRequest }, optional: true, nullable: false
|
|
16
16
|
|
|
17
17
|
field :tenant, -> { Auth0::Types::EventStreamCloudEventContextTenant }, optional: false, nullable: false
|
|
18
|
+
|
|
19
|
+
field :transaction, -> { Auth0::Types::EventStreamCloudEventContextTransaction }, optional: true, nullable: false
|
|
18
20
|
end
|
|
19
21
|
end
|
|
20
22
|
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Types
|
|
5
|
+
# An auth transaction.
|
|
6
|
+
class EventStreamCloudEventContextTransaction < Internal::Types::Model
|
|
7
|
+
field :acr_values, -> { Internal::Types::Array[String] }, optional: false, nullable: false
|
|
8
|
+
|
|
9
|
+
field :locale, -> { String }, optional: false, nullable: false
|
|
10
|
+
|
|
11
|
+
field :login_hint, -> { String }, optional: true, nullable: false
|
|
12
|
+
|
|
13
|
+
field :prompt, -> { Internal::Types::Array[String] }, optional: true, nullable: false
|
|
14
|
+
|
|
15
|
+
field :protocol, -> { Auth0::Types::EventStreamCloudEventContextTransactionProtocolEnum }, optional: true, nullable: false
|
|
16
|
+
|
|
17
|
+
field :redirect_uri, -> { String }, optional: true, nullable: false
|
|
18
|
+
|
|
19
|
+
field :requested_scopes, -> { Internal::Types::Array[String] }, optional: false, nullable: false
|
|
20
|
+
|
|
21
|
+
field :response_mode, -> { Auth0::Types::EventStreamCloudEventContextTransactionResponseModeEnum }, optional: true, nullable: false
|
|
22
|
+
|
|
23
|
+
field :response_type, -> { Internal::Types::Array[Auth0::Types::EventStreamCloudEventContextTransactionResponseTypeItemEnum] }, optional: true, nullable: false
|
|
24
|
+
|
|
25
|
+
field :state, -> { String }, optional: true, nullable: false
|
|
26
|
+
|
|
27
|
+
field :ui_locales, -> { Internal::Types::Array[String] }, optional: false, nullable: false
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Types
|
|
5
|
+
module EventStreamCloudEventContextTransactionProtocolEnum
|
|
6
|
+
extend Auth0::Internal::Types::Enum
|
|
7
|
+
|
|
8
|
+
OIDC_BASIC_PROFILE = "oidc-basic-profile"
|
|
9
|
+
OIDC_IMPLICIT_PROFILE = "oidc-implicit-profile"
|
|
10
|
+
OAUTH2DEVICE_CODE = "oauth2-device-code"
|
|
11
|
+
OAUTH2RESOURCE_OWNER = "oauth2-resource-owner"
|
|
12
|
+
OAUTH2RESOURCE_OWNER_JWT_BEARER = "oauth2-resource-owner-jwt-bearer"
|
|
13
|
+
OAUTH2PASSWORD = "oauth2-password"
|
|
14
|
+
OAUTH2WEBAUTHN = "oauth2-webauthn"
|
|
15
|
+
OAUTH2ACCESS_TOKEN = "oauth2-access-token"
|
|
16
|
+
OAUTH2REFRESH_TOKEN = "oauth2-refresh-token"
|
|
17
|
+
OAUTH2TOKEN_EXCHANGE = "oauth2-token-exchange"
|
|
18
|
+
OIDC_HYBRID_PROFILE = "oidc-hybrid-profile"
|
|
19
|
+
SAMLP = "samlp"
|
|
20
|
+
WSFED = "wsfed"
|
|
21
|
+
WSTRUST_USERNAMEMIXED = "wstrust-usernamemixed"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Auth0
|
|
4
|
+
module Types
|
|
5
|
+
module EventStreamCloudEventContextTransactionResponseModeEnum
|
|
6
|
+
extend Auth0::Internal::Types::Enum
|
|
7
|
+
|
|
8
|
+
QUERY = "query"
|
|
9
|
+
FRAGMENT = "fragment"
|
|
10
|
+
FORM_POST = "form_post"
|
|
11
|
+
WEB_MESSAGE = "web_message"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -11,9 +11,9 @@ module Auth0
|
|
|
11
11
|
|
|
12
12
|
field :mode, -> { Auth0::Types::BruteForceProtectionModeEnum }, optional: true, nullable: false
|
|
13
13
|
|
|
14
|
-
field :max_attempts, -> { Integer }, optional: true, nullable: false
|
|
15
|
-
|
|
16
14
|
field :form_submission_mode, -> { Auth0::Types::BruteForceProtectionFormSubmissionModeEnum }, optional: true, nullable: false
|
|
15
|
+
|
|
16
|
+
field :max_attempts, -> { Integer }, optional: true, nullable: false
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
end
|