zitadel-client 1.4.2 → 1.5.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 +17 -17
- data/lib/{zitadel-client → zitadel/client}/api/feature_service_api.rb +1 -3
- data/lib/{zitadel-client → zitadel/client}/api/identity_provider_service_api.rb +1 -3
- data/lib/{zitadel-client → zitadel/client}/api/o_i_d_c_service_api.rb +1 -3
- data/lib/{zitadel-client → zitadel/client}/api/organization_service_api.rb +1 -3
- data/lib/{zitadel-client → zitadel/client}/api/s_a_m_l_service_api.rb +1 -3
- data/lib/{zitadel-client → zitadel/client}/api/session_service_api.rb +1 -3
- data/lib/{zitadel-client → zitadel/client}/api/settings_api.rb +1 -3
- data/lib/{zitadel-client → zitadel/client}/api/settings_service_api.rb +1 -3
- data/lib/{zitadel-client → zitadel/client}/api/user_service_api.rb +1 -3
- data/lib/zitadel/client/api_client.rb +378 -0
- data/lib/zitadel/client/api_error.rb +31 -0
- data/lib/zitadel/client/auth/authenticator.rb +80 -0
- data/lib/zitadel/client/auth/client_credentials_authenticator.rb +65 -0
- data/lib/zitadel/client/auth/no_auth_authenticator.rb +35 -0
- data/lib/zitadel/client/auth/o_auth_authenticator.rb +99 -0
- data/lib/zitadel/client/auth/open_id.rb +54 -0
- data/lib/zitadel/client/auth/personal_access_token_authenticator.rb +37 -0
- data/lib/zitadel/client/auth/web_token_authenticator.rb +163 -0
- data/lib/zitadel/client/configuration.rb +180 -0
- data/lib/{zitadel-client → zitadel/client}/models/feature_service_details.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/feature_service_feature_flag.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/feature_service_get_instance_features_response.rb +4 -4
- data/lib/{zitadel-client/models/feature_service_reset_organization_features_response.rb → zitadel/client/models/feature_service_get_organization_features_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/feature_service_get_system_features_response.rb +4 -4
- data/lib/{zitadel-client/models/feature_service_set_system_features_response.rb → zitadel/client/models/feature_service_get_user_features_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/feature_service_improved_performance.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/feature_service_improved_performance_feature_flag.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/feature_service_login_v2.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/feature_service_login_v2_feature_flag.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/feature_service_protobuf_any.rb +4 -4
- data/lib/{zitadel-client/models/feature_service_set_organization_features_response.rb → zitadel/client/models/feature_service_reset_instance_features_response.rb} +5 -5
- data/lib/zitadel/client/models/feature_service_reset_organization_features_response.rb +230 -0
- data/lib/zitadel/client/models/feature_service_reset_system_features_response.rb +230 -0
- data/lib/{zitadel-client/models/feature_service_reset_system_features_response.rb → zitadel/client/models/feature_service_reset_user_features_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/feature_service_rpc_status.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/feature_service_set_instance_features_request.rb +4 -4
- data/lib/{zitadel-client/models/feature_service_reset_instance_features_response.rb → zitadel/client/models/feature_service_set_instance_features_response.rb} +5 -5
- data/lib/{zitadel-client/models/feature_service_get_organization_features_response.rb → zitadel/client/models/feature_service_set_organization_features_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/feature_service_set_system_features_request.rb +4 -4
- data/lib/{zitadel-client/models/feature_service_set_instance_features_response.rb → zitadel/client/models/feature_service_set_system_features_response.rb} +5 -5
- data/lib/{zitadel-client/models/feature_service_reset_user_features_response.rb → zitadel/client/models/feature_service_set_user_features_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/feature_service_source.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_apple_config.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_auto_linking_option.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_azure_a_d_config.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_azure_a_d_tenant.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_azure_a_d_tenant_type.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_details.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_generic_o_i_d_c_config.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_get_i_d_p_by_i_d_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_git_hub_config.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_git_hub_enterprise_server_config.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_git_lab_config.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_git_lab_self_hosted_config.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_google_config.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_i_d_p.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_i_d_p_config.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_i_d_p_state.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_i_d_p_type.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_j_w_t_config.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_l_d_a_p_attributes.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_l_d_a_p_config.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_o_auth_config.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_options.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_protobuf_any.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_rpc_status.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_s_a_m_l_binding.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_s_a_m_l_config.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_s_a_m_l_name_i_d_format.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_auth_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_authorization_error.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_authorize_or_deny_device_authorization_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_create_callback_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_create_callback_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_details.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_device_authorization_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_error_reason.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_get_auth_request_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_get_device_authorization_request_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_prompt.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_protobuf_any.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_rpc_status.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_session.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_add_human_user_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_add_organization_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_add_organization_request_admin.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_add_organization_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_add_organization_response_created_admin.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_details.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_gender.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_hashed_password.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_i_d_p_link.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_list_details.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_list_organizations_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_list_organizations_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_list_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_organization_domain_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_organization_field_name.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_organization_i_d_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_organization_name_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_organization_state.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_organization_state_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_password.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_protobuf_any.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_rpc_status.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_search_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_send_email_verification_code.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_set_human_email.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_set_human_phone.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_set_human_profile.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_set_metadata_entry.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/organization_service_text_query_method.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_authorization_error.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_create_response_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_create_response_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_details.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_error_reason.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_get_s_a_m_l_request_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_post_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_protobuf_any.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_rpc_status.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_s_a_m_l_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_session.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_challenges.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_challenges_web_auth_n.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_check_i_d_p_intent.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_check_o_t_p.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_check_password.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_check_t_o_t_p.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_check_user.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_check_web_auth_n.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_checks.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_create_session_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_create_session_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_creation_date_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_creator_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_delete_session_request.rb +4 -4
- data/lib/zitadel/client/models/session_service_delete_session_response.rb +230 -0
- data/lib/{zitadel-client → zitadel/client}/models/session_service_details.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_factors.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_get_session_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_i_ds_query.rb +4 -4
- data/lib/{zitadel-client/models/session_service_password_factor.rb → zitadel/client/models/session_service_intent_factor.rb} +6 -6
- data/lib/{zitadel-client → zitadel/client}/models/session_service_list_details.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_list_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_list_sessions_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_list_sessions_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_o_t_p_email_send_code.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_o_t_p_factor.rb +4 -4
- data/lib/{zitadel-client/models/session_service_t_o_t_p_factor.rb → zitadel/client/models/session_service_password_factor.rb} +6 -6
- data/lib/{zitadel-client → zitadel/client}/models/session_service_protobuf_any.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_request_challenges.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_request_challenges_o_t_p_email.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_request_challenges_o_t_p_s_m_s.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_request_challenges_web_auth_n.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_rpc_status.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_search_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_session.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_session_field_name.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/session_service_set_session_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_set_session_response.rb +4 -4
- data/lib/{zitadel-client/models/session_service_intent_factor.rb → zitadel/client/models/session_service_t_o_t_p_factor.rb} +6 -6
- data/lib/{zitadel-client → zitadel/client}/models/session_service_timestamp_query_method.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/session_service_user_agent.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_user_agent_header_values.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_user_agent_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_user_factor.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_user_i_d_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/session_service_user_verification_requirement.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/session_service_web_auth_n_factor.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_auto_linking_option.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_branding_settings.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_details.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_domain_settings.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_embedded_iframe_settings.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_get_active_identity_providers_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_get_branding_settings_response.rb +4 -4
- data/lib/{zitadel-client/models/settings_service_get_security_settings_response.rb → zitadel/client/models/settings_service_get_domain_settings_response.rb} +6 -6
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_get_general_settings_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_get_legal_and_support_settings_response.rb +4 -4
- data/lib/{zitadel-client/models/settings_service_get_login_settings_response.rb → zitadel/client/models/settings_service_get_lockout_settings_response.rb} +6 -6
- data/lib/{zitadel-client/models/settings_service_get_lockout_settings_response.rb → zitadel/client/models/settings_service_get_login_settings_response.rb} +6 -6
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_get_password_complexity_settings_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_get_password_expiry_settings_response.rb +4 -4
- data/lib/{zitadel-client/models/settings_service_get_domain_settings_response.rb → zitadel/client/models/settings_service_get_security_settings_response.rb} +6 -6
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_identity_provider.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_identity_provider_type.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_legal_and_support_settings.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_list_details.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_lockout_settings.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_login_settings.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_multi_factor_type.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_options.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_passkeys_type.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_password_complexity_settings.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_password_expiry_settings.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_protobuf_any.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_resource_owner_type.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_rpc_status.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_second_factor_type.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_security_settings.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_set_security_settings_request.rb +4 -4
- data/lib/{zitadel-client/models/user_service_verify_passkey_registration_response.rb → zitadel/client/models/settings_service_set_security_settings_response.rb} +6 -6
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_theme.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/settings_service_theme_mode.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/user_service_access_token_type.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/user_service_add_human_user_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_add_human_user_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_add_i_d_p_link_request.rb +4 -4
- data/lib/{zitadel-client/models/user_service_remove_o_t_p_s_m_s_response.rb → zitadel/client/models/user_service_add_i_d_p_link_response.rb} +5 -5
- data/lib/{zitadel-client/models/user_service_remove_i_d_p_link_response.rb → zitadel/client/models/user_service_add_o_t_p_email_response.rb} +5 -5
- data/lib/{zitadel-client/models/user_service_add_o_t_p_email_response.rb → zitadel/client/models/user_service_add_o_t_p_s_m_s_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/user_service_and_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_auth_factor.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_auth_factor_state.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/user_service_auth_factor_u2_f.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_authentication_method_type.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/user_service_create_invite_code_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_create_invite_code_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_create_passkey_registration_link_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_create_passkey_registration_link_response.rb +4 -4
- data/lib/{zitadel-client/models/user_service_resend_invite_code_response.rb → zitadel/client/models/user_service_deactivate_user_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/user_service_delete_user_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_details.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_display_name_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_email_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_first_name_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_gender.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/user_service_get_user_by_i_d_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_hashed_password.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_human_email.rb +4 -4
- data/lib/{zitadel-client/models/user_service_verify_u2_f_registration_response.rb → zitadel/client/models/user_service_human_m_f_a_init_skipped_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/user_service_human_phone.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_human_profile.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_human_user.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_i_d_p_information.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_i_d_p_intent.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_i_d_p_l_d_a_p_access_information.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_i_d_p_link.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_i_d_p_o_auth_access_information.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_i_d_p_s_a_m_l_access_information.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_in_user_emails_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_in_user_i_d_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_l_d_a_p_credentials.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_last_name_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_list_authentication_factors_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_list_authentication_method_types_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_list_details.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_list_i_d_p_links_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_list_i_d_p_links_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_list_passkeys_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_list_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_list_users_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_list_users_response.rb +4 -4
- data/lib/{zitadel-client/models/user_service_unlock_user_response.rb → zitadel/client/models/user_service_lock_user_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/user_service_login_name_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_machine_user.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_nick_name_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_not_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_notification_type.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/user_service_or_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_organization.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_organization_id_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_passkey.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_passkey_authenticator.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/user_service_passkey_registration_code.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_password.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_password_reset_request.rb +4 -4
- data/lib/{zitadel-client/models/user_service_resend_phone_code_response.rb → zitadel/client/models/user_service_password_reset_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/user_service_phone_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_protobuf_any.rb +4 -4
- data/lib/{zitadel-client/models/user_service_verify_invite_code_response.rb → zitadel/client/models/user_service_reactivate_user_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/user_service_redirect_u_r_ls.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_register_passkey_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_register_passkey_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_register_t_o_t_p_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_register_u2_f_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_register_u2_f_response.rb +4 -4
- data/lib/{zitadel-client/models/user_service_deactivate_user_response.rb → zitadel/client/models/user_service_remove_i_d_p_link_response.rb} +5 -5
- data/lib/{zitadel-client/models/session_service_delete_session_response.rb → zitadel/client/models/user_service_remove_o_t_p_email_response.rb} +6 -6
- data/lib/{zitadel-client/models/user_service_reactivate_user_response.rb → zitadel/client/models/user_service_remove_o_t_p_s_m_s_response.rb} +5 -5
- data/lib/{zitadel-client/models/user_service_add_o_t_p_s_m_s_response.rb → zitadel/client/models/user_service_remove_passkey_response.rb} +5 -5
- data/lib/{zitadel-client/models/user_service_remove_passkey_response.rb → zitadel/client/models/user_service_remove_phone_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/user_service_remove_t_o_t_p_response.rb +4 -4
- data/lib/{zitadel-client/models/user_service_remove_phone_response.rb → zitadel/client/models/user_service_remove_u2_f_response.rb} +5 -5
- data/lib/{zitadel-client/models/user_service_send_email_code_request.rb → zitadel/client/models/user_service_resend_email_code_request.rb} +5 -5
- data/lib/{zitadel-client/models/user_service_send_email_code_response.rb → zitadel/client/models/user_service_resend_email_code_response.rb} +5 -5
- data/lib/{zitadel-client/models/feature_service_get_user_features_response.rb → zitadel/client/models/user_service_resend_invite_code_response.rb} +6 -6
- data/lib/{zitadel-client → zitadel/client}/models/user_service_resend_phone_code_request.rb +4 -4
- data/lib/{zitadel-client/models/user_service_password_reset_response.rb → zitadel/client/models/user_service_resend_phone_code_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/user_service_retrieve_identity_provider_intent_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_retrieve_identity_provider_intent_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_rpc_status.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_search_query.rb +4 -4
- data/lib/{zitadel-client/models/user_service_resend_email_code_request.rb → zitadel/client/models/user_service_send_email_code_request.rb} +5 -5
- data/lib/{zitadel-client/models/user_service_resend_email_code_response.rb → zitadel/client/models/user_service_send_email_code_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/user_service_send_email_verification_code.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_send_invite_code.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_send_passkey_registration_link.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_send_password_reset_link.rb +4 -4
- data/lib/{zitadel-client/models/user_service_set_human_email.rb → zitadel/client/models/user_service_set_email_request.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/user_service_set_email_response.rb +4 -4
- data/lib/{zitadel-client/models/user_service_set_email_request.rb → zitadel/client/models/user_service_set_human_email.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/user_service_set_human_phone.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_set_human_profile.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_set_metadata_entry.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_set_password.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_set_password_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_set_password_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_set_phone_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_set_phone_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_start_identity_provider_intent_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_start_identity_provider_intent_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_state_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_text_query_method.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/user_service_type.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/user_service_type_query.rb +4 -4
- data/lib/{zitadel-client/models/user_service_add_i_d_p_link_response.rb → zitadel/client/models/user_service_unlock_user_response.rb} +5 -5
- data/lib/{zitadel-client → zitadel/client}/models/user_service_update_human_user_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_update_human_user_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_user.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_user_field_name.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/user_service_user_name_query.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_user_state.rb +2 -2
- data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_email_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_email_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_invite_code_request.rb +4 -4
- data/lib/{zitadel-client/models/feature_service_set_user_features_response.rb → zitadel/client/models/user_service_verify_invite_code_response.rb} +6 -6
- data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_passkey_registration_request.rb +4 -4
- data/lib/zitadel/client/models/user_service_verify_passkey_registration_response.rb +230 -0
- data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_phone_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_phone_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_t_o_t_p_registration_request.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_t_o_t_p_registration_response.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_u2_f_registration_request.rb +4 -4
- data/lib/{zitadel-client/models/settings_service_set_security_settings_response.rb → zitadel/client/models/user_service_verify_u2_f_registration_response.rb} +6 -6
- data/lib/{zitadel-client → zitadel/client}/models/zitadelobjectv2_organization.rb +4 -4
- data/lib/{zitadel-client → zitadel/client}/models/zitadelorgv2_organization.rb +4 -4
- data/lib/zitadel/client/utils/url_util.rb +25 -0
- data/lib/zitadel/client/version.rb +7 -0
- data/lib/zitadel/client/zitadel.rb +84 -0
- data/lib/zitadel/client/zitadel_error.rb +10 -0
- data/lib/zitadel_client.rb +20 -6
- data/sig/lib.rbs +186 -183
- metadata +346 -346
- data/lib/zitadel-client/api_client.rb +0 -376
- data/lib/zitadel-client/api_error.rb +0 -29
- data/lib/zitadel-client/auth/authenticator.rb +0 -78
- data/lib/zitadel-client/auth/client_credentials_authenticator.rb +0 -63
- data/lib/zitadel-client/auth/no_auth_authenticator.rb +0 -33
- data/lib/zitadel-client/auth/o_auth_authenticator.rb +0 -97
- data/lib/zitadel-client/auth/open_id.rb +0 -52
- data/lib/zitadel-client/auth/personal_access_token_authenticator.rb +0 -35
- data/lib/zitadel-client/auth/web_token_authenticator.rb +0 -161
- data/lib/zitadel-client/configuration.rb +0 -178
- data/lib/zitadel-client/models/user_service_human_m_f_a_init_skipped_response.rb +0 -230
- data/lib/zitadel-client/models/user_service_lock_user_response.rb +0 -230
- data/lib/zitadel-client/models/user_service_remove_o_t_p_email_response.rb +0 -230
- data/lib/zitadel-client/models/user_service_remove_u2_f_response.rb +0 -230
- data/lib/zitadel-client/utils/url_util.rb +0 -23
- data/lib/zitadel-client/version.rb +0 -5
- data/lib/zitadel-client/zitadel.rb +0 -82
- data/lib/zitadel-client/zitadel_error.rb +0 -8
- /data/lib/{zitadel-client → zitadel/client}/api/.openapi +0 -0
- /data/lib/{zitadel-client → zitadel/client}/models/.openapi +0 -0
@@ -0,0 +1,80 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
module Zitadel
|
6
|
+
module Client
|
7
|
+
module Auth
|
8
|
+
##
|
9
|
+
# Abstract base class for authenticators.
|
10
|
+
#
|
11
|
+
# This class defines the basic structure for any authenticator by requiring the implementation
|
12
|
+
# of a method to retrieve authentication headers, and provides a way to store and retrieve the host.
|
13
|
+
#
|
14
|
+
class Authenticator
|
15
|
+
protected
|
16
|
+
|
17
|
+
attr_reader :host
|
18
|
+
|
19
|
+
##
|
20
|
+
# Initializes the Authenticator with the specified host.
|
21
|
+
#
|
22
|
+
# @param host [String] the base URL or endpoint for the service.
|
23
|
+
#
|
24
|
+
def initialize(host)
|
25
|
+
@host = host
|
26
|
+
end
|
27
|
+
|
28
|
+
##
|
29
|
+
# Retrieves the authentication headers to be sent with requests.
|
30
|
+
#
|
31
|
+
# Subclasses must override this method to return the appropriate headers.
|
32
|
+
#
|
33
|
+
# @raise [NotImplementedError] Always raised to require implementation in a subclass.
|
34
|
+
#
|
35
|
+
# @return [Hash{String => String}]
|
36
|
+
#
|
37
|
+
def auth_headers
|
38
|
+
# :nocov:
|
39
|
+
raise NotImplementedError,
|
40
|
+
"#{self.class}#get_auth_headers is an abstract method. Please override it in a subclass."
|
41
|
+
# :nocov:
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
##
|
46
|
+
# Abstract builder class for constructing OAuth authenticator instances.
|
47
|
+
#
|
48
|
+
# This builder provides common configuration options such as the OpenId instance and authentication scopes.
|
49
|
+
#
|
50
|
+
class OAuthAuthenticatorBuilder
|
51
|
+
protected
|
52
|
+
|
53
|
+
attr_reader :open_id, :auth_scopes
|
54
|
+
|
55
|
+
##
|
56
|
+
# Initializes the OAuthAuthenticatorBuilder with a given host.
|
57
|
+
#
|
58
|
+
# @param host [String] the base URL for the OAuth provider.
|
59
|
+
#
|
60
|
+
def initialize(host)
|
61
|
+
@open_id = OpenId.new(host)
|
62
|
+
@auth_scopes = Set.new(%w[openid urn:zitadel:iam:org:project:id:zitadel:aud])
|
63
|
+
end
|
64
|
+
|
65
|
+
public
|
66
|
+
|
67
|
+
##
|
68
|
+
# Sets the authentication scopes for the OAuth authenticator.
|
69
|
+
#
|
70
|
+
# @param scopes [Array<String>] a variable number of scope strings.
|
71
|
+
# @return [self] the builder instance to allow for method chaining.
|
72
|
+
#
|
73
|
+
def scopes(*scopes)
|
74
|
+
@auth_scopes = Set.new(scopes)
|
75
|
+
self
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zitadel
|
4
|
+
module Client
|
5
|
+
module Auth
|
6
|
+
# ClientCredentialsAuthenticator implements the client credentials flow.
|
7
|
+
class ClientCredentialsAuthenticator < Auth::OAuthAuthenticator
|
8
|
+
# Constructs a ClientCredentialsAuthenticator using client credentials flow.
|
9
|
+
#
|
10
|
+
# @param open_id [OpenId] The OpenId instance with OAuth endpoint info.
|
11
|
+
# @param client_id [String] The OAuth client identifier.
|
12
|
+
# @param client_secret [String] The OAuth client secret.
|
13
|
+
# @param auth_scopes [Set<String>] The scope(s) for the token request.
|
14
|
+
def initialize(open_id, client_id, client_secret, auth_scopes)
|
15
|
+
# noinspection RubyArgCount
|
16
|
+
super(open_id, auth_scopes, OAuth2::Client.new(client_id, client_secret, {
|
17
|
+
site: open_id.host_endpoint,
|
18
|
+
token_url: open_id.token_endpoint
|
19
|
+
}))
|
20
|
+
end
|
21
|
+
|
22
|
+
# Returns a new builder for constructing a ClientCredentialsAuthenticator.
|
23
|
+
#
|
24
|
+
# @param host [String] The OAuth provider's base URL.
|
25
|
+
# @param client_id [String] The OAuth client identifier.
|
26
|
+
# @param client_secret [String] The OAuth client secret.
|
27
|
+
# @return [ClientCredentialsAuthenticatorBuilder] A builder instance.
|
28
|
+
def self.builder(host, client_id, client_secret)
|
29
|
+
ClientCredentialsAuthenticatorBuilder.new(host, client_id, client_secret)
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
# Overrides the base get_grant to return client credentials grant parameters.
|
35
|
+
|
36
|
+
# @return [OAuth2::AccessToken] A hash containing the grant type.
|
37
|
+
def get_grant(client, auth_scopes)
|
38
|
+
client.client_credentials.get_token({ scope: auth_scopes })
|
39
|
+
end
|
40
|
+
|
41
|
+
# Builder class for ClientCredentialsAuthenticator.
|
42
|
+
class ClientCredentialsAuthenticatorBuilder < OAuthAuthenticatorBuilder
|
43
|
+
# Initializes the builder with host, client ID, and client secret.
|
44
|
+
#
|
45
|
+
# @param host [String] The OAuth provider's base URL.
|
46
|
+
# @param client_id [String] The OAuth client identifier.
|
47
|
+
# @param client_secret [String] The OAuth client secret.
|
48
|
+
def initialize(host, client_id, client_secret)
|
49
|
+
# noinspection RubyArgCount
|
50
|
+
super(host)
|
51
|
+
@client_id = client_id
|
52
|
+
@client_secret = client_secret
|
53
|
+
end
|
54
|
+
|
55
|
+
# Constructs and returns a ClientCredentialsAuthenticator using the configured parameters.
|
56
|
+
#
|
57
|
+
# @return [ClientCredentialsAuthenticator] A configured instance.
|
58
|
+
def build
|
59
|
+
ClientCredentialsAuthenticator.new(open_id, @client_id, @client_secret, auth_scopes)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zitadel
|
4
|
+
module Client
|
5
|
+
module Auth
|
6
|
+
##
|
7
|
+
# A simple authenticator that performs no authentication.
|
8
|
+
#
|
9
|
+
# This authenticator is useful for cases where no token or credentials are required.
|
10
|
+
# It simply returns an empty dictionary for authentication headers.
|
11
|
+
#
|
12
|
+
class NoAuthAuthenticator < Authenticator
|
13
|
+
##
|
14
|
+
# Initializes the NoAuthAuthenticator with a default host.
|
15
|
+
#
|
16
|
+
# @param host [String] the base URL for the service. Defaults to "http://localhost".
|
17
|
+
#
|
18
|
+
def initialize(host = 'http://localhost')
|
19
|
+
super
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
##
|
25
|
+
# Returns an empty dictionary since no authentication is performed.
|
26
|
+
#
|
27
|
+
# @return [Hash{String => String}] an empty hash.
|
28
|
+
#
|
29
|
+
def auth_headers
|
30
|
+
{}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'time'
|
4
|
+
require 'oauth2'
|
5
|
+
|
6
|
+
OAuth2.configure do |config|
|
7
|
+
# noinspection RubyResolve
|
8
|
+
config.silence_extra_tokens_warning = true
|
9
|
+
end
|
10
|
+
|
11
|
+
module Zitadel
|
12
|
+
module Client
|
13
|
+
module Auth
|
14
|
+
##
|
15
|
+
# Base class for OAuth-based authentication using an OAuth2 client.
|
16
|
+
#
|
17
|
+
# Attributes:
|
18
|
+
# open_id: An object providing OAuth endpoint information.
|
19
|
+
# auth_session: An OAuth2Session instance used for fetching tokens.
|
20
|
+
#
|
21
|
+
class OAuthAuthenticator < Authenticator
|
22
|
+
protected
|
23
|
+
|
24
|
+
##
|
25
|
+
# Constructs an OAuthAuthenticator.
|
26
|
+
#
|
27
|
+
# @param open_id [OpenId] An object that must implement `get_host_endpoint` and `get_token_endpoint`.
|
28
|
+
# @param auth_session [OAuth2Session] The OAuth2Session instance used for token requests.
|
29
|
+
#
|
30
|
+
def initialize(open_id, auth_scopes, auth_session)
|
31
|
+
super(open_id.host_endpoint)
|
32
|
+
@open_id = open_id
|
33
|
+
@token = nil
|
34
|
+
@auth_session = auth_session
|
35
|
+
@auth_scopes = auth_scopes.to_a.join(' ')
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# Returns the current access token, refreshing it if necessary.
|
40
|
+
#
|
41
|
+
# @return [String] The current access token.
|
42
|
+
#
|
43
|
+
def auth_token
|
44
|
+
token = @token
|
45
|
+
if token.nil? || token.expired?
|
46
|
+
refresh_token
|
47
|
+
token = @token
|
48
|
+
end
|
49
|
+
|
50
|
+
raise 'Token is nil after refresh' if token.nil?
|
51
|
+
|
52
|
+
token.token
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# Retrieves authentication headers.
|
57
|
+
#
|
58
|
+
# @return [Hash{String => String}] A hash containing the 'Authorization' header.
|
59
|
+
#
|
60
|
+
def auth_headers
|
61
|
+
{ 'Authorization' => "Bearer #{auth_token}" }
|
62
|
+
end
|
63
|
+
|
64
|
+
##
|
65
|
+
# Builds and returns a hash of grant parameters required for the token request.
|
66
|
+
#
|
67
|
+
# The base class will invoke this method by passing its OAuth2 client.
|
68
|
+
# The subclass implementation should return the result of either:
|
69
|
+
# client.client_credentials.get_token(scope: scopes)
|
70
|
+
# or
|
71
|
+
# client.assertion.get_token(claims)
|
72
|
+
#
|
73
|
+
# @param auth_client [OAuth2::Client] The OAuth2 client instance.
|
74
|
+
# @param [String] auth_scopes
|
75
|
+
# @return [OAuth2::AccessToken] A hash of parameters used to fetch a token.
|
76
|
+
#
|
77
|
+
def get_grant(auth_client, auth_scopes)
|
78
|
+
# :nocov:
|
79
|
+
raise NotImplementedError, "#{self.class}#get_grant must be implemented"
|
80
|
+
# :nocov:
|
81
|
+
end
|
82
|
+
|
83
|
+
##
|
84
|
+
# Refreshes the access token using the OAuth flow.
|
85
|
+
#
|
86
|
+
# It uses `get_grant` to obtain all necessary parameters for the token request.
|
87
|
+
#
|
88
|
+
# @return [OAuth2::AccessToken] A new Token instance.
|
89
|
+
# @raise [RuntimeError] if the token refresh fails.
|
90
|
+
#
|
91
|
+
def refresh_token
|
92
|
+
@token = get_grant(@auth_session, @auth_scopes)
|
93
|
+
rescue StandardError => e
|
94
|
+
raise ZitadelError.new("Failed to refresh token: #{e.message}"), cause: e
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'uri'
|
5
|
+
require 'net/http'
|
6
|
+
|
7
|
+
module Zitadel
|
8
|
+
module Client
|
9
|
+
module Auth
|
10
|
+
##
|
11
|
+
# OpenId retrieves OpenID Connect configuration from a given host.
|
12
|
+
#
|
13
|
+
# It builds the well-known configuration URL from the provided hostname,
|
14
|
+
# fetches the configuration, and extracts the token endpoint.
|
15
|
+
#
|
16
|
+
class OpenId
|
17
|
+
attr_accessor :token_endpoint, :host_endpoint
|
18
|
+
|
19
|
+
##
|
20
|
+
# Initializes a new OpenId instance.
|
21
|
+
#
|
22
|
+
# @param hostname [String] the hostname for the OpenID provider.
|
23
|
+
# @raise [RuntimeError] if the OpenID configuration cannot be fetched or the token_endpoint is missing.
|
24
|
+
#
|
25
|
+
# noinspection HttpUrlsUsage
|
26
|
+
def initialize(hostname)
|
27
|
+
hostname = "https://#{hostname}" unless hostname.start_with?('http://', 'https://')
|
28
|
+
@host_endpoint = hostname
|
29
|
+
well_known_url = self.class.build_well_known_url(hostname)
|
30
|
+
|
31
|
+
uri = URI.parse(well_known_url)
|
32
|
+
response = Net::HTTP.get_response(uri)
|
33
|
+
raise "Failed to fetch OpenID configuration: HTTP #{response.code}" unless response.code.to_i == 200
|
34
|
+
|
35
|
+
config = JSON.parse(response.body)
|
36
|
+
token_endpoint = config['token_endpoint']
|
37
|
+
raise 'token_endpoint not found in OpenID configuration' unless token_endpoint
|
38
|
+
|
39
|
+
@token_endpoint = token_endpoint
|
40
|
+
end
|
41
|
+
|
42
|
+
##
|
43
|
+
# Builds the well-known OpenID configuration URL for the given hostname.
|
44
|
+
#
|
45
|
+
# @param hostname [String] the hostname for the OpenID provider.
|
46
|
+
# @return [String] the well-known configuration URL.
|
47
|
+
#
|
48
|
+
def self.build_well_known_url(hostname)
|
49
|
+
URI.join(hostname, '/.well-known/openid-configuration').to_s
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Zitadel
|
4
|
+
module Client
|
5
|
+
module Auth
|
6
|
+
##
|
7
|
+
# Personal Access Token Authenticator.
|
8
|
+
#
|
9
|
+
# Uses a static personal access token for API authentication.
|
10
|
+
#
|
11
|
+
class PersonalAccessTokenAuthenticator < Authenticator
|
12
|
+
##
|
13
|
+
# Initializes the PersonalAccessTokenAuthenticator with host and token.
|
14
|
+
#
|
15
|
+
# @param host [String] the base URL for the service.
|
16
|
+
# @param token [String] the personal access token.
|
17
|
+
#
|
18
|
+
def initialize(host, token)
|
19
|
+
# noinspection RubyArgCount
|
20
|
+
super(Utils::UrlUtil.build_hostname(host))
|
21
|
+
@token = token
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
##
|
27
|
+
# Returns the authentication headers using the personal access token.
|
28
|
+
#
|
29
|
+
# @return [Hash{String => String}] a hash containing the 'Authorization' header.
|
30
|
+
#
|
31
|
+
def auth_headers
|
32
|
+
{ 'Authorization' => "Bearer #{@token}" }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'time'
|
4
|
+
require 'openssl'
|
5
|
+
|
6
|
+
module Zitadel
|
7
|
+
module Client
|
8
|
+
module Auth
|
9
|
+
# -----------------------------------------------------------------------------
|
10
|
+
# WebTokenAuthenticator
|
11
|
+
# -----------------------------------------------------------------------------
|
12
|
+
|
13
|
+
# OAuth authenticator implementing the JWT bearer flow.
|
14
|
+
#
|
15
|
+
# This implementation builds a JWT assertion dynamically in get_grant().
|
16
|
+
class WebTokenAuthenticator < Auth::OAuthAuthenticator
|
17
|
+
# Constructs a WebTokenAuthenticator.
|
18
|
+
#
|
19
|
+
# @param open_id [OpenId] The OpenId instance with OAuth endpoint information.
|
20
|
+
# @param auth_scopes [Set<String>] The scope(s) for the token request.
|
21
|
+
# @param jwt_issuer [String] The JWT issuer.
|
22
|
+
# @param jwt_subject [String] The JWT subject.
|
23
|
+
# @param jwt_audience [String] The JWT audience.
|
24
|
+
# @param private_key [String] The private key used to sign the JWT.
|
25
|
+
# @param jwt_lifetime [Integer] Lifetime of the JWT in seconds (default 3600 seconds).
|
26
|
+
# @param jwt_algorithm [String] The JWT signing algorithm (default "RS256").
|
27
|
+
# @param key_id [String, nil] Optional key identifier for the JWT header (default: nil).
|
28
|
+
# rubocop:disable Metrics/ParameterLists,Metrics/MethodLength
|
29
|
+
def initialize(open_id, auth_scopes, jwt_issuer, jwt_subject, jwt_audience, private_key,
|
30
|
+
jwt_lifetime: 3600, jwt_algorithm: 'RS256', key_id: nil)
|
31
|
+
# noinspection RubyArgCount,RubyMismatchedArgumentType
|
32
|
+
super(open_id, auth_scopes, OAuth2::Client.new('zitadel', 'zitadel', {
|
33
|
+
site: open_id.host_endpoint,
|
34
|
+
token_url: open_id.token_endpoint
|
35
|
+
}))
|
36
|
+
@jwt_issuer = jwt_issuer
|
37
|
+
@jwt_subject = jwt_subject
|
38
|
+
@jwt_audience = jwt_audience
|
39
|
+
@private_key = private_key
|
40
|
+
@jwt_lifetime = jwt_lifetime
|
41
|
+
@jwt_algorithm = jwt_algorithm
|
42
|
+
@key_id = key_id
|
43
|
+
end
|
44
|
+
|
45
|
+
# rubocop:enable Metrics/ParameterLists,Metrics/MethodLength
|
46
|
+
|
47
|
+
# Creates a WebTokenAuthenticator instance from a JSON configuration file.
|
48
|
+
#
|
49
|
+
# The JSON file must be formatted as follows:
|
50
|
+
#
|
51
|
+
# {
|
52
|
+
# "type": "serviceaccount",
|
53
|
+
# "keyId": "<key-id>",
|
54
|
+
# "key": "<private-key>",
|
55
|
+
# "userId": "<user-id>"
|
56
|
+
# }
|
57
|
+
#
|
58
|
+
# @param host [String] Base URL for the API endpoints.
|
59
|
+
# @param json_path [String] File path to the JSON configuration file.
|
60
|
+
# @return [WebTokenAuthenticator] A new instance of WebTokenAuthenticator.
|
61
|
+
# @raise [RuntimeError] If the file cannot be read, the JSON is invalid, or required keys are missing.
|
62
|
+
def self.from_json(host, json_path)
|
63
|
+
config = JSON.parse(File.read(json_path))
|
64
|
+
rescue Errno::ENOENT => e
|
65
|
+
raise "Unable to read JSON file at #{json_path}: #{e.message}"
|
66
|
+
rescue JSON::ParserError => e
|
67
|
+
raise "Invalid JSON in file at #{json_path}: #{e.message}"
|
68
|
+
else
|
69
|
+
raise "Expected a JSON object, got #{config.class}" unless config.is_a?(Hash)
|
70
|
+
|
71
|
+
user_id, private_key, key_id = config.values_at('userId', 'key', 'keyId')
|
72
|
+
raise "Missing required keys 'userId', 'keyId' or 'key'" unless user_id && key_id && private_key
|
73
|
+
|
74
|
+
WebTokenAuthenticator.builder(host, user_id, private_key).key_identifier(key_id).build
|
75
|
+
end
|
76
|
+
|
77
|
+
# Returns a builder for constructing a WebTokenAuthenticator.
|
78
|
+
#
|
79
|
+
# @param host [String] The base URL for the OAuth provider.
|
80
|
+
# @param user_id [String] The user identifier (used as both the issuer and subject).
|
81
|
+
# @param private_key [String] The private key used to sign the JWT.
|
82
|
+
# @return [WebTokenAuthenticatorBuilder] A builder instance.
|
83
|
+
def self.builder(host, user_id, private_key)
|
84
|
+
WebTokenAuthenticatorBuilder.new(host, user_id, user_id, host, private_key)
|
85
|
+
end
|
86
|
+
|
87
|
+
protected
|
88
|
+
|
89
|
+
# Overrides the base get_grant to return client credentials grant parameters.
|
90
|
+
#
|
91
|
+
# @return [OAuth2::AccessToken] A hash containing the grant type.
|
92
|
+
# rubocop:disable Metrics/MethodLength
|
93
|
+
def get_grant(client, auth_scopes)
|
94
|
+
client.assertion.get_token(
|
95
|
+
{ iss: @jwt_issuer,
|
96
|
+
sub: @jwt_subject,
|
97
|
+
aud: @jwt_audience,
|
98
|
+
iat: Time.now.utc.to_i,
|
99
|
+
exp: (Time.now.utc + @jwt_lifetime).to_i },
|
100
|
+
{
|
101
|
+
algorithm: @jwt_algorithm,
|
102
|
+
key: OpenSSL::PKey::RSA.new(@private_key),
|
103
|
+
kid: @key_id
|
104
|
+
},
|
105
|
+
{
|
106
|
+
scope: auth_scopes
|
107
|
+
}
|
108
|
+
)
|
109
|
+
end
|
110
|
+
|
111
|
+
# rubocop:enable Metrics/MethodLength
|
112
|
+
|
113
|
+
# -----------------------------------------------------------------------------
|
114
|
+
# WebTokenAuthenticatorBuilder
|
115
|
+
# -----------------------------------------------------------------------------
|
116
|
+
|
117
|
+
# Builder for WebTokenAuthenticator.
|
118
|
+
#
|
119
|
+
# Provides a fluent API for configuring and constructing a WebTokenAuthenticator instance.
|
120
|
+
class WebTokenAuthenticatorBuilder < OAuthAuthenticatorBuilder
|
121
|
+
# Initializes the WebTokenAuthenticatorBuilder with required parameters.
|
122
|
+
#
|
123
|
+
# @param host [String] The base URL for API endpoints.
|
124
|
+
# @param jwt_issuer [String] The issuer claim for the JWT.
|
125
|
+
# @param jwt_subject [String] The subject claim for the JWT.
|
126
|
+
# @param jwt_audience [String] The audience claim for the JWT.
|
127
|
+
# @param private_key [String] The PEM-formatted private key used for signing the JWT.
|
128
|
+
def initialize(host, jwt_issuer, jwt_subject, jwt_audience, private_key)
|
129
|
+
# noinspection RubyArgCount
|
130
|
+
super(host)
|
131
|
+
@jwt_issuer = jwt_issuer
|
132
|
+
@jwt_subject = jwt_subject
|
133
|
+
@jwt_audience = jwt_audience
|
134
|
+
@private_key = private_key
|
135
|
+
@jwt_lifetime = 3600
|
136
|
+
end
|
137
|
+
|
138
|
+
# Sets the JWT token lifetime in seconds.
|
139
|
+
#
|
140
|
+
# @param seconds [Integer] Lifetime of the JWT in seconds.
|
141
|
+
# @return [WebTokenAuthenticatorBuilder] The builder instance.
|
142
|
+
def token_lifetime_seconds(seconds)
|
143
|
+
@jwt_lifetime = seconds
|
144
|
+
self
|
145
|
+
end
|
146
|
+
|
147
|
+
def key_identifier(key_id)
|
148
|
+
@key_id = key_id
|
149
|
+
self
|
150
|
+
end
|
151
|
+
|
152
|
+
# Constructs and returns a new WebTokenAuthenticator instance using the configured parameters.
|
153
|
+
#
|
154
|
+
# @return [WebTokenAuthenticator] A configured instance.
|
155
|
+
def build
|
156
|
+
WebTokenAuthenticator.new(open_id, auth_scopes, @jwt_issuer, @jwt_subject, @jwt_audience,
|
157
|
+
@private_key, jwt_lifetime: @jwt_lifetime, key_id: @key_id)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|