workos 8.0.0 → 9.0.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/.github/workflows/ci.yml +1 -1
- data/.github/workflows/docs.yml +5 -2
- data/.github/workflows/lint.yml +1 -1
- data/.github/workflows/release-please.yml +176 -5
- data/.github/workflows/release.yml +1 -1
- data/.last-synced-sha +1 -1
- data/.oagen-manifest.json +129 -34
- data/.release-please-manifest.json +1 -1
- data/CHANGELOG.md +66 -0
- data/Gemfile.lock +4 -4
- data/README.md +19 -0
- data/docs/V7_MIGRATION_GUIDE.md +21 -0
- data/lib/workos/actions.rb +1 -1
- data/lib/workos/api_keys/api_key.rb +3 -0
- data/lib/workos/api_keys/api_key_created.rb +5 -5
- data/lib/workos/api_keys/api_key_created_data.rb +3 -0
- data/lib/workos/api_keys/api_key_revoked.rb +5 -5
- data/lib/workos/api_keys/create_organization_api_key.rb +5 -2
- data/lib/workos/api_keys/organization_api_key.rb +3 -0
- data/lib/workos/api_keys/organization_api_key_with_value.rb +3 -0
- data/lib/workos/api_keys.rb +4 -1
- data/lib/workos/audit_logs/audit_log_action.rb +2 -7
- data/lib/workos/audit_logs/audit_log_export.rb +2 -7
- data/lib/workos/audit_logs/audit_log_schema.rb +11 -2
- data/lib/workos/audit_logs/{audit_log_schema_json_actor.rb → audit_log_schema_actor_input.rb} +1 -1
- data/lib/workos/audit_logs/audit_log_schema_input.rb +25 -0
- data/lib/workos/audit_logs/audit_log_schema_target.rb +16 -1
- data/lib/workos/{types/radar_type.rb → audit_logs/audit_log_schema_target_input.rb} +1 -3
- data/lib/workos/audit_logs.rb +16 -16
- data/lib/workos/authorization/permission_created.rb +5 -5
- data/lib/workos/authorization/permission_deleted.rb +5 -5
- data/lib/workos/authorization/permission_updated.rb +5 -5
- data/lib/workos/authorization/role_created.rb +5 -5
- data/lib/workos/authorization/role_deleted.rb +5 -5
- data/lib/workos/authorization/role_updated.rb +5 -5
- data/lib/workos/authorization.rb +28 -12
- data/lib/workos/base_client.rb +71 -5
- data/lib/workos/client.rb +6 -6
- data/lib/workos/connect/connect_application.rb +12 -0
- data/lib/workos/{audit_logs/audit_log_schema_json_target.rb → connect/connect_application_redirect_uri.rb} +7 -7
- data/lib/workos/directory_sync/dsync_activated.rb +5 -5
- data/lib/workos/directory_sync/dsync_deactivated.rb +5 -5
- data/lib/workos/directory_sync/dsync_deleted.rb +5 -5
- data/lib/workos/directory_sync/dsync_group_created.rb +5 -5
- data/lib/workos/directory_sync/dsync_group_deleted.rb +5 -5
- data/lib/workos/directory_sync/dsync_group_updated.rb +5 -5
- data/lib/workos/directory_sync/dsync_group_user_added.rb +5 -5
- data/lib/workos/directory_sync/dsync_group_user_removed.rb +5 -5
- data/lib/workos/directory_sync/dsync_user_created.rb +5 -5
- data/lib/workos/directory_sync/dsync_user_deleted.rb +5 -5
- data/lib/workos/directory_sync/dsync_user_updated.rb +5 -5
- data/lib/workos/encryptors/aes_gcm.rb +19 -5
- data/lib/workos/feature_flags/flag_created.rb +5 -5
- data/lib/workos/feature_flags/flag_deleted.rb +5 -5
- data/lib/workos/feature_flags/flag_rule_updated.rb +5 -5
- data/lib/workos/feature_flags/flag_rule_updated_context_configured_target_organization.rb +1 -16
- data/lib/workos/feature_flags/flag_rule_updated_context_previous_attribute_context_configured_target_organization.rb +1 -1
- data/lib/workos/feature_flags/flag_updated.rb +5 -5
- data/lib/workos/inflections.rb +4 -1
- data/lib/workos/organization_domains/organization_domain_created.rb +5 -5
- data/lib/workos/organization_domains/organization_domain_deleted.rb +5 -5
- data/lib/workos/organization_domains/organization_domain_updated.rb +5 -5
- data/lib/workos/organization_domains/organization_domain_verification_failed.rb +5 -5
- data/lib/workos/organization_domains/organization_domain_verified.rb +5 -5
- data/lib/workos/organization_membership_service.rb +273 -0
- data/lib/workos/organizations/audit_logs_retention.rb +2 -7
- data/lib/workos/organizations/organization_created.rb +5 -5
- data/lib/workos/organizations/organization_deleted.rb +5 -5
- data/lib/workos/organizations/organization_membership_created.rb +5 -5
- data/lib/workos/organizations/organization_membership_deleted.rb +5 -5
- data/lib/workos/organizations/organization_membership_updated.rb +5 -5
- data/lib/workos/organizations/organization_role_created.rb +5 -5
- data/lib/workos/organizations/organization_role_deleted.rb +5 -5
- data/lib/workos/organizations/organization_role_updated.rb +5 -5
- data/lib/workos/organizations/organization_updated.rb +5 -5
- data/lib/workos/radar/radar_standalone_assess_request.rb +2 -8
- data/lib/workos/radar.rb +6 -12
- data/lib/workos/session.rb +28 -7
- data/lib/workos/session_manager.rb +24 -1
- data/lib/workos/shared/connect_application_m2m.rb +46 -0
- data/lib/workos/shared/connect_application_oauth.rb +58 -0
- data/lib/workos/shared/connect_application_oauth_redirect_uris.rb +22 -0
- data/lib/workos/shared/error_response.rb +18 -0
- data/lib/workos/shared/group_created.rb +5 -5
- data/lib/workos/shared/group_deleted.rb +5 -5
- data/lib/workos/shared/group_member_added.rb +5 -5
- data/lib/workos/shared/group_member_removed.rb +5 -5
- data/lib/workos/shared/group_updated.rb +5 -5
- data/lib/workos/shared/pipe_connected_account.rb +46 -0
- data/lib/workos/{audit_logs/audit_log_export_json.rb → shared/pipes_connected_account_connected.rb} +10 -10
- data/lib/workos/shared/pipes_connected_account_disconnected.rb +34 -0
- data/lib/workos/shared/pipes_connected_account_reauthorization_needed.rb +34 -0
- data/lib/workos/shared/waitlist_user_approved.rb +5 -5
- data/lib/workos/shared/waitlist_user_created.rb +5 -5
- data/lib/workos/shared/waitlist_user_denied.rb +5 -5
- data/lib/workos/sso/connection_activated.rb +5 -5
- data/lib/workos/sso/connection_deactivated.rb +5 -5
- data/lib/workos/sso/connection_deleted.rb +5 -5
- data/lib/workos/sso/connection_saml_certificate_renewal_required.rb +5 -5
- data/lib/workos/sso/connection_saml_certificate_renewed.rb +5 -5
- data/lib/workos/types/create_webhook_endpoint_events.rb +4 -1
- data/lib/workos/types/pipe_connected_account_state.rb +13 -0
- data/lib/workos/types/{radar_action.rb → radar_list_action.rb} +1 -1
- data/lib/workos/types/radar_list_type.rb +18 -0
- data/lib/workos/types/radar_standalone_assess_request_action.rb +1 -7
- data/lib/workos/types/radar_standalone_response_blocklist_type.rb +1 -10
- data/lib/workos/types/radar_standalone_response_control.rb +1 -3
- data/lib/workos/types/user_management_authentication_screen_hint.rb +1 -5
- data/{rbi/workos/types/request_options.rbi → lib/workos/types/vault_order.rb} +4 -3
- data/lib/workos/types/webhook_endpoint_status.rb +1 -5
- data/lib/workos/user_management/action_authentication_denied.rb +6 -6
- data/lib/workos/user_management/action_user_registration_denied.rb +6 -6
- data/lib/workos/user_management/authentication_email_verification_failed.rb +5 -5
- data/lib/workos/user_management/authentication_email_verification_succeeded.rb +5 -5
- data/lib/workos/user_management/authentication_magic_auth_failed.rb +5 -5
- data/lib/workos/user_management/authentication_magic_auth_succeeded.rb +5 -5
- data/lib/workos/user_management/authentication_mfa_failed.rb +5 -5
- data/lib/workos/user_management/authentication_mfa_succeeded.rb +5 -5
- data/lib/workos/user_management/authentication_oauth_failed.rb +5 -5
- data/lib/workos/user_management/authentication_oauth_succeeded.rb +5 -5
- data/lib/workos/user_management/authentication_passkey_failed.rb +5 -5
- data/lib/workos/user_management/authentication_passkey_succeeded.rb +5 -5
- data/lib/workos/user_management/authentication_password_failed.rb +5 -5
- data/lib/workos/user_management/authentication_password_succeeded.rb +5 -5
- data/lib/workos/user_management/authentication_radar_risk_detected.rb +5 -5
- data/lib/workos/user_management/authentication_sso_failed.rb +5 -5
- data/lib/workos/user_management/authentication_sso_started.rb +5 -5
- data/lib/workos/user_management/authentication_sso_succeeded.rb +5 -5
- data/lib/workos/user_management/authentication_sso_timed_out.rb +5 -5
- data/lib/workos/user_management/create_user_api_key.rb +5 -2
- data/lib/workos/user_management/email_verification_created.rb +5 -5
- data/lib/workos/user_management/invitation_accepted.rb +5 -5
- data/lib/workos/user_management/invitation_created.rb +5 -5
- data/lib/workos/user_management/invitation_resent.rb +5 -5
- data/lib/workos/user_management/invitation_revoked.rb +5 -5
- data/lib/workos/user_management/magic_auth_created.rb +5 -5
- data/lib/workos/user_management/password_reset_created.rb +5 -5
- data/lib/workos/user_management/password_reset_succeeded.rb +5 -5
- data/lib/workos/user_management/session_created.rb +5 -5
- data/lib/workos/user_management/session_revoked.rb +5 -5
- data/lib/workos/user_management/user_api_key.rb +3 -0
- data/lib/workos/user_management/user_api_key_with_value.rb +3 -0
- data/lib/workos/user_management/user_created.rb +5 -5
- data/lib/workos/user_management/user_deleted.rb +5 -5
- data/lib/workos/user_management/user_updated.rb +5 -5
- data/lib/workos/user_management.rb +11 -214
- data/lib/workos/vault/actor.rb +22 -0
- data/lib/workos/vault/create_data_key_request.rb +18 -0
- data/lib/workos/vault/create_data_key_response.rb +28 -0
- data/lib/workos/vault/create_object_request.rb +25 -0
- data/lib/workos/vault/decrypt_request.rb +18 -0
- data/lib/workos/vault/decrypt_response.rb +22 -0
- data/lib/workos/vault/delete_object_response.rb +22 -0
- data/lib/workos/vault/object.rb +28 -0
- data/lib/workos/vault/object_metadata.rb +37 -0
- data/lib/workos/{audit_logs/audit_log_action_json.rb → vault/object_summary.rb} +4 -10
- data/lib/workos/vault/object_version.rb +31 -0
- data/lib/workos/vault/object_without_value.rb +25 -0
- data/lib/workos/vault/rekey_request.rb +22 -0
- data/lib/workos/vault/update_object_request.rb +22 -0
- data/lib/workos/vault/vault_byok_key_deleted.rb +5 -5
- data/lib/workos/vault/vault_byok_key_verification_completed.rb +5 -5
- data/lib/workos/vault/vault_data_created.rb +5 -5
- data/lib/workos/vault/vault_data_deleted.rb +5 -5
- data/lib/workos/vault/vault_data_read.rb +5 -5
- data/lib/workos/vault/vault_data_updated.rb +5 -5
- data/lib/workos/vault/vault_dek_decrypted.rb +5 -5
- data/lib/workos/vault/vault_dek_read.rb +5 -5
- data/lib/workos/vault/vault_kek_created.rb +5 -5
- data/lib/workos/vault/vault_metadata_read.rb +5 -5
- data/lib/workos/vault/vault_names_listed.rb +5 -5
- data/lib/workos/vault/version_list_response.rb +22 -0
- data/lib/workos/vault.rb +273 -139
- data/lib/workos/version.rb +1 -1
- data/lib/workos/webhooks/webhook_endpoint.rb +2 -7
- data/lib/workos/webhooks.rb +8 -9
- data/lib/workos.rb +1 -0
- data/rbi/workos/action_authentication_denied.rbi +10 -10
- data/rbi/workos/action_user_registration_denied.rbi +10 -10
- data/rbi/workos/actor.rbi +30 -0
- data/rbi/workos/api_key.rbi +6 -0
- data/rbi/workos/api_key_created.rbi +6 -6
- data/rbi/workos/api_key_created_data.rbi +6 -0
- data/rbi/workos/api_key_revoked.rbi +6 -6
- data/rbi/workos/api_key_revoked_data.rbi +6 -0
- data/rbi/workos/api_keys.rbi +2 -1
- data/rbi/workos/audit_log_action.rbi +1 -0
- data/rbi/workos/audit_log_export.rbi +1 -0
- data/rbi/workos/audit_log_schema.rbi +18 -0
- data/rbi/workos/{audit_log_schema_json_actor.rbi → audit_log_schema_actor_input.rbi} +1 -1
- data/rbi/workos/audit_log_schema_input.rbi +36 -0
- data/rbi/workos/{audit_log_schema_json_target.rbi → audit_log_schema_target_input.rbi} +1 -1
- data/rbi/workos/audit_logs.rbi +9 -9
- data/rbi/workos/audit_logs_retention.rbi +1 -0
- data/rbi/workos/authentication_email_verification_failed.rbi +6 -6
- data/rbi/workos/authentication_email_verification_succeeded.rbi +6 -6
- data/rbi/workos/authentication_magic_auth_failed.rbi +6 -6
- data/rbi/workos/authentication_magic_auth_succeeded.rbi +6 -6
- data/rbi/workos/authentication_mfa_failed.rbi +6 -6
- data/rbi/workos/authentication_mfa_succeeded.rbi +6 -6
- data/rbi/workos/authentication_oauth_failed.rbi +6 -6
- data/rbi/workos/authentication_oauth_succeeded.rbi +6 -6
- data/rbi/workos/authentication_passkey_failed.rbi +6 -6
- data/rbi/workos/authentication_passkey_succeeded.rbi +6 -6
- data/rbi/workos/authentication_password_failed.rbi +6 -6
- data/rbi/workos/authentication_password_succeeded.rbi +6 -6
- data/rbi/workos/authentication_radar_risk_detected.rbi +6 -6
- data/rbi/workos/authentication_sso_failed.rbi +6 -6
- data/rbi/workos/authentication_sso_started.rbi +6 -6
- data/rbi/workos/authentication_sso_succeeded.rbi +6 -6
- data/rbi/workos/authentication_sso_timed_out.rbi +6 -6
- data/rbi/workos/authorization.rbi +9 -5
- data/rbi/workos/client.rbi +6 -3
- data/rbi/workos/connect_application.rbi +0 -12
- data/rbi/workos/{webhook_endpoint_json.rbi → connect_application_m2m.rbi} +23 -11
- data/rbi/workos/connect_application_oauth.rbi +102 -0
- data/rbi/workos/connect_application_oauth_redirect_uris.rbi +30 -0
- data/rbi/workos/connection_activated.rbi +6 -6
- data/rbi/workos/connection_deactivated.rbi +6 -6
- data/rbi/workos/connection_deleted.rbi +6 -6
- data/rbi/workos/connection_saml_certificate_renewal_required.rbi +6 -6
- data/rbi/workos/connection_saml_certificate_renewed.rbi +6 -6
- data/rbi/workos/{audit_logs_retention_json.rbi → create_data_key_request.rbi} +5 -5
- data/rbi/workos/create_data_key_response.rbi +42 -0
- data/rbi/workos/create_object_request.rbi +36 -0
- data/rbi/workos/create_organization_api_key.rbi +6 -0
- data/rbi/workos/create_user_api_key.rbi +6 -0
- data/rbi/workos/decrypt_request.rbi +24 -0
- data/rbi/workos/decrypt_response.rbi +30 -0
- data/rbi/workos/delete_object_response.rbi +30 -0
- data/rbi/workos/dsync_activated.rbi +6 -6
- data/rbi/workos/dsync_deactivated.rbi +6 -6
- data/rbi/workos/dsync_deleted.rbi +6 -6
- data/rbi/workos/dsync_group_created.rbi +6 -6
- data/rbi/workos/dsync_group_deleted.rbi +6 -6
- data/rbi/workos/dsync_group_updated.rbi +6 -6
- data/rbi/workos/dsync_group_user_added.rbi +6 -6
- data/rbi/workos/dsync_group_user_removed.rbi +6 -6
- data/rbi/workos/dsync_user_created.rbi +6 -6
- data/rbi/workos/dsync_user_deleted.rbi +6 -6
- data/rbi/workos/dsync_user_updated.rbi +6 -6
- data/rbi/workos/email_verification_created.rbi +6 -6
- data/rbi/workos/error_response.rbi +24 -0
- data/rbi/workos/flag_created.rbi +6 -6
- data/rbi/workos/flag_deleted.rbi +6 -6
- data/rbi/workos/flag_rule_updated.rbi +6 -6
- data/rbi/workos/flag_updated.rbi +6 -6
- data/rbi/workos/group_created.rbi +6 -6
- data/rbi/workos/group_deleted.rbi +6 -6
- data/rbi/workos/group_member_added.rbi +6 -6
- data/rbi/workos/group_member_removed.rbi +6 -6
- data/rbi/workos/group_updated.rbi +6 -6
- data/rbi/workos/invitation_accepted.rbi +6 -6
- data/rbi/workos/invitation_created.rbi +6 -6
- data/rbi/workos/invitation_resent.rbi +6 -6
- data/rbi/workos/invitation_revoked.rbi +6 -6
- data/rbi/workos/magic_auth_created.rbi +6 -6
- data/rbi/workos/object.rbi +42 -0
- data/rbi/workos/object_metadata.rbi +60 -0
- data/rbi/workos/object_summary.rbi +36 -0
- data/rbi/workos/{audit_log_action_json.rbi → object_version.rbi} +17 -17
- data/rbi/workos/object_without_value.rbi +36 -0
- data/rbi/workos/organization_api_key.rbi +6 -0
- data/rbi/workos/organization_api_key_with_value.rbi +6 -0
- data/rbi/workos/organization_created.rbi +6 -6
- data/rbi/workos/organization_deleted.rbi +6 -6
- data/rbi/workos/organization_domain_created.rbi +6 -6
- data/rbi/workos/organization_domain_deleted.rbi +6 -6
- data/rbi/workos/organization_domain_updated.rbi +6 -6
- data/rbi/workos/organization_domain_verification_failed.rbi +6 -6
- data/rbi/workos/organization_domain_verified.rbi +6 -6
- data/rbi/workos/organization_membership_created.rbi +6 -6
- data/rbi/workos/organization_membership_deleted.rbi +6 -6
- data/rbi/workos/organization_membership_service.rbi +114 -0
- data/rbi/workos/organization_membership_updated.rbi +6 -6
- data/rbi/workos/organization_role_created.rbi +6 -6
- data/rbi/workos/organization_role_deleted.rbi +6 -6
- data/rbi/workos/organization_role_updated.rbi +6 -6
- data/rbi/workos/organization_updated.rbi +6 -6
- data/rbi/workos/password_reset_created.rbi +6 -6
- data/rbi/workos/password_reset_succeeded.rbi +6 -6
- data/rbi/workos/permission_created.rbi +6 -6
- data/rbi/workos/permission_deleted.rbi +6 -6
- data/rbi/workos/permission_updated.rbi +6 -6
- data/rbi/workos/pipe_connected_account.rbi +78 -0
- data/rbi/workos/{audit_log_export_json.rbi → pipes_connected_account_connected.rbi} +11 -11
- data/rbi/workos/pipes_connected_account_disconnected.rbi +54 -0
- data/rbi/workos/pipes_connected_account_reauthorization_needed.rbi +54 -0
- data/rbi/workos/radar.rbi +1 -3
- data/rbi/workos/radar_standalone_assess_request.rbi +0 -12
- data/rbi/workos/rekey_request.rbi +30 -0
- data/rbi/workos/role_created.rbi +6 -6
- data/rbi/workos/role_deleted.rbi +6 -6
- data/rbi/workos/role_updated.rbi +6 -6
- data/rbi/workos/session_created.rbi +6 -6
- data/rbi/workos/session_manager.rbi +1 -1
- data/rbi/workos/session_revoked.rbi +6 -6
- data/rbi/workos/update_object_request.rbi +30 -0
- data/rbi/workos/user_api_key.rbi +6 -0
- data/rbi/workos/user_api_key_with_value.rbi +6 -0
- data/rbi/workos/user_created.rbi +6 -6
- data/rbi/workos/user_deleted.rbi +6 -6
- data/rbi/workos/user_management.rbi +2 -90
- data/rbi/workos/user_updated.rbi +6 -6
- data/rbi/workos/vault.rbi +70 -95
- data/rbi/workos/vault_byok_key_deleted.rbi +6 -6
- data/rbi/workos/vault_byok_key_verification_completed.rbi +6 -6
- data/rbi/workos/vault_data_created.rbi +6 -6
- data/rbi/workos/vault_data_deleted.rbi +6 -6
- data/rbi/workos/vault_data_read.rbi +6 -6
- data/rbi/workos/vault_data_updated.rbi +6 -6
- data/rbi/workos/vault_dek_decrypted.rbi +6 -6
- data/rbi/workos/vault_dek_read.rbi +6 -6
- data/rbi/workos/vault_kek_created.rbi +6 -6
- data/rbi/workos/vault_metadata_read.rbi +6 -6
- data/rbi/workos/vault_names_listed.rbi +6 -6
- data/rbi/workos/waitlist_user_approved.rbi +6 -6
- data/rbi/workos/waitlist_user_created.rbi +6 -6
- data/rbi/workos/waitlist_user_denied.rbi +6 -6
- data/rbi/workos/webhook_endpoint.rbi +1 -0
- data/rbi/workos/webhooks.rbi +2 -2
- data/renovate.json +1 -1
- data/test/workos/test_actions.rb +9 -0
- data/test/workos/test_base_client.rb +44 -0
- data/test/workos/test_encryptors_aes_gcm.rb +16 -1
- data/test/workos/test_model_round_trip.rb +577 -212
- data/test/workos/test_organization_membership_service.rb +107 -0
- data/test/workos/test_session.rb +43 -4
- data/test/workos/test_user_management.rb +0 -74
- data/test/workos/test_vault.rb +91 -87
- data/test/workos/test_webhook_verify.rb +11 -0
- metadata +65 -41
- data/lib/workos/audit_logs/audit_log_schema_json.rb +0 -34
- data/lib/workos/organizations/audit_logs_retention_json.rb +0 -18
- data/lib/workos/types/audit_log_export_json_state.rb +0 -14
- data/lib/workos/types/webhook_endpoint_json_status.rb +0 -9
- data/lib/workos/user_management_organization_membership_groups.rb +0 -60
- data/lib/workos/webhooks/webhook_endpoint_json.rb +0 -40
- data/rbi/workos/actions.rbi +0 -48
- data/rbi/workos/audit_log_schema_json.rbi +0 -54
- data/rbi/workos/base_client.rbi +0 -132
- data/rbi/workos/configuration.rbi +0 -68
- data/rbi/workos/encryptors/aes_gcm.rbi +0 -19
- data/rbi/workos/errors.rbi +0 -43
- data/rbi/workos/hash_provider.rbi +0 -18
- data/rbi/workos/passwordless.rbi +0 -47
- data/rbi/workos/public_client.rbi +0 -12
- data/rbi/workos/session.rbi +0 -43
- data/rbi/workos/types/api_response.rbi +0 -29
- data/rbi/workos/types/base_model.rbi +0 -22
- data/rbi/workos/types/list_struct.rbi +0 -89
- data/rbi/workos/user_management_organization_membership_groups.rbi +0 -25
- data/rbi/workos/util.rbi +0 -12
- data/test/workos/test_user_management_organization_membership_groups.rb +0 -33
- /data/lib/workos/{user_management → organization_membership}/create_user_organization_membership.rb +0 -0
- /data/lib/workos/{user_management → organization_membership}/organization_membership.rb +0 -0
- /data/lib/workos/{user_management → organization_membership}/update_user_organization_membership.rb +0 -0
- /data/lib/workos/{user_management → organization_membership}/user_organization_membership.rb +0 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# This file is auto-generated by oagen. Do not edit.
|
|
4
|
+
|
|
5
|
+
require "test_helper"
|
|
6
|
+
|
|
7
|
+
class OrganizationMembershipServiceTest < Minitest::Test
|
|
8
|
+
include FixtureHelper
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
@client = WorkOS::Client.new(api_key: "sk_test_123")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_list_organization_memberships_returns_expected_result
|
|
15
|
+
stub_request(:get, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships(\?|\z)})
|
|
16
|
+
.to_return(body: '{"data": [], "list_metadata": {}}', status: 200)
|
|
17
|
+
result = @client.organization_membership.list_organization_memberships
|
|
18
|
+
assert_kind_of WorkOS::Types::ListStruct, result
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_create_organization_membership_returns_expected_result
|
|
22
|
+
stub_request(:post, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships(\?|\z)})
|
|
23
|
+
.with(body: hash_including("user_id" => "stub", "organization_id" => "stub", "role_slug" => "stub"))
|
|
24
|
+
.to_return(body: "{}", status: 200)
|
|
25
|
+
result = @client.organization_membership.create_organization_membership(user_id: "stub", organization_id: "stub", role: WorkOS::OrganizationMembershipService::RoleSingle.new(role_slug: "stub"))
|
|
26
|
+
refute_nil result
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_create_organization_membership_with_role_multiple_returns_expected_result
|
|
30
|
+
stub_request(:post, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships(\?|\z)})
|
|
31
|
+
.with(body: hash_including("user_id" => "stub", "organization_id" => "stub", "role_slugs" => ["stub"]))
|
|
32
|
+
.to_return(body: "{}", status: 200)
|
|
33
|
+
result = @client.organization_membership.create_organization_membership(user_id: "stub", organization_id: "stub", role: WorkOS::OrganizationMembershipService::RoleMultiple.new(role_slugs: ["stub"]))
|
|
34
|
+
refute_nil result
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_get_organization_membership_returns_expected_result
|
|
38
|
+
stub_request(:get, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)})
|
|
39
|
+
.to_return(body: "{}", status: 200)
|
|
40
|
+
result = @client.organization_membership.get_organization_membership(id: "stub")
|
|
41
|
+
refute_nil result
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_update_organization_membership_returns_expected_result
|
|
45
|
+
stub_request(:put, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)})
|
|
46
|
+
.with(body: hash_including("role_slug" => "stub"))
|
|
47
|
+
.to_return(body: "{}", status: 200)
|
|
48
|
+
result = @client.organization_membership.update_organization_membership(id: "stub", role: WorkOS::OrganizationMembershipService::RoleSingle.new(role_slug: "stub"))
|
|
49
|
+
refute_nil result
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_update_organization_membership_with_role_multiple_returns_expected_result
|
|
53
|
+
stub_request(:put, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)})
|
|
54
|
+
.with(body: hash_including("role_slugs" => ["stub"]))
|
|
55
|
+
.to_return(body: "{}", status: 200)
|
|
56
|
+
result = @client.organization_membership.update_organization_membership(id: "stub", role: WorkOS::OrganizationMembershipService::RoleMultiple.new(role_slugs: ["stub"]))
|
|
57
|
+
refute_nil result
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_delete_organization_membership_returns_expected_result
|
|
61
|
+
stub_request(:delete, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)})
|
|
62
|
+
.to_return(body: "{}", status: 200)
|
|
63
|
+
result = @client.organization_membership.delete_organization_membership(id: "stub")
|
|
64
|
+
assert_nil result
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def test_deactivate_organization_membership_returns_expected_result
|
|
68
|
+
stub_request(:put, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub/deactivate(\?|\z)})
|
|
69
|
+
.to_return(body: "{}", status: 200)
|
|
70
|
+
result = @client.organization_membership.deactivate_organization_membership(id: "stub")
|
|
71
|
+
refute_nil result
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_reactivate_organization_membership_returns_expected_result
|
|
75
|
+
stub_request(:put, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub/reactivate(\?|\z)})
|
|
76
|
+
.to_return(body: "{}", status: 200)
|
|
77
|
+
result = @client.organization_membership.reactivate_organization_membership(id: "stub")
|
|
78
|
+
refute_nil result
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_list_organization_membership_groups_returns_expected_result
|
|
82
|
+
stub_request(:get, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub/groups(\?|\z)})
|
|
83
|
+
.to_return(body: '{"data": [], "list_metadata": {}}', status: 200)
|
|
84
|
+
result = @client.organization_membership.list_organization_membership_groups(om_id: "stub")
|
|
85
|
+
assert_kind_of WorkOS::Types::ListStruct, result
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Parameterized authentication error tests (one per endpoint).
|
|
89
|
+
[
|
|
90
|
+
{name: :list_organization_memberships, verb: :get, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships(\?|\z)}},
|
|
91
|
+
{name: :create_organization_membership, verb: :post, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships(\?|\z)}, args: {user_id: "stub", organization_id: "stub", role: WorkOS::OrganizationMembershipService::RoleSingle.new(role_slug: "stub")}},
|
|
92
|
+
{name: :get_organization_membership, verb: :get, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)}, args: {id: "stub"}},
|
|
93
|
+
{name: :update_organization_membership, verb: :put, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)}, args: {id: "stub", role: WorkOS::OrganizationMembershipService::RoleSingle.new(role_slug: "stub")}},
|
|
94
|
+
{name: :delete_organization_membership, verb: :delete, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)}, args: {id: "stub"}},
|
|
95
|
+
{name: :deactivate_organization_membership, verb: :put, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub/deactivate(\?|\z)}, args: {id: "stub"}},
|
|
96
|
+
{name: :reactivate_organization_membership, verb: :put, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub/reactivate(\?|\z)}, args: {id: "stub"}},
|
|
97
|
+
{name: :list_organization_membership_groups, verb: :get, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub/groups(\?|\z)}, args: {om_id: "stub"}}
|
|
98
|
+
].each do |spec|
|
|
99
|
+
define_method("test_#{spec[:name]}_raises_authentication_error_on_401") do
|
|
100
|
+
stub_request(spec[:verb], spec[:url])
|
|
101
|
+
.to_return(body: '{"message": "Unauthorized"}', status: 401)
|
|
102
|
+
assert_raises(WorkOS::AuthenticationError) do
|
|
103
|
+
@client.organization_membership.send(spec[:name], **(spec[:args] || {}))
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
data/test/workos/test_session.rb
CHANGED
|
@@ -26,11 +26,27 @@ class SessionTest < Minitest::Test
|
|
|
26
26
|
|
|
27
27
|
def test_unseal_with_wrong_key_raises
|
|
28
28
|
sealed = @sm.seal_data({"x" => 1}, PASSWORD)
|
|
29
|
+
# Wrong key is the same length (>= 32 bytes) so the length guard doesn't
|
|
30
|
+
# short-circuit; we want to assert the underlying cipher rejection.
|
|
29
31
|
assert_raises(OpenSSL::Cipher::CipherError) do
|
|
30
|
-
@sm.unseal_data(sealed, "wrong-password")
|
|
32
|
+
@sm.unseal_data(sealed, "wrong-cookie-password-32-bytes--")
|
|
31
33
|
end
|
|
32
34
|
end
|
|
33
35
|
|
|
36
|
+
def test_unseal_with_short_key_raises_argument_error
|
|
37
|
+
sealed = @sm.seal_data({"x" => 1}, PASSWORD)
|
|
38
|
+
assert_raises(ArgumentError) { @sm.unseal_data(sealed, "too-short") }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_seal_with_short_key_raises_argument_error
|
|
42
|
+
assert_raises(ArgumentError) { @sm.seal_data({"x" => 1}, "too-short") }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_session_load_requires_min_length_cookie_password
|
|
46
|
+
short = "x" * 31
|
|
47
|
+
assert_raises(ArgumentError) { @sm.load(seal_data: "x", cookie_password: short) }
|
|
48
|
+
end
|
|
49
|
+
|
|
34
50
|
def test_unseal_rejects_short_payload
|
|
35
51
|
assert_raises(ArgumentError) do
|
|
36
52
|
@sm.unseal_data(Base64.strict_encode64("short"), PASSWORD)
|
|
@@ -334,6 +350,19 @@ class SessionTest < Minitest::Test
|
|
|
334
350
|
assert_equal WorkOS::SessionManager::INVALID_SESSION_COOKIE, result.reason
|
|
335
351
|
end
|
|
336
352
|
|
|
353
|
+
def test_refresh_raises_argument_error_for_short_cookie_password_override
|
|
354
|
+
sealed = @sm.seal_data({"access_token" => "at", "refresh_token" => "rt"}, PASSWORD)
|
|
355
|
+
session = @sm.load(seal_data: sealed, cookie_password: PASSWORD)
|
|
356
|
+
err = assert_raises(ArgumentError) { session.refresh(cookie_password: "x" * 31) }
|
|
357
|
+
assert_match(/at least 32 bytes/, err.message)
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
def test_refresh_raises_argument_error_for_empty_cookie_password_override
|
|
361
|
+
sealed = @sm.seal_data({"access_token" => "at", "refresh_token" => "rt"}, PASSWORD)
|
|
362
|
+
session = @sm.load(seal_data: sealed, cookie_password: PASSWORD)
|
|
363
|
+
assert_raises(ArgumentError) { session.refresh(cookie_password: "") }
|
|
364
|
+
end
|
|
365
|
+
|
|
337
366
|
def test_refresh_returns_error_when_no_refresh_token
|
|
338
367
|
sealed = @sm.seal_data({"access_token" => "at_only"}, PASSWORD)
|
|
339
368
|
result = @sm.refresh(seal_data: sealed, cookie_password: PASSWORD)
|
|
@@ -361,7 +390,7 @@ class SessionTest < Minitest::Test
|
|
|
361
390
|
assert_requested(stub)
|
|
362
391
|
end
|
|
363
392
|
|
|
364
|
-
def
|
|
393
|
+
def test_refresh_persists_seal_data_even_when_access_token_decode_fails
|
|
365
394
|
rsa, pub = signing_key_pair
|
|
366
395
|
old_access = make_jwt({"sid" => "session_old", "exp" => Time.now.to_i - 60}, rsa)
|
|
367
396
|
sealed = @sm.seal_data({"access_token" => old_access, "refresh_token" => "rt_old", "user" => {"id" => "u_1"}}, PASSWORD)
|
|
@@ -383,8 +412,18 @@ class SessionTest < Minitest::Test
|
|
|
383
412
|
assert_kind_of WorkOS::SessionManager::RefreshError, result
|
|
384
413
|
refute result.authenticated
|
|
385
414
|
|
|
386
|
-
# Session state
|
|
387
|
-
|
|
415
|
+
# Session state IS updated to the freshly-sealed cookie before decode runs,
|
|
416
|
+
# so a transient JWT/JWKS failure leaves a usable seal the caller can
|
|
417
|
+
# re-#authenticate against rather than half-updated state pinned to the
|
|
418
|
+
# stale (already-rotated) refresh token.
|
|
419
|
+
refute_equal sealed, session.seal_data
|
|
420
|
+
refute_nil session.seal_data
|
|
421
|
+
|
|
422
|
+
# The rotated cookie is also reachable through the RefreshError result, so a
|
|
423
|
+
# caller that doesn't retain the Session object across requests (typical in
|
|
424
|
+
# a Rails request cycle) can still write the new cookie back to the browser
|
|
425
|
+
# rather than re-sending the now-revoked refresh token on the next request.
|
|
426
|
+
assert_equal session.seal_data, result.sealed_session
|
|
388
427
|
end
|
|
389
428
|
|
|
390
429
|
# --- Session constructor validation ---------------------------------------
|
|
@@ -373,73 +373,6 @@ class UserManagementTest < Minitest::Test
|
|
|
373
373
|
refute_nil result
|
|
374
374
|
end
|
|
375
375
|
|
|
376
|
-
def test_list_organization_memberships_returns_expected_result
|
|
377
|
-
stub_request(:get, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships(\?|\z)})
|
|
378
|
-
.to_return(body: '{"data": [], "list_metadata": {}}', status: 200)
|
|
379
|
-
result = @client.user_management.list_organization_memberships
|
|
380
|
-
assert_kind_of WorkOS::Types::ListStruct, result
|
|
381
|
-
end
|
|
382
|
-
|
|
383
|
-
def test_create_organization_membership_returns_expected_result
|
|
384
|
-
stub_request(:post, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships(\?|\z)})
|
|
385
|
-
.with(body: hash_including("user_id" => "stub", "organization_id" => "stub", "role_slug" => "stub"))
|
|
386
|
-
.to_return(body: "{}", status: 200)
|
|
387
|
-
result = @client.user_management.create_organization_membership(user_id: "stub", organization_id: "stub", role: WorkOS::UserManagement::RoleSingle.new(role_slug: "stub"))
|
|
388
|
-
refute_nil result
|
|
389
|
-
end
|
|
390
|
-
|
|
391
|
-
def test_create_organization_membership_with_role_multiple_returns_expected_result
|
|
392
|
-
stub_request(:post, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships(\?|\z)})
|
|
393
|
-
.with(body: hash_including("user_id" => "stub", "organization_id" => "stub", "role_slugs" => ["stub"]))
|
|
394
|
-
.to_return(body: "{}", status: 200)
|
|
395
|
-
result = @client.user_management.create_organization_membership(user_id: "stub", organization_id: "stub", role: WorkOS::UserManagement::RoleMultiple.new(role_slugs: ["stub"]))
|
|
396
|
-
refute_nil result
|
|
397
|
-
end
|
|
398
|
-
|
|
399
|
-
def test_get_organization_membership_returns_expected_result
|
|
400
|
-
stub_request(:get, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)})
|
|
401
|
-
.to_return(body: "{}", status: 200)
|
|
402
|
-
result = @client.user_management.get_organization_membership(id: "stub")
|
|
403
|
-
refute_nil result
|
|
404
|
-
end
|
|
405
|
-
|
|
406
|
-
def test_update_organization_membership_returns_expected_result
|
|
407
|
-
stub_request(:put, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)})
|
|
408
|
-
.with(body: hash_including("role_slug" => "stub"))
|
|
409
|
-
.to_return(body: "{}", status: 200)
|
|
410
|
-
result = @client.user_management.update_organization_membership(id: "stub", role: WorkOS::UserManagement::RoleSingle.new(role_slug: "stub"))
|
|
411
|
-
refute_nil result
|
|
412
|
-
end
|
|
413
|
-
|
|
414
|
-
def test_update_organization_membership_with_role_multiple_returns_expected_result
|
|
415
|
-
stub_request(:put, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)})
|
|
416
|
-
.with(body: hash_including("role_slugs" => ["stub"]))
|
|
417
|
-
.to_return(body: "{}", status: 200)
|
|
418
|
-
result = @client.user_management.update_organization_membership(id: "stub", role: WorkOS::UserManagement::RoleMultiple.new(role_slugs: ["stub"]))
|
|
419
|
-
refute_nil result
|
|
420
|
-
end
|
|
421
|
-
|
|
422
|
-
def test_delete_organization_membership_returns_expected_result
|
|
423
|
-
stub_request(:delete, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)})
|
|
424
|
-
.to_return(body: "{}", status: 200)
|
|
425
|
-
result = @client.user_management.delete_organization_membership(id: "stub")
|
|
426
|
-
assert_nil result
|
|
427
|
-
end
|
|
428
|
-
|
|
429
|
-
def test_deactivate_organization_membership_returns_expected_result
|
|
430
|
-
stub_request(:put, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub/deactivate(\?|\z)})
|
|
431
|
-
.to_return(body: "{}", status: 200)
|
|
432
|
-
result = @client.user_management.deactivate_organization_membership(id: "stub")
|
|
433
|
-
refute_nil result
|
|
434
|
-
end
|
|
435
|
-
|
|
436
|
-
def test_reactivate_organization_membership_returns_expected_result
|
|
437
|
-
stub_request(:put, %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub/reactivate(\?|\z)})
|
|
438
|
-
.to_return(body: "{}", status: 200)
|
|
439
|
-
result = @client.user_management.reactivate_organization_membership(id: "stub")
|
|
440
|
-
refute_nil result
|
|
441
|
-
end
|
|
442
|
-
|
|
443
376
|
def test_create_redirect_uri_returns_expected_result
|
|
444
377
|
stub_request(:post, %r{\Ahttps://api\.workos\.com/user_management/redirect_uris(\?|\z)})
|
|
445
378
|
.to_return(body: "{}", status: 200)
|
|
@@ -509,13 +442,6 @@ class UserManagementTest < Minitest::Test
|
|
|
509
442
|
{name: :update_jwt_template, verb: :put, url: %r{\Ahttps://api\.workos\.com/user_management/jwt_template(\?|\z)}, args: {content: "stub"}},
|
|
510
443
|
{name: :create_magic_auth, verb: :post, url: %r{\Ahttps://api\.workos\.com/user_management/magic_auth(\?|\z)}, args: {email: "stub"}},
|
|
511
444
|
{name: :get_magic_auth, verb: :get, url: %r{\Ahttps://api\.workos\.com/user_management/magic_auth/stub(\?|\z)}, args: {id: "stub"}},
|
|
512
|
-
{name: :list_organization_memberships, verb: :get, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships(\?|\z)}},
|
|
513
|
-
{name: :create_organization_membership, verb: :post, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships(\?|\z)}, args: {user_id: "stub", organization_id: "stub", role: WorkOS::UserManagement::RoleSingle.new(role_slug: "stub")}},
|
|
514
|
-
{name: :get_organization_membership, verb: :get, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)}, args: {id: "stub"}},
|
|
515
|
-
{name: :update_organization_membership, verb: :put, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)}, args: {id: "stub", role: WorkOS::UserManagement::RoleSingle.new(role_slug: "stub")}},
|
|
516
|
-
{name: :delete_organization_membership, verb: :delete, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub(\?|\z)}, args: {id: "stub"}},
|
|
517
|
-
{name: :deactivate_organization_membership, verb: :put, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub/deactivate(\?|\z)}, args: {id: "stub"}},
|
|
518
|
-
{name: :reactivate_organization_membership, verb: :put, url: %r{\Ahttps://api\.workos\.com/user_management/organization_memberships/stub/reactivate(\?|\z)}, args: {id: "stub"}},
|
|
519
445
|
{name: :create_redirect_uri, verb: :post, url: %r{\Ahttps://api\.workos\.com/user_management/redirect_uris(\?|\z)}, args: {uri: "stub"}},
|
|
520
446
|
{name: :list_user_authorized_applications, verb: :get, url: %r{\Ahttps://api\.workos\.com/user_management/users/stub/authorized_applications(\?|\z)}, args: {user_id: "stub"}},
|
|
521
447
|
{name: :delete_user_authorized_application, verb: :delete, url: %r{\Ahttps://api\.workos\.com/user_management/users/stub/authorized_applications/stub(\?|\z)}, args: {application_id: "stub", user_id: "stub"}},
|
data/test/workos/test_vault.rb
CHANGED
|
@@ -1,119 +1,118 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
#
|
|
3
|
+
# This file is auto-generated by oagen. Do not edit.
|
|
4
|
+
|
|
4
5
|
require "test_helper"
|
|
5
6
|
require "base64"
|
|
6
7
|
|
|
7
8
|
class VaultTest < Minitest::Test
|
|
9
|
+
include FixtureHelper
|
|
10
|
+
|
|
8
11
|
def setup
|
|
9
|
-
@client = WorkOS::Client.new(api_key: "
|
|
12
|
+
@client = WorkOS::Client.new(api_key: "sk_test_123")
|
|
10
13
|
end
|
|
11
14
|
|
|
12
|
-
def
|
|
13
|
-
|
|
15
|
+
def test_create_data_key_returns_expected_result
|
|
16
|
+
stub_request(:post, %r{\Ahttps://api\.workos\.com/vault/v1/keys/data-key(\?|\z)})
|
|
17
|
+
.to_return(body: "{}", status: 200)
|
|
18
|
+
result = @client.vault.create_data_key(context: {})
|
|
19
|
+
refute_nil result
|
|
14
20
|
end
|
|
15
21
|
|
|
16
|
-
def
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"updated_by" => {"id" => "u1", "name" => "alice"}
|
|
22
|
-
}
|
|
23
|
-
stub_request(:post, "https://api.workos.com/vault/v1/kv")
|
|
24
|
-
.with(body: hash_including("name" => "secret", "value" => "hello"))
|
|
25
|
-
.to_return(status: 200, body: body.to_json)
|
|
26
|
-
|
|
27
|
-
meta = @client.vault.create_object(name: "secret", value: "hello", key_context: {"tenant" => "t1"})
|
|
28
|
-
assert_equal "obj_01", meta.id
|
|
29
|
-
assert_equal "v1", meta.version_id
|
|
30
|
-
assert_equal "alice", meta.updated_by.name
|
|
22
|
+
def test_create_decrypt_returns_expected_result
|
|
23
|
+
stub_request(:post, %r{\Ahttps://api\.workos\.com/vault/v1/keys/decrypt(\?|\z)})
|
|
24
|
+
.to_return(body: "{}", status: 200)
|
|
25
|
+
result = @client.vault.create_decrypt(keys: "stub")
|
|
26
|
+
refute_nil result
|
|
31
27
|
end
|
|
32
28
|
|
|
33
|
-
def
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"context" => {}, "environment_id" => "env",
|
|
39
|
-
"updated_at" => "x", "updated_by" => {"id" => "u", "name" => "n"}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
stub_request(:get, "https://api.workos.com/vault/v1/kv/obj_01")
|
|
43
|
-
.to_return(status: 200, body: body.to_json)
|
|
44
|
-
|
|
45
|
-
obj = @client.vault.read_object(object_id: "obj_01")
|
|
46
|
-
assert_equal "hello", obj.value
|
|
47
|
-
assert_equal "secret", obj.name
|
|
29
|
+
def test_create_rekey_returns_expected_result
|
|
30
|
+
stub_request(:post, %r{\Ahttps://api\.workos\.com/vault/v1/keys/rekey(\?|\z)})
|
|
31
|
+
.to_return(body: "{}", status: 200)
|
|
32
|
+
result = @client.vault.create_rekey(context: {}, encrypted_keys: "stub")
|
|
33
|
+
refute_nil result
|
|
48
34
|
end
|
|
49
35
|
|
|
50
|
-
def
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
assert_equal 2, digests.size
|
|
56
|
-
assert_equal "o1", digests.first.id
|
|
36
|
+
def test_list_kv_returns_expected_result
|
|
37
|
+
stub_request(:get, %r{\Ahttps://api\.workos\.com/vault/v1/kv(\?|\z)})
|
|
38
|
+
.to_return(body: '{"data": [], "list_metadata": {}}', status: 200)
|
|
39
|
+
result = @client.vault.list_kv
|
|
40
|
+
assert_kind_of WorkOS::Types::ListStruct, result
|
|
57
41
|
end
|
|
58
42
|
|
|
59
|
-
def
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
assert_equal 1, versions.size
|
|
65
|
-
assert versions.first.current_version
|
|
43
|
+
def test_create_kv_returns_expected_result
|
|
44
|
+
stub_request(:post, %r{\Ahttps://api\.workos\.com/vault/v1/kv(\?|\z)})
|
|
45
|
+
.to_return(body: "{}", status: 200)
|
|
46
|
+
result = @client.vault.create_kv(key_context: {}, name: "stub", value: "stub")
|
|
47
|
+
refute_nil result
|
|
66
48
|
end
|
|
67
49
|
|
|
68
|
-
def
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}}
|
|
74
|
-
stub_request(:get, "https://api.workos.com/vault/v1/kv/obj_1/metadata").to_return(status: 200, body: body.to_json)
|
|
75
|
-
|
|
76
|
-
obj = @client.vault.get_object_metadata(object_id: "obj_1")
|
|
77
|
-
assert_nil obj.value
|
|
78
|
-
assert_equal "obj_1", obj.metadata.id
|
|
50
|
+
def test_get_name_returns_expected_result
|
|
51
|
+
stub_request(:get, %r{\Ahttps://api\.workos\.com/vault/v1/kv/name/stub(\?|\z)})
|
|
52
|
+
.to_return(body: "{}", status: 200)
|
|
53
|
+
result = @client.vault.get_name(name: "stub")
|
|
54
|
+
refute_nil result
|
|
79
55
|
end
|
|
80
56
|
|
|
81
|
-
def
|
|
82
|
-
stub_request(:
|
|
83
|
-
|
|
57
|
+
def test_get_kv_returns_expected_result
|
|
58
|
+
stub_request(:get, %r{\Ahttps://api\.workos\.com/vault/v1/kv/stub(\?|\z)})
|
|
59
|
+
.to_return(body: "{}", status: 200)
|
|
60
|
+
result = @client.vault.get_kv(id: "stub")
|
|
61
|
+
refute_nil result
|
|
84
62
|
end
|
|
85
63
|
|
|
86
|
-
def
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
obj = @client.vault.update_object(object_id: "obj_1", value: "newval", version_check: "v1")
|
|
93
|
-
assert_equal "newval", obj.value
|
|
64
|
+
def test_update_kv_returns_expected_result
|
|
65
|
+
stub_request(:put, %r{\Ahttps://api\.workos\.com/vault/v1/kv/stub(\?|\z)})
|
|
66
|
+
.to_return(body: "{}", status: 200)
|
|
67
|
+
result = @client.vault.update_kv(id: "stub", value: "stub")
|
|
68
|
+
refute_nil result
|
|
94
69
|
end
|
|
95
70
|
|
|
96
|
-
def
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
71
|
+
def test_delete_kv_returns_expected_result
|
|
72
|
+
stub_request(:delete, %r{\Ahttps://api\.workos\.com/vault/v1/kv/stub(\?|\z)})
|
|
73
|
+
.to_return(body: "{}", status: 200)
|
|
74
|
+
result = @client.vault.delete_kv(id: "stub")
|
|
75
|
+
refute_nil result
|
|
76
|
+
end
|
|
101
77
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
78
|
+
def test_list_kv_metadata_returns_expected_result
|
|
79
|
+
stub_request(:get, %r{\Ahttps://api\.workos\.com/vault/v1/kv/stub/metadata(\?|\z)})
|
|
80
|
+
.to_return(body: "{}", status: 200)
|
|
81
|
+
result = @client.vault.list_kv_metadata(id: "stub")
|
|
82
|
+
refute_nil result
|
|
105
83
|
end
|
|
106
84
|
|
|
107
|
-
def
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
85
|
+
def test_list_kv_versions_returns_expected_result
|
|
86
|
+
stub_request(:get, %r{\Ahttps://api\.workos\.com/vault/v1/kv/stub/versions(\?|\z)})
|
|
87
|
+
.to_return(body: '{"data": [], "list_metadata": {}}', status: 200)
|
|
88
|
+
result = @client.vault.list_kv_versions(id: "stub")
|
|
89
|
+
assert_kind_of WorkOS::Types::ListStruct, result
|
|
90
|
+
end
|
|
112
91
|
|
|
113
|
-
|
|
114
|
-
|
|
92
|
+
# Parameterized authentication error tests (one per endpoint).
|
|
93
|
+
[
|
|
94
|
+
{name: :create_data_key, verb: :post, url: %r{\Ahttps://api\.workos\.com/vault/v1/keys/data-key(\?|\z)}, args: {context: {}}},
|
|
95
|
+
{name: :create_decrypt, verb: :post, url: %r{\Ahttps://api\.workos\.com/vault/v1/keys/decrypt(\?|\z)}, args: {keys: "stub"}},
|
|
96
|
+
{name: :create_rekey, verb: :post, url: %r{\Ahttps://api\.workos\.com/vault/v1/keys/rekey(\?|\z)}, args: {context: {}, encrypted_keys: "stub"}},
|
|
97
|
+
{name: :list_kv, verb: :get, url: %r{\Ahttps://api\.workos\.com/vault/v1/kv(\?|\z)}},
|
|
98
|
+
{name: :create_kv, verb: :post, url: %r{\Ahttps://api\.workos\.com/vault/v1/kv(\?|\z)}, args: {key_context: {}, name: "stub", value: "stub"}},
|
|
99
|
+
{name: :get_name, verb: :get, url: %r{\Ahttps://api\.workos\.com/vault/v1/kv/name/stub(\?|\z)}, args: {name: "stub"}},
|
|
100
|
+
{name: :get_kv, verb: :get, url: %r{\Ahttps://api\.workos\.com/vault/v1/kv/stub(\?|\z)}, args: {id: "stub"}},
|
|
101
|
+
{name: :update_kv, verb: :put, url: %r{\Ahttps://api\.workos\.com/vault/v1/kv/stub(\?|\z)}, args: {id: "stub", value: "stub"}},
|
|
102
|
+
{name: :delete_kv, verb: :delete, url: %r{\Ahttps://api\.workos\.com/vault/v1/kv/stub(\?|\z)}, args: {id: "stub"}},
|
|
103
|
+
{name: :list_kv_metadata, verb: :get, url: %r{\Ahttps://api\.workos\.com/vault/v1/kv/stub/metadata(\?|\z)}, args: {id: "stub"}},
|
|
104
|
+
{name: :list_kv_versions, verb: :get, url: %r{\Ahttps://api\.workos\.com/vault/v1/kv/stub/versions(\?|\z)}, args: {id: "stub"}}
|
|
105
|
+
].each do |spec|
|
|
106
|
+
define_method("test_#{spec[:name]}_raises_authentication_error_on_401") do
|
|
107
|
+
stub_request(spec[:verb], spec[:url])
|
|
108
|
+
.to_return(body: '{"message": "Unauthorized"}', status: 401)
|
|
109
|
+
assert_raises(WorkOS::AuthenticationError) do
|
|
110
|
+
@client.vault.send(spec[:name], **(spec[:args] || {}))
|
|
111
|
+
end
|
|
112
|
+
end
|
|
115
113
|
end
|
|
116
114
|
|
|
115
|
+
# @oagen-ignore-start — client-side AES-GCM encrypt/decrypt tests (hand-maintained)
|
|
117
116
|
def test_local_encrypt_then_decrypt_roundtrip
|
|
118
117
|
plaintext_key = "k" * 32
|
|
119
118
|
create_resp = {"context" => {"t" => "1"}, "id" => "dek_1",
|
|
@@ -125,7 +124,7 @@ class VaultTest < Minitest::Test
|
|
|
125
124
|
stub_request(:post, "https://api.workos.com/vault/v1/keys/decrypt").to_return(status: 200, body: decrypt_resp.to_json)
|
|
126
125
|
|
|
127
126
|
payload = "the quick brown fox"
|
|
128
|
-
encrypted = @client.vault.encrypt(data: payload,
|
|
127
|
+
encrypted = @client.vault.encrypt(data: payload, context: {"t" => "1"})
|
|
129
128
|
refute_equal payload, encrypted
|
|
130
129
|
|
|
131
130
|
plaintext = @client.vault.decrypt(encrypted_data: encrypted)
|
|
@@ -140,7 +139,7 @@ class VaultTest < Minitest::Test
|
|
|
140
139
|
stub_request(:post, "https://api.workos.com/vault/v1/keys/data-key").to_return(status: 200, body: create_resp.to_json)
|
|
141
140
|
stub_request(:post, "https://api.workos.com/vault/v1/keys/decrypt").to_return(status: 200, body: decrypt_resp.to_json)
|
|
142
141
|
|
|
143
|
-
encrypted = @client.vault.encrypt(data: "secret",
|
|
142
|
+
encrypted = @client.vault.encrypt(data: "secret", context: {}, associated_data: "tenant=42")
|
|
144
143
|
plaintext = @client.vault.decrypt(encrypted_data: encrypted, associated_data: "tenant=42")
|
|
145
144
|
assert_equal "secret", plaintext
|
|
146
145
|
|
|
@@ -148,4 +147,9 @@ class VaultTest < Minitest::Test
|
|
|
148
147
|
@client.vault.decrypt(encrypted_data: encrypted, associated_data: "wrong")
|
|
149
148
|
end
|
|
150
149
|
end
|
|
150
|
+
# @oagen-ignore-end
|
|
151
|
+
|
|
152
|
+
# @oagen-ignore-start — client-side encrypt/decrypt test requires
|
|
153
|
+
require "base64"
|
|
154
|
+
# @oagen-ignore-end
|
|
151
155
|
end
|
|
@@ -60,6 +60,17 @@ class WebhookVerifyTest < Minitest::Test
|
|
|
60
60
|
assert_match(/Timestamp outside the tolerance zone/, err.message)
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
+
def test_verify_header_raises_on_future_timestamp
|
|
64
|
+
payload = '{"x":1}'
|
|
65
|
+
future_ts = now_ms + (10 * 60 * 1000) # 10 minutes ahead
|
|
66
|
+
sig = OpenSSL::HMAC.hexdigest("SHA256", SECRET, "#{future_ts}.#{payload}")
|
|
67
|
+
header = "t=#{future_ts}, v1=#{sig}"
|
|
68
|
+
err = assert_raises(WorkOS::SignatureVerificationError) do
|
|
69
|
+
@webhooks.verify_header(payload: payload, sig_header: header, secret: SECRET, tolerance: 60)
|
|
70
|
+
end
|
|
71
|
+
assert_match(/Timestamp outside the tolerance zone/, err.message)
|
|
72
|
+
end
|
|
73
|
+
|
|
63
74
|
def test_verify_header_raises_on_malformed_header
|
|
64
75
|
assert_raises(WorkOS::SignatureVerificationError) do
|
|
65
76
|
@webhooks.verify_header(payload: "{}", sig_header: "garbage", secret: SECRET)
|