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.
Files changed (367) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -17
  3. data/lib/{zitadel-client → zitadel/client}/api/feature_service_api.rb +1 -3
  4. data/lib/{zitadel-client → zitadel/client}/api/identity_provider_service_api.rb +1 -3
  5. data/lib/{zitadel-client → zitadel/client}/api/o_i_d_c_service_api.rb +1 -3
  6. data/lib/{zitadel-client → zitadel/client}/api/organization_service_api.rb +1 -3
  7. data/lib/{zitadel-client → zitadel/client}/api/s_a_m_l_service_api.rb +1 -3
  8. data/lib/{zitadel-client → zitadel/client}/api/session_service_api.rb +1 -3
  9. data/lib/{zitadel-client → zitadel/client}/api/settings_api.rb +1 -3
  10. data/lib/{zitadel-client → zitadel/client}/api/settings_service_api.rb +1 -3
  11. data/lib/{zitadel-client → zitadel/client}/api/user_service_api.rb +1 -3
  12. data/lib/zitadel/client/api_client.rb +378 -0
  13. data/lib/zitadel/client/api_error.rb +31 -0
  14. data/lib/zitadel/client/auth/authenticator.rb +80 -0
  15. data/lib/zitadel/client/auth/client_credentials_authenticator.rb +65 -0
  16. data/lib/zitadel/client/auth/no_auth_authenticator.rb +35 -0
  17. data/lib/zitadel/client/auth/o_auth_authenticator.rb +99 -0
  18. data/lib/zitadel/client/auth/open_id.rb +54 -0
  19. data/lib/zitadel/client/auth/personal_access_token_authenticator.rb +37 -0
  20. data/lib/zitadel/client/auth/web_token_authenticator.rb +163 -0
  21. data/lib/zitadel/client/configuration.rb +180 -0
  22. data/lib/{zitadel-client → zitadel/client}/models/feature_service_details.rb +4 -4
  23. data/lib/{zitadel-client → zitadel/client}/models/feature_service_feature_flag.rb +4 -4
  24. data/lib/{zitadel-client → zitadel/client}/models/feature_service_get_instance_features_response.rb +4 -4
  25. data/lib/{zitadel-client/models/feature_service_reset_organization_features_response.rb → zitadel/client/models/feature_service_get_organization_features_response.rb} +5 -5
  26. data/lib/{zitadel-client → zitadel/client}/models/feature_service_get_system_features_response.rb +4 -4
  27. data/lib/{zitadel-client/models/feature_service_set_system_features_response.rb → zitadel/client/models/feature_service_get_user_features_response.rb} +5 -5
  28. data/lib/{zitadel-client → zitadel/client}/models/feature_service_improved_performance.rb +2 -2
  29. data/lib/{zitadel-client → zitadel/client}/models/feature_service_improved_performance_feature_flag.rb +4 -4
  30. data/lib/{zitadel-client → zitadel/client}/models/feature_service_login_v2.rb +4 -4
  31. data/lib/{zitadel-client → zitadel/client}/models/feature_service_login_v2_feature_flag.rb +4 -4
  32. data/lib/{zitadel-client → zitadel/client}/models/feature_service_protobuf_any.rb +4 -4
  33. data/lib/{zitadel-client/models/feature_service_set_organization_features_response.rb → zitadel/client/models/feature_service_reset_instance_features_response.rb} +5 -5
  34. data/lib/zitadel/client/models/feature_service_reset_organization_features_response.rb +230 -0
  35. data/lib/zitadel/client/models/feature_service_reset_system_features_response.rb +230 -0
  36. data/lib/{zitadel-client/models/feature_service_reset_system_features_response.rb → zitadel/client/models/feature_service_reset_user_features_response.rb} +5 -5
  37. data/lib/{zitadel-client → zitadel/client}/models/feature_service_rpc_status.rb +4 -4
  38. data/lib/{zitadel-client → zitadel/client}/models/feature_service_set_instance_features_request.rb +4 -4
  39. data/lib/{zitadel-client/models/feature_service_reset_instance_features_response.rb → zitadel/client/models/feature_service_set_instance_features_response.rb} +5 -5
  40. data/lib/{zitadel-client/models/feature_service_get_organization_features_response.rb → zitadel/client/models/feature_service_set_organization_features_response.rb} +5 -5
  41. data/lib/{zitadel-client → zitadel/client}/models/feature_service_set_system_features_request.rb +4 -4
  42. data/lib/{zitadel-client/models/feature_service_set_instance_features_response.rb → zitadel/client/models/feature_service_set_system_features_response.rb} +5 -5
  43. data/lib/{zitadel-client/models/feature_service_reset_user_features_response.rb → zitadel/client/models/feature_service_set_user_features_response.rb} +5 -5
  44. data/lib/{zitadel-client → zitadel/client}/models/feature_service_source.rb +2 -2
  45. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_apple_config.rb +4 -4
  46. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_auto_linking_option.rb +2 -2
  47. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_azure_a_d_config.rb +4 -4
  48. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_azure_a_d_tenant.rb +4 -4
  49. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_azure_a_d_tenant_type.rb +2 -2
  50. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_details.rb +4 -4
  51. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_generic_o_i_d_c_config.rb +4 -4
  52. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_get_i_d_p_by_i_d_response.rb +4 -4
  53. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_git_hub_config.rb +4 -4
  54. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_git_hub_enterprise_server_config.rb +4 -4
  55. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_git_lab_config.rb +4 -4
  56. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_git_lab_self_hosted_config.rb +4 -4
  57. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_google_config.rb +4 -4
  58. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_i_d_p.rb +4 -4
  59. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_i_d_p_config.rb +4 -4
  60. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_i_d_p_state.rb +2 -2
  61. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_i_d_p_type.rb +2 -2
  62. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_j_w_t_config.rb +4 -4
  63. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_l_d_a_p_attributes.rb +4 -4
  64. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_l_d_a_p_config.rb +4 -4
  65. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_o_auth_config.rb +4 -4
  66. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_options.rb +4 -4
  67. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_protobuf_any.rb +4 -4
  68. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_rpc_status.rb +4 -4
  69. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_s_a_m_l_binding.rb +2 -2
  70. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_s_a_m_l_config.rb +4 -4
  71. data/lib/{zitadel-client → zitadel/client}/models/identity_provider_service_s_a_m_l_name_i_d_format.rb +2 -2
  72. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_auth_request.rb +4 -4
  73. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_authorization_error.rb +4 -4
  74. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_authorize_or_deny_device_authorization_request.rb +4 -4
  75. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_create_callback_request.rb +4 -4
  76. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_create_callback_response.rb +4 -4
  77. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_details.rb +4 -4
  78. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_device_authorization_request.rb +4 -4
  79. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_error_reason.rb +2 -2
  80. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_get_auth_request_response.rb +4 -4
  81. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_get_device_authorization_request_response.rb +4 -4
  82. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_prompt.rb +2 -2
  83. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_protobuf_any.rb +4 -4
  84. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_rpc_status.rb +4 -4
  85. data/lib/{zitadel-client → zitadel/client}/models/o_i_d_c_service_session.rb +4 -4
  86. data/lib/{zitadel-client → zitadel/client}/models/organization_service_add_human_user_request.rb +4 -4
  87. data/lib/{zitadel-client → zitadel/client}/models/organization_service_add_organization_request.rb +4 -4
  88. data/lib/{zitadel-client → zitadel/client}/models/organization_service_add_organization_request_admin.rb +4 -4
  89. data/lib/{zitadel-client → zitadel/client}/models/organization_service_add_organization_response.rb +4 -4
  90. data/lib/{zitadel-client → zitadel/client}/models/organization_service_add_organization_response_created_admin.rb +4 -4
  91. data/lib/{zitadel-client → zitadel/client}/models/organization_service_details.rb +4 -4
  92. data/lib/{zitadel-client → zitadel/client}/models/organization_service_gender.rb +2 -2
  93. data/lib/{zitadel-client → zitadel/client}/models/organization_service_hashed_password.rb +4 -4
  94. data/lib/{zitadel-client → zitadel/client}/models/organization_service_i_d_p_link.rb +4 -4
  95. data/lib/{zitadel-client → zitadel/client}/models/organization_service_list_details.rb +4 -4
  96. data/lib/{zitadel-client → zitadel/client}/models/organization_service_list_organizations_request.rb +4 -4
  97. data/lib/{zitadel-client → zitadel/client}/models/organization_service_list_organizations_response.rb +4 -4
  98. data/lib/{zitadel-client → zitadel/client}/models/organization_service_list_query.rb +4 -4
  99. data/lib/{zitadel-client → zitadel/client}/models/organization_service_organization_domain_query.rb +4 -4
  100. data/lib/{zitadel-client → zitadel/client}/models/organization_service_organization_field_name.rb +2 -2
  101. data/lib/{zitadel-client → zitadel/client}/models/organization_service_organization_i_d_query.rb +4 -4
  102. data/lib/{zitadel-client → zitadel/client}/models/organization_service_organization_name_query.rb +4 -4
  103. data/lib/{zitadel-client → zitadel/client}/models/organization_service_organization_state.rb +2 -2
  104. data/lib/{zitadel-client → zitadel/client}/models/organization_service_organization_state_query.rb +4 -4
  105. data/lib/{zitadel-client → zitadel/client}/models/organization_service_password.rb +4 -4
  106. data/lib/{zitadel-client → zitadel/client}/models/organization_service_protobuf_any.rb +4 -4
  107. data/lib/{zitadel-client → zitadel/client}/models/organization_service_rpc_status.rb +4 -4
  108. data/lib/{zitadel-client → zitadel/client}/models/organization_service_search_query.rb +4 -4
  109. data/lib/{zitadel-client → zitadel/client}/models/organization_service_send_email_verification_code.rb +4 -4
  110. data/lib/{zitadel-client → zitadel/client}/models/organization_service_set_human_email.rb +4 -4
  111. data/lib/{zitadel-client → zitadel/client}/models/organization_service_set_human_phone.rb +4 -4
  112. data/lib/{zitadel-client → zitadel/client}/models/organization_service_set_human_profile.rb +4 -4
  113. data/lib/{zitadel-client → zitadel/client}/models/organization_service_set_metadata_entry.rb +4 -4
  114. data/lib/{zitadel-client → zitadel/client}/models/organization_service_text_query_method.rb +2 -2
  115. data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_authorization_error.rb +4 -4
  116. data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_create_response_request.rb +4 -4
  117. data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_create_response_response.rb +4 -4
  118. data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_details.rb +4 -4
  119. data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_error_reason.rb +2 -2
  120. data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_get_s_a_m_l_request_response.rb +4 -4
  121. data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_post_response.rb +4 -4
  122. data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_protobuf_any.rb +4 -4
  123. data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_rpc_status.rb +4 -4
  124. data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_s_a_m_l_request.rb +4 -4
  125. data/lib/{zitadel-client → zitadel/client}/models/s_a_m_l_service_session.rb +4 -4
  126. data/lib/{zitadel-client → zitadel/client}/models/session_service_challenges.rb +4 -4
  127. data/lib/{zitadel-client → zitadel/client}/models/session_service_challenges_web_auth_n.rb +4 -4
  128. data/lib/{zitadel-client → zitadel/client}/models/session_service_check_i_d_p_intent.rb +4 -4
  129. data/lib/{zitadel-client → zitadel/client}/models/session_service_check_o_t_p.rb +4 -4
  130. data/lib/{zitadel-client → zitadel/client}/models/session_service_check_password.rb +4 -4
  131. data/lib/{zitadel-client → zitadel/client}/models/session_service_check_t_o_t_p.rb +4 -4
  132. data/lib/{zitadel-client → zitadel/client}/models/session_service_check_user.rb +4 -4
  133. data/lib/{zitadel-client → zitadel/client}/models/session_service_check_web_auth_n.rb +4 -4
  134. data/lib/{zitadel-client → zitadel/client}/models/session_service_checks.rb +4 -4
  135. data/lib/{zitadel-client → zitadel/client}/models/session_service_create_session_request.rb +4 -4
  136. data/lib/{zitadel-client → zitadel/client}/models/session_service_create_session_response.rb +4 -4
  137. data/lib/{zitadel-client → zitadel/client}/models/session_service_creation_date_query.rb +4 -4
  138. data/lib/{zitadel-client → zitadel/client}/models/session_service_creator_query.rb +4 -4
  139. data/lib/{zitadel-client → zitadel/client}/models/session_service_delete_session_request.rb +4 -4
  140. data/lib/zitadel/client/models/session_service_delete_session_response.rb +230 -0
  141. data/lib/{zitadel-client → zitadel/client}/models/session_service_details.rb +4 -4
  142. data/lib/{zitadel-client → zitadel/client}/models/session_service_factors.rb +4 -4
  143. data/lib/{zitadel-client → zitadel/client}/models/session_service_get_session_response.rb +4 -4
  144. data/lib/{zitadel-client → zitadel/client}/models/session_service_i_ds_query.rb +4 -4
  145. data/lib/{zitadel-client/models/session_service_password_factor.rb → zitadel/client/models/session_service_intent_factor.rb} +6 -6
  146. data/lib/{zitadel-client → zitadel/client}/models/session_service_list_details.rb +4 -4
  147. data/lib/{zitadel-client → zitadel/client}/models/session_service_list_query.rb +4 -4
  148. data/lib/{zitadel-client → zitadel/client}/models/session_service_list_sessions_request.rb +4 -4
  149. data/lib/{zitadel-client → zitadel/client}/models/session_service_list_sessions_response.rb +4 -4
  150. data/lib/{zitadel-client → zitadel/client}/models/session_service_o_t_p_email_send_code.rb +4 -4
  151. data/lib/{zitadel-client → zitadel/client}/models/session_service_o_t_p_factor.rb +4 -4
  152. data/lib/{zitadel-client/models/session_service_t_o_t_p_factor.rb → zitadel/client/models/session_service_password_factor.rb} +6 -6
  153. data/lib/{zitadel-client → zitadel/client}/models/session_service_protobuf_any.rb +4 -4
  154. data/lib/{zitadel-client → zitadel/client}/models/session_service_request_challenges.rb +4 -4
  155. data/lib/{zitadel-client → zitadel/client}/models/session_service_request_challenges_o_t_p_email.rb +4 -4
  156. data/lib/{zitadel-client → zitadel/client}/models/session_service_request_challenges_o_t_p_s_m_s.rb +4 -4
  157. data/lib/{zitadel-client → zitadel/client}/models/session_service_request_challenges_web_auth_n.rb +4 -4
  158. data/lib/{zitadel-client → zitadel/client}/models/session_service_rpc_status.rb +4 -4
  159. data/lib/{zitadel-client → zitadel/client}/models/session_service_search_query.rb +4 -4
  160. data/lib/{zitadel-client → zitadel/client}/models/session_service_session.rb +4 -4
  161. data/lib/{zitadel-client → zitadel/client}/models/session_service_session_field_name.rb +2 -2
  162. data/lib/{zitadel-client → zitadel/client}/models/session_service_set_session_request.rb +4 -4
  163. data/lib/{zitadel-client → zitadel/client}/models/session_service_set_session_response.rb +4 -4
  164. data/lib/{zitadel-client/models/session_service_intent_factor.rb → zitadel/client/models/session_service_t_o_t_p_factor.rb} +6 -6
  165. data/lib/{zitadel-client → zitadel/client}/models/session_service_timestamp_query_method.rb +2 -2
  166. data/lib/{zitadel-client → zitadel/client}/models/session_service_user_agent.rb +4 -4
  167. data/lib/{zitadel-client → zitadel/client}/models/session_service_user_agent_header_values.rb +4 -4
  168. data/lib/{zitadel-client → zitadel/client}/models/session_service_user_agent_query.rb +4 -4
  169. data/lib/{zitadel-client → zitadel/client}/models/session_service_user_factor.rb +4 -4
  170. data/lib/{zitadel-client → zitadel/client}/models/session_service_user_i_d_query.rb +4 -4
  171. data/lib/{zitadel-client → zitadel/client}/models/session_service_user_verification_requirement.rb +2 -2
  172. data/lib/{zitadel-client → zitadel/client}/models/session_service_web_auth_n_factor.rb +4 -4
  173. data/lib/{zitadel-client → zitadel/client}/models/settings_service_auto_linking_option.rb +2 -2
  174. data/lib/{zitadel-client → zitadel/client}/models/settings_service_branding_settings.rb +4 -4
  175. data/lib/{zitadel-client → zitadel/client}/models/settings_service_details.rb +4 -4
  176. data/lib/{zitadel-client → zitadel/client}/models/settings_service_domain_settings.rb +4 -4
  177. data/lib/{zitadel-client → zitadel/client}/models/settings_service_embedded_iframe_settings.rb +4 -4
  178. data/lib/{zitadel-client → zitadel/client}/models/settings_service_get_active_identity_providers_response.rb +4 -4
  179. data/lib/{zitadel-client → zitadel/client}/models/settings_service_get_branding_settings_response.rb +4 -4
  180. data/lib/{zitadel-client/models/settings_service_get_security_settings_response.rb → zitadel/client/models/settings_service_get_domain_settings_response.rb} +6 -6
  181. data/lib/{zitadel-client → zitadel/client}/models/settings_service_get_general_settings_response.rb +4 -4
  182. data/lib/{zitadel-client → zitadel/client}/models/settings_service_get_legal_and_support_settings_response.rb +4 -4
  183. data/lib/{zitadel-client/models/settings_service_get_login_settings_response.rb → zitadel/client/models/settings_service_get_lockout_settings_response.rb} +6 -6
  184. data/lib/{zitadel-client/models/settings_service_get_lockout_settings_response.rb → zitadel/client/models/settings_service_get_login_settings_response.rb} +6 -6
  185. data/lib/{zitadel-client → zitadel/client}/models/settings_service_get_password_complexity_settings_response.rb +4 -4
  186. data/lib/{zitadel-client → zitadel/client}/models/settings_service_get_password_expiry_settings_response.rb +4 -4
  187. data/lib/{zitadel-client/models/settings_service_get_domain_settings_response.rb → zitadel/client/models/settings_service_get_security_settings_response.rb} +6 -6
  188. data/lib/{zitadel-client → zitadel/client}/models/settings_service_identity_provider.rb +4 -4
  189. data/lib/{zitadel-client → zitadel/client}/models/settings_service_identity_provider_type.rb +2 -2
  190. data/lib/{zitadel-client → zitadel/client}/models/settings_service_legal_and_support_settings.rb +4 -4
  191. data/lib/{zitadel-client → zitadel/client}/models/settings_service_list_details.rb +4 -4
  192. data/lib/{zitadel-client → zitadel/client}/models/settings_service_lockout_settings.rb +4 -4
  193. data/lib/{zitadel-client → zitadel/client}/models/settings_service_login_settings.rb +4 -4
  194. data/lib/{zitadel-client → zitadel/client}/models/settings_service_multi_factor_type.rb +2 -2
  195. data/lib/{zitadel-client → zitadel/client}/models/settings_service_options.rb +4 -4
  196. data/lib/{zitadel-client → zitadel/client}/models/settings_service_passkeys_type.rb +2 -2
  197. data/lib/{zitadel-client → zitadel/client}/models/settings_service_password_complexity_settings.rb +4 -4
  198. data/lib/{zitadel-client → zitadel/client}/models/settings_service_password_expiry_settings.rb +4 -4
  199. data/lib/{zitadel-client → zitadel/client}/models/settings_service_protobuf_any.rb +4 -4
  200. data/lib/{zitadel-client → zitadel/client}/models/settings_service_resource_owner_type.rb +2 -2
  201. data/lib/{zitadel-client → zitadel/client}/models/settings_service_rpc_status.rb +4 -4
  202. data/lib/{zitadel-client → zitadel/client}/models/settings_service_second_factor_type.rb +2 -2
  203. data/lib/{zitadel-client → zitadel/client}/models/settings_service_security_settings.rb +4 -4
  204. data/lib/{zitadel-client → zitadel/client}/models/settings_service_set_security_settings_request.rb +4 -4
  205. data/lib/{zitadel-client/models/user_service_verify_passkey_registration_response.rb → zitadel/client/models/settings_service_set_security_settings_response.rb} +6 -6
  206. data/lib/{zitadel-client → zitadel/client}/models/settings_service_theme.rb +4 -4
  207. data/lib/{zitadel-client → zitadel/client}/models/settings_service_theme_mode.rb +2 -2
  208. data/lib/{zitadel-client → zitadel/client}/models/user_service_access_token_type.rb +2 -2
  209. data/lib/{zitadel-client → zitadel/client}/models/user_service_add_human_user_request.rb +4 -4
  210. data/lib/{zitadel-client → zitadel/client}/models/user_service_add_human_user_response.rb +4 -4
  211. data/lib/{zitadel-client → zitadel/client}/models/user_service_add_i_d_p_link_request.rb +4 -4
  212. 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
  213. 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
  214. 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
  215. data/lib/{zitadel-client → zitadel/client}/models/user_service_and_query.rb +4 -4
  216. data/lib/{zitadel-client → zitadel/client}/models/user_service_auth_factor.rb +4 -4
  217. data/lib/{zitadel-client → zitadel/client}/models/user_service_auth_factor_state.rb +2 -2
  218. data/lib/{zitadel-client → zitadel/client}/models/user_service_auth_factor_u2_f.rb +4 -4
  219. data/lib/{zitadel-client → zitadel/client}/models/user_service_authentication_method_type.rb +2 -2
  220. data/lib/{zitadel-client → zitadel/client}/models/user_service_create_invite_code_request.rb +4 -4
  221. data/lib/{zitadel-client → zitadel/client}/models/user_service_create_invite_code_response.rb +4 -4
  222. data/lib/{zitadel-client → zitadel/client}/models/user_service_create_passkey_registration_link_request.rb +4 -4
  223. data/lib/{zitadel-client → zitadel/client}/models/user_service_create_passkey_registration_link_response.rb +4 -4
  224. data/lib/{zitadel-client/models/user_service_resend_invite_code_response.rb → zitadel/client/models/user_service_deactivate_user_response.rb} +5 -5
  225. data/lib/{zitadel-client → zitadel/client}/models/user_service_delete_user_response.rb +4 -4
  226. data/lib/{zitadel-client → zitadel/client}/models/user_service_details.rb +4 -4
  227. data/lib/{zitadel-client → zitadel/client}/models/user_service_display_name_query.rb +4 -4
  228. data/lib/{zitadel-client → zitadel/client}/models/user_service_email_query.rb +4 -4
  229. data/lib/{zitadel-client → zitadel/client}/models/user_service_first_name_query.rb +4 -4
  230. data/lib/{zitadel-client → zitadel/client}/models/user_service_gender.rb +2 -2
  231. data/lib/{zitadel-client → zitadel/client}/models/user_service_get_user_by_i_d_response.rb +4 -4
  232. data/lib/{zitadel-client → zitadel/client}/models/user_service_hashed_password.rb +4 -4
  233. data/lib/{zitadel-client → zitadel/client}/models/user_service_human_email.rb +4 -4
  234. 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
  235. data/lib/{zitadel-client → zitadel/client}/models/user_service_human_phone.rb +4 -4
  236. data/lib/{zitadel-client → zitadel/client}/models/user_service_human_profile.rb +4 -4
  237. data/lib/{zitadel-client → zitadel/client}/models/user_service_human_user.rb +4 -4
  238. data/lib/{zitadel-client → zitadel/client}/models/user_service_i_d_p_information.rb +4 -4
  239. data/lib/{zitadel-client → zitadel/client}/models/user_service_i_d_p_intent.rb +4 -4
  240. data/lib/{zitadel-client → zitadel/client}/models/user_service_i_d_p_l_d_a_p_access_information.rb +4 -4
  241. data/lib/{zitadel-client → zitadel/client}/models/user_service_i_d_p_link.rb +4 -4
  242. data/lib/{zitadel-client → zitadel/client}/models/user_service_i_d_p_o_auth_access_information.rb +4 -4
  243. data/lib/{zitadel-client → zitadel/client}/models/user_service_i_d_p_s_a_m_l_access_information.rb +4 -4
  244. data/lib/{zitadel-client → zitadel/client}/models/user_service_in_user_emails_query.rb +4 -4
  245. data/lib/{zitadel-client → zitadel/client}/models/user_service_in_user_i_d_query.rb +4 -4
  246. data/lib/{zitadel-client → zitadel/client}/models/user_service_l_d_a_p_credentials.rb +4 -4
  247. data/lib/{zitadel-client → zitadel/client}/models/user_service_last_name_query.rb +4 -4
  248. data/lib/{zitadel-client → zitadel/client}/models/user_service_list_authentication_factors_response.rb +4 -4
  249. data/lib/{zitadel-client → zitadel/client}/models/user_service_list_authentication_method_types_response.rb +4 -4
  250. data/lib/{zitadel-client → zitadel/client}/models/user_service_list_details.rb +4 -4
  251. data/lib/{zitadel-client → zitadel/client}/models/user_service_list_i_d_p_links_request.rb +4 -4
  252. data/lib/{zitadel-client → zitadel/client}/models/user_service_list_i_d_p_links_response.rb +4 -4
  253. data/lib/{zitadel-client → zitadel/client}/models/user_service_list_passkeys_response.rb +4 -4
  254. data/lib/{zitadel-client → zitadel/client}/models/user_service_list_query.rb +4 -4
  255. data/lib/{zitadel-client → zitadel/client}/models/user_service_list_users_request.rb +4 -4
  256. data/lib/{zitadel-client → zitadel/client}/models/user_service_list_users_response.rb +4 -4
  257. data/lib/{zitadel-client/models/user_service_unlock_user_response.rb → zitadel/client/models/user_service_lock_user_response.rb} +5 -5
  258. data/lib/{zitadel-client → zitadel/client}/models/user_service_login_name_query.rb +4 -4
  259. data/lib/{zitadel-client → zitadel/client}/models/user_service_machine_user.rb +4 -4
  260. data/lib/{zitadel-client → zitadel/client}/models/user_service_nick_name_query.rb +4 -4
  261. data/lib/{zitadel-client → zitadel/client}/models/user_service_not_query.rb +4 -4
  262. data/lib/{zitadel-client → zitadel/client}/models/user_service_notification_type.rb +2 -2
  263. data/lib/{zitadel-client → zitadel/client}/models/user_service_or_query.rb +4 -4
  264. data/lib/{zitadel-client → zitadel/client}/models/user_service_organization.rb +4 -4
  265. data/lib/{zitadel-client → zitadel/client}/models/user_service_organization_id_query.rb +4 -4
  266. data/lib/{zitadel-client → zitadel/client}/models/user_service_passkey.rb +4 -4
  267. data/lib/{zitadel-client → zitadel/client}/models/user_service_passkey_authenticator.rb +2 -2
  268. data/lib/{zitadel-client → zitadel/client}/models/user_service_passkey_registration_code.rb +4 -4
  269. data/lib/{zitadel-client → zitadel/client}/models/user_service_password.rb +4 -4
  270. data/lib/{zitadel-client → zitadel/client}/models/user_service_password_reset_request.rb +4 -4
  271. data/lib/{zitadel-client/models/user_service_resend_phone_code_response.rb → zitadel/client/models/user_service_password_reset_response.rb} +5 -5
  272. data/lib/{zitadel-client → zitadel/client}/models/user_service_phone_query.rb +4 -4
  273. data/lib/{zitadel-client → zitadel/client}/models/user_service_protobuf_any.rb +4 -4
  274. data/lib/{zitadel-client/models/user_service_verify_invite_code_response.rb → zitadel/client/models/user_service_reactivate_user_response.rb} +5 -5
  275. data/lib/{zitadel-client → zitadel/client}/models/user_service_redirect_u_r_ls.rb +4 -4
  276. data/lib/{zitadel-client → zitadel/client}/models/user_service_register_passkey_request.rb +4 -4
  277. data/lib/{zitadel-client → zitadel/client}/models/user_service_register_passkey_response.rb +4 -4
  278. data/lib/{zitadel-client → zitadel/client}/models/user_service_register_t_o_t_p_response.rb +4 -4
  279. data/lib/{zitadel-client → zitadel/client}/models/user_service_register_u2_f_request.rb +4 -4
  280. data/lib/{zitadel-client → zitadel/client}/models/user_service_register_u2_f_response.rb +4 -4
  281. 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
  282. 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
  283. 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
  284. 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
  285. data/lib/{zitadel-client/models/user_service_remove_passkey_response.rb → zitadel/client/models/user_service_remove_phone_response.rb} +5 -5
  286. data/lib/{zitadel-client → zitadel/client}/models/user_service_remove_t_o_t_p_response.rb +4 -4
  287. data/lib/{zitadel-client/models/user_service_remove_phone_response.rb → zitadel/client/models/user_service_remove_u2_f_response.rb} +5 -5
  288. data/lib/{zitadel-client/models/user_service_send_email_code_request.rb → zitadel/client/models/user_service_resend_email_code_request.rb} +5 -5
  289. data/lib/{zitadel-client/models/user_service_send_email_code_response.rb → zitadel/client/models/user_service_resend_email_code_response.rb} +5 -5
  290. data/lib/{zitadel-client/models/feature_service_get_user_features_response.rb → zitadel/client/models/user_service_resend_invite_code_response.rb} +6 -6
  291. data/lib/{zitadel-client → zitadel/client}/models/user_service_resend_phone_code_request.rb +4 -4
  292. data/lib/{zitadel-client/models/user_service_password_reset_response.rb → zitadel/client/models/user_service_resend_phone_code_response.rb} +5 -5
  293. data/lib/{zitadel-client → zitadel/client}/models/user_service_retrieve_identity_provider_intent_request.rb +4 -4
  294. data/lib/{zitadel-client → zitadel/client}/models/user_service_retrieve_identity_provider_intent_response.rb +4 -4
  295. data/lib/{zitadel-client → zitadel/client}/models/user_service_rpc_status.rb +4 -4
  296. data/lib/{zitadel-client → zitadel/client}/models/user_service_search_query.rb +4 -4
  297. data/lib/{zitadel-client/models/user_service_resend_email_code_request.rb → zitadel/client/models/user_service_send_email_code_request.rb} +5 -5
  298. data/lib/{zitadel-client/models/user_service_resend_email_code_response.rb → zitadel/client/models/user_service_send_email_code_response.rb} +5 -5
  299. data/lib/{zitadel-client → zitadel/client}/models/user_service_send_email_verification_code.rb +4 -4
  300. data/lib/{zitadel-client → zitadel/client}/models/user_service_send_invite_code.rb +4 -4
  301. data/lib/{zitadel-client → zitadel/client}/models/user_service_send_passkey_registration_link.rb +4 -4
  302. data/lib/{zitadel-client → zitadel/client}/models/user_service_send_password_reset_link.rb +4 -4
  303. data/lib/{zitadel-client/models/user_service_set_human_email.rb → zitadel/client/models/user_service_set_email_request.rb} +5 -5
  304. data/lib/{zitadel-client → zitadel/client}/models/user_service_set_email_response.rb +4 -4
  305. data/lib/{zitadel-client/models/user_service_set_email_request.rb → zitadel/client/models/user_service_set_human_email.rb} +5 -5
  306. data/lib/{zitadel-client → zitadel/client}/models/user_service_set_human_phone.rb +4 -4
  307. data/lib/{zitadel-client → zitadel/client}/models/user_service_set_human_profile.rb +4 -4
  308. data/lib/{zitadel-client → zitadel/client}/models/user_service_set_metadata_entry.rb +4 -4
  309. data/lib/{zitadel-client → zitadel/client}/models/user_service_set_password.rb +4 -4
  310. data/lib/{zitadel-client → zitadel/client}/models/user_service_set_password_request.rb +4 -4
  311. data/lib/{zitadel-client → zitadel/client}/models/user_service_set_password_response.rb +4 -4
  312. data/lib/{zitadel-client → zitadel/client}/models/user_service_set_phone_request.rb +4 -4
  313. data/lib/{zitadel-client → zitadel/client}/models/user_service_set_phone_response.rb +4 -4
  314. data/lib/{zitadel-client → zitadel/client}/models/user_service_start_identity_provider_intent_request.rb +4 -4
  315. data/lib/{zitadel-client → zitadel/client}/models/user_service_start_identity_provider_intent_response.rb +4 -4
  316. data/lib/{zitadel-client → zitadel/client}/models/user_service_state_query.rb +4 -4
  317. data/lib/{zitadel-client → zitadel/client}/models/user_service_text_query_method.rb +2 -2
  318. data/lib/{zitadel-client → zitadel/client}/models/user_service_type.rb +2 -2
  319. data/lib/{zitadel-client → zitadel/client}/models/user_service_type_query.rb +4 -4
  320. 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
  321. data/lib/{zitadel-client → zitadel/client}/models/user_service_update_human_user_request.rb +4 -4
  322. data/lib/{zitadel-client → zitadel/client}/models/user_service_update_human_user_response.rb +4 -4
  323. data/lib/{zitadel-client → zitadel/client}/models/user_service_user.rb +4 -4
  324. data/lib/{zitadel-client → zitadel/client}/models/user_service_user_field_name.rb +2 -2
  325. data/lib/{zitadel-client → zitadel/client}/models/user_service_user_name_query.rb +4 -4
  326. data/lib/{zitadel-client → zitadel/client}/models/user_service_user_state.rb +2 -2
  327. data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_email_request.rb +4 -4
  328. data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_email_response.rb +4 -4
  329. data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_invite_code_request.rb +4 -4
  330. data/lib/{zitadel-client/models/feature_service_set_user_features_response.rb → zitadel/client/models/user_service_verify_invite_code_response.rb} +6 -6
  331. data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_passkey_registration_request.rb +4 -4
  332. data/lib/zitadel/client/models/user_service_verify_passkey_registration_response.rb +230 -0
  333. data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_phone_request.rb +4 -4
  334. data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_phone_response.rb +4 -4
  335. data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_t_o_t_p_registration_request.rb +4 -4
  336. data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_t_o_t_p_registration_response.rb +4 -4
  337. data/lib/{zitadel-client → zitadel/client}/models/user_service_verify_u2_f_registration_request.rb +4 -4
  338. 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
  339. data/lib/{zitadel-client → zitadel/client}/models/zitadelobjectv2_organization.rb +4 -4
  340. data/lib/{zitadel-client → zitadel/client}/models/zitadelorgv2_organization.rb +4 -4
  341. data/lib/zitadel/client/utils/url_util.rb +25 -0
  342. data/lib/zitadel/client/version.rb +7 -0
  343. data/lib/zitadel/client/zitadel.rb +84 -0
  344. data/lib/zitadel/client/zitadel_error.rb +10 -0
  345. data/lib/zitadel_client.rb +20 -6
  346. data/sig/lib.rbs +186 -183
  347. metadata +346 -346
  348. data/lib/zitadel-client/api_client.rb +0 -376
  349. data/lib/zitadel-client/api_error.rb +0 -29
  350. data/lib/zitadel-client/auth/authenticator.rb +0 -78
  351. data/lib/zitadel-client/auth/client_credentials_authenticator.rb +0 -63
  352. data/lib/zitadel-client/auth/no_auth_authenticator.rb +0 -33
  353. data/lib/zitadel-client/auth/o_auth_authenticator.rb +0 -97
  354. data/lib/zitadel-client/auth/open_id.rb +0 -52
  355. data/lib/zitadel-client/auth/personal_access_token_authenticator.rb +0 -35
  356. data/lib/zitadel-client/auth/web_token_authenticator.rb +0 -161
  357. data/lib/zitadel-client/configuration.rb +0 -178
  358. data/lib/zitadel-client/models/user_service_human_m_f_a_init_skipped_response.rb +0 -230
  359. data/lib/zitadel-client/models/user_service_lock_user_response.rb +0 -230
  360. data/lib/zitadel-client/models/user_service_remove_o_t_p_email_response.rb +0 -230
  361. data/lib/zitadel-client/models/user_service_remove_u2_f_response.rb +0 -230
  362. data/lib/zitadel-client/utils/url_util.rb +0 -23
  363. data/lib/zitadel-client/version.rb +0 -5
  364. data/lib/zitadel-client/zitadel.rb +0 -82
  365. data/lib/zitadel-client/zitadel_error.rb +0 -8
  366. /data/lib/{zitadel-client → zitadel/client}/api/.openapi +0 -0
  367. /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