xtr-security-http 5.2.0__tar.gz → 6.0.0__tar.gz
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.
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/PKG-INFO +19 -17
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/README.md +4 -2
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/pyproject.toml +19 -19
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/pyproject.toml.orig +19 -19
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oidc/oidc_token_handler.py +26 -3
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/decorator/is_csrf_token_valid.py +3 -1
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/firewall.py +12 -4
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oidc/oidc_id_token.py +3 -1
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oidc/oidc_signature_verifier.py +7 -2
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/LICENSE +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/_challenge.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/_parked_session.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/_request_parameters.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/_security_state.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_map.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_map_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/access_token_extractor_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/access_token_handler_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/chain_access_token_extractor.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/form_encoded_body_extractor.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/header_access_token_extractor.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oauth2/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oauth2/_introspected_user.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oauth2/_introspection_claims.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oauth2/_signed_response.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oauth2/_signed_response_discovery.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oauth2/oauth2_token_handler.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oidc/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oidc/exception/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oidc/exception/invalid_signature_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oidc/exception/missing_claim_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oidc/exception/oidc_key_set_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oidc/oidc_token_generator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oidc/oidc_trait.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/oidc/oidc_user_info_token_handler.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/query_access_token_extractor.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/sender_constraint_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/_authentication_outcome.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/_manager_reporting.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/_referer.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/_sensitive.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/_supports_pass.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/authentication_failure_handler_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/authentication_success_handler_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/authentication_utils.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/authenticator_manager.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/authenticator_manager_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/custom_authentication_failure_handler.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/custom_authentication_success_handler.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/default_authentication_failure_handler.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/default_authentication_success_handler.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/expose_security_level.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/user_authenticator_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/_access_token_challenge.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/_access_token_scopes.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/_form_login_credentials.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/_oidc_login_attempts.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/_oidc_login_authorization.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/_oidc_login_callback.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/_oidc_login_claims.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/_oidc_login_options.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/_oidc_login_public_client.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/_oidc_login_token.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/abstract_authenticator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/abstract_login_form_authenticator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/abstract_pre_authenticated_authenticator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/access_token_authenticator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/authenticator_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/debug/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/debug/traceable_authenticator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/debug/traceable_authenticator_manager_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/debug/unsupported_reasons.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/fallback_user_loader.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/form_login_authenticator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/http_basic_authenticator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/interactive_authenticator_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/json_login_authenticator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/login_link_authenticator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/oidc/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/oidc/oidc_jwks.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/oidc_login_authenticator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/badge/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/badge/authentication_method_badge.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/badge/badge_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/badge/csrf_token_badge.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/badge/password_upgrade_badge.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/badge/pre_authenticated_user_badge.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/badge/remember_me_badge.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/badge/user_badge.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/credentials/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/credentials/credentials_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/credentials/custom_credentials.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/credentials/password_credentials.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/passport.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/passport/self_validating_passport.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/remember_me_authenticator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/remote_user_authenticator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/token/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/token/post_authentication_token.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/x509_authenticator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authorization/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authorization/access_denied_handler_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authorization/insufficient_scope_access_denied_handler.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authorization/oauth2_scope_voter.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/command/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/command/_registry.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/command/oidc_token_generate_command.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/decorator/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/decorator/_methods.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/decorator/current_token.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/decorator/current_user.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/decorator/firewall_listener_order.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/decorator/is_granted.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/decorator/is_granted_context.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/entry_point/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/entry_point/authentication_entry_point_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/entry_point/fallback_authentication_entry_point_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/entry_point/re_authentication_entry_point_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event/authentication_token_created_event.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event/check_passport_event.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event/check_refreshed_user_event.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event/interactive_login_event.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event/login_failure_event.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event/login_success_event.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event/logout_event.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event/oidc_authorization_request_event.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event/switch_user_event.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event/token_deauthenticated_event.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/authentication_proofs_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/check_credentials_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/check_remember_me_conditions_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/clear_site_data_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/cleared_cookie.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/cookie_clearing_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/csrf_protection_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/csrf_token_clearing_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/default_logout_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/login_throttling_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/oidc_back_channel_logout_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/oidc_end_session_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/password_migrating_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/remember_me_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/save_session_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/session_logout_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/session_strategy_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/user_checker_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/event_listener/user_provider_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/expired_login_link_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/impersonation_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/invalid_access_token_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/invalid_csrf_token_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/invalid_login_link_authentication_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/invalid_login_link_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/invalid_login_link_error_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/invalid_session_strategy_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/logout_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/missing_session_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/missing_state_bag_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/oidc_invalid_grant_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/oidc_session_ended_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/exception/unknown_firewall_error.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/_exception_answers.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/_re_authentication.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/_switch_load.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/_switch_request.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/_switch_uri.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/_user_refresh.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/abstract_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/access_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/authenticator_manager_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/channel_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/context_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/exception_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/firewall_listener_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/logout_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/oidc_token_refresh_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/refresh_user_result.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/switch_user_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/user_changed.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall_context_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall_map.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall_map_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/http_utils.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/impersonate/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/impersonate/impersonate_url_generator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/impersonate/impersonation_form.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/impersonate/switch_user_config.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/impersonate/switch_user_config_lookup_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/login_link/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/login_link/_presented_link.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/login_link/login_link_details.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/login_link/login_link_handler.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/login_link/login_link_handler_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/logout/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/logout/logout_form.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/logout/logout_url_generator.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/access_token_type/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/access_token_type/access_token_type_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/access_token_type/bearer_token_type.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/client_authentication/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/client_authentication/abstract_client_assertion.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/client_authentication/abstract_tls_client_auth.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/client_authentication/client_authentication_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/client_authentication/client_secret_basic.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/client_authentication/client_secret_jwt.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/client_authentication/client_secret_post.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/client_authentication/no_client_authentication.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/client_authentication/private_key_jwt.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/client_authentication/self_signed_tls_client_auth.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/client_authentication/tls_client_auth.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oauth2/jws_algorithms.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oidc/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oidc/discovery_oidc_key_set_provider.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oidc/oidc_back_channel_logout.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oidc/oidc_client.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oidc/oidc_client_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oidc/oidc_discovery.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oidc/oidc_ended_sessions.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oidc/oidc_jwks.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oidc/oidc_logout_token.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oidc/oidc_token_refresher.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/py.typed +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/rate_limiter/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/rate_limiter/default_login_rate_limiter.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/remember_me/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/remember_me/_signature_digest.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/remember_me/abstract_remember_me_handler.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/remember_me/persistent_remember_me_handler.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/remember_me/remember_me_cookie.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/remember_me/remember_me_details.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/remember_me/remember_me_handler_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/remember_me/response_listener.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/remember_me/signature_remember_me_handler.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/resolver/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/resolver/csrf_token_checker.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/resolver/is_granted_checker.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/resolver/security_token_resolver.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/resolver/user_value_resolver.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/security_events.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/security_request_attributes.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/session/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/session/session_authentication_strategy.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/session/session_authentication_strategy_interface.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/util/__init__.py +0 -0
- {xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/util/target_path.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: xtr-security-http
|
|
3
|
-
Version:
|
|
3
|
+
Version: 6.0.0
|
|
4
4
|
Summary: The HTTP edge of xtr security: firewalls, authenticators, bearer access tokens and the request surface.
|
|
5
5
|
Keywords: security,authentication,firewall,fastapi,oauth2
|
|
6
6
|
Author: Xterr
|
|
@@ -14,20 +14,20 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.13
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.14
|
|
16
16
|
Classifier: Typing :: Typed
|
|
17
|
-
Requires-Dist: xtr-security-core>=
|
|
18
|
-
Requires-Dist: xtr-security-csrf>=
|
|
19
|
-
Requires-Dist: xtr-http-kernel>=
|
|
20
|
-
Requires-Dist: xtr-http-foundation>=
|
|
21
|
-
Requires-Dist: xtr-http-message-contracts>=
|
|
22
|
-
Requires-Dist: xtr-http-client-contracts>=
|
|
23
|
-
Requires-Dist: xtr-cache-contracts>=
|
|
24
|
-
Requires-Dist: xtr-dependency-injection>=
|
|
25
|
-
Requires-Dist: xtr-event-dispatcher>=
|
|
26
|
-
Requires-Dist: xtr-event-dispatcher-contracts>=
|
|
27
|
-
Requires-Dist: xtr-clock>=
|
|
28
|
-
Requires-Dist: xtr-logging-contracts>=
|
|
29
|
-
Requires-Dist: xtr-password-hasher>=
|
|
30
|
-
Requires-Dist: xtr-rate-limiter>=
|
|
17
|
+
Requires-Dist: xtr-security-core>=6.0,<7
|
|
18
|
+
Requires-Dist: xtr-security-csrf>=6.0,<7
|
|
19
|
+
Requires-Dist: xtr-http-kernel>=6.0,<7
|
|
20
|
+
Requires-Dist: xtr-http-foundation>=6.0,<7
|
|
21
|
+
Requires-Dist: xtr-http-message-contracts>=6.0,<7
|
|
22
|
+
Requires-Dist: xtr-http-client-contracts>=6.0,<7
|
|
23
|
+
Requires-Dist: xtr-cache-contracts>=6.0,<7
|
|
24
|
+
Requires-Dist: xtr-dependency-injection>=6.0,<7
|
|
25
|
+
Requires-Dist: xtr-event-dispatcher>=6.0,<7
|
|
26
|
+
Requires-Dist: xtr-event-dispatcher-contracts>=6.0,<7
|
|
27
|
+
Requires-Dist: xtr-clock>=6.0,<7
|
|
28
|
+
Requires-Dist: xtr-logging-contracts>=6.0,<7
|
|
29
|
+
Requires-Dist: xtr-password-hasher>=6.0,<7
|
|
30
|
+
Requires-Dist: xtr-rate-limiter>=6.0,<7
|
|
31
31
|
Requires-Dist: fastapi>=0.123
|
|
32
32
|
Requires-Dist: starlette>=0.40
|
|
33
33
|
Requires-Dist: anyio>=4.0
|
|
@@ -215,8 +215,10 @@ dispatcher. At the request it matches the map, runs the matched firewall's chain
|
|
|
215
215
|
routing, so a request no route would answer is still challenged as a request — and parks the
|
|
216
216
|
matched firewall and its exception listener on the request's security state; a failure the
|
|
217
217
|
chain raises is announced on the exception event and answered by that listener, exactly once;
|
|
218
|
-
|
|
219
|
-
the
|
|
218
|
+
a failure no listener answers is raised as it was raised, so the request fails rather than
|
|
219
|
+
going on with the rest of the chain — the access decision included — never asked. The finish
|
|
220
|
+
of the request puts the stored listener away. A route documents its security with the
|
|
221
|
+
framework's own params; the firewall contributes no OpenAPI scheme of its own.
|
|
220
222
|
|
|
221
223
|
### Firewall listeners
|
|
222
224
|
|
|
@@ -176,8 +176,10 @@ dispatcher. At the request it matches the map, runs the matched firewall's chain
|
|
|
176
176
|
routing, so a request no route would answer is still challenged as a request — and parks the
|
|
177
177
|
matched firewall and its exception listener on the request's security state; a failure the
|
|
178
178
|
chain raises is announced on the exception event and answered by that listener, exactly once;
|
|
179
|
-
|
|
180
|
-
the
|
|
179
|
+
a failure no listener answers is raised as it was raised, so the request fails rather than
|
|
180
|
+
going on with the rest of the chain — the access decision included — never asked. The finish
|
|
181
|
+
of the request puts the stored listener away. A route documents its security with the
|
|
182
|
+
framework's own params; the firewall contributes no OpenAPI scheme of its own.
|
|
181
183
|
|
|
182
184
|
### Firewall listeners
|
|
183
185
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "xtr-security-http"
|
|
3
|
-
version = "
|
|
3
|
+
version = "6.0.0"
|
|
4
4
|
description = "The HTTP edge of xtr security: firewalls, authenticators, bearer access tokens and the request surface."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -23,20 +23,20 @@ classifiers = [
|
|
|
23
23
|
"Typing :: Typed",
|
|
24
24
|
]
|
|
25
25
|
dependencies = [
|
|
26
|
-
"xtr-security-core>=
|
|
27
|
-
"xtr-security-csrf>=
|
|
28
|
-
"xtr-http-kernel>=
|
|
29
|
-
"xtr-http-foundation>=
|
|
30
|
-
"xtr-http-message-contracts>=
|
|
31
|
-
"xtr-http-client-contracts>=
|
|
32
|
-
"xtr-cache-contracts>=
|
|
33
|
-
"xtr-dependency-injection>=
|
|
34
|
-
"xtr-event-dispatcher>=
|
|
35
|
-
"xtr-event-dispatcher-contracts>=
|
|
36
|
-
"xtr-clock>=
|
|
37
|
-
"xtr-logging-contracts>=
|
|
38
|
-
"xtr-password-hasher>=
|
|
39
|
-
"xtr-rate-limiter>=
|
|
26
|
+
"xtr-security-core>=6.0,<7",
|
|
27
|
+
"xtr-security-csrf>=6.0,<7",
|
|
28
|
+
"xtr-http-kernel>=6.0,<7",
|
|
29
|
+
"xtr-http-foundation>=6.0,<7",
|
|
30
|
+
"xtr-http-message-contracts>=6.0,<7",
|
|
31
|
+
"xtr-http-client-contracts>=6.0,<7",
|
|
32
|
+
"xtr-cache-contracts>=6.0,<7",
|
|
33
|
+
"xtr-dependency-injection>=6.0,<7",
|
|
34
|
+
"xtr-event-dispatcher>=6.0,<7",
|
|
35
|
+
"xtr-event-dispatcher-contracts>=6.0,<7",
|
|
36
|
+
"xtr-clock>=6.0,<7",
|
|
37
|
+
"xtr-logging-contracts>=6.0,<7",
|
|
38
|
+
"xtr-password-hasher>=6.0,<7",
|
|
39
|
+
"xtr-rate-limiter>=6.0,<7",
|
|
40
40
|
"fastapi>=0.123",
|
|
41
41
|
"starlette>=0.40",
|
|
42
42
|
"anyio>=4.0",
|
|
@@ -59,10 +59,10 @@ dev = [
|
|
|
59
59
|
"anyio>=4.0",
|
|
60
60
|
"ty>=0.0.83",
|
|
61
61
|
"joserfc>=1.7",
|
|
62
|
-
"xtr-http-message>=
|
|
63
|
-
"xtr-http-client>=
|
|
64
|
-
"xtr-cache>=
|
|
65
|
-
"xtr-console>=
|
|
62
|
+
"xtr-http-message>=6.0,<7",
|
|
63
|
+
"xtr-http-client>=6.0,<7",
|
|
64
|
+
"xtr-cache>=6.0,<7",
|
|
65
|
+
"xtr-console>=6.0,<7",
|
|
66
66
|
]
|
|
67
67
|
|
|
68
68
|
[build-system]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "xtr-security-http"
|
|
3
|
-
version = "
|
|
3
|
+
version = "6.0.0"
|
|
4
4
|
description = "The HTTP edge of xtr security: firewalls, authenticators, bearer access tokens and the request surface."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -20,24 +20,24 @@ classifiers = [
|
|
|
20
20
|
"Typing :: Typed",
|
|
21
21
|
]
|
|
22
22
|
dependencies = [
|
|
23
|
-
"xtr-security-core>=
|
|
24
|
-
"xtr-security-csrf>=
|
|
25
|
-
"xtr-http-kernel>=
|
|
26
|
-
"xtr-http-foundation>=
|
|
27
|
-
"xtr-http-message-contracts>=
|
|
23
|
+
"xtr-security-core>=6.0,<7",
|
|
24
|
+
"xtr-security-csrf>=6.0,<7",
|
|
25
|
+
"xtr-http-kernel>=6.0,<7",
|
|
26
|
+
"xtr-http-foundation>=6.0,<7",
|
|
27
|
+
"xtr-http-message-contracts>=6.0,<7",
|
|
28
28
|
# The client interface the introspection endpoint is reached through; the client
|
|
29
29
|
# itself is installed by the application that introspects.
|
|
30
|
-
"xtr-http-client-contracts>=
|
|
30
|
+
"xtr-http-client-contracts>=6.0,<7",
|
|
31
31
|
# The cache contract the introspection responses are cached under; the pool
|
|
32
32
|
# behind it is the application's choice.
|
|
33
|
-
"xtr-cache-contracts>=
|
|
34
|
-
"xtr-dependency-injection>=
|
|
35
|
-
"xtr-event-dispatcher>=
|
|
36
|
-
"xtr-event-dispatcher-contracts>=
|
|
37
|
-
"xtr-clock>=
|
|
38
|
-
"xtr-logging-contracts>=
|
|
39
|
-
"xtr-password-hasher>=
|
|
40
|
-
"xtr-rate-limiter>=
|
|
33
|
+
"xtr-cache-contracts>=6.0,<7",
|
|
34
|
+
"xtr-dependency-injection>=6.0,<7",
|
|
35
|
+
"xtr-event-dispatcher>=6.0,<7",
|
|
36
|
+
"xtr-event-dispatcher-contracts>=6.0,<7",
|
|
37
|
+
"xtr-clock>=6.0,<7",
|
|
38
|
+
"xtr-logging-contracts>=6.0,<7",
|
|
39
|
+
"xtr-password-hasher>=6.0,<7",
|
|
40
|
+
"xtr-rate-limiter>=6.0,<7",
|
|
41
41
|
"fastapi>=0.123",
|
|
42
42
|
"starlette>=0.40",
|
|
43
43
|
"anyio>=4.0",
|
|
@@ -59,12 +59,12 @@ dev = [
|
|
|
59
59
|
"ty>=0.0.83",
|
|
60
60
|
"joserfc>=1.7",
|
|
61
61
|
# The tests match real requests, so they build the request messages.
|
|
62
|
-
"xtr-http-message>=
|
|
62
|
+
"xtr-http-message>=6.0,<7",
|
|
63
63
|
# The tests drive the introspection endpoint through the scripted client and
|
|
64
64
|
# cache the responses in the in-memory pool.
|
|
65
|
-
"xtr-http-client>=
|
|
66
|
-
"xtr-cache>=
|
|
67
|
-
"xtr-console>=
|
|
65
|
+
"xtr-http-client>=6.0,<7",
|
|
66
|
+
"xtr-cache>=6.0,<7",
|
|
67
|
+
"xtr-console>=6.0,<7",
|
|
68
68
|
]
|
|
69
69
|
|
|
70
70
|
[build-system]
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from typing import TYPE_CHECKING, cast, final
|
|
6
6
|
|
|
7
|
-
from joserfc import jwt
|
|
7
|
+
from joserfc import jws, jwt
|
|
8
8
|
from joserfc.errors import InvalidKeyIdError, JoseError
|
|
9
9
|
from joserfc.jwt import JWTClaimsRegistry
|
|
10
10
|
from xtr_clock import SystemClock
|
|
@@ -122,15 +122,23 @@ class OidcTokenHandler:
|
|
|
122
122
|
async def _decode(self, access_token: str) -> Token:
|
|
123
123
|
"""Verify the signature, refetching the key set once on an unknown ``kid``.
|
|
124
124
|
|
|
125
|
+
A header nesting deeper than the decoder follows is read before the
|
|
126
|
+
signature can be checked, and ends in a ``RecursionError`` on some
|
|
127
|
+
interpreters: the token cannot be read, so it is refused as any other.
|
|
128
|
+
A header that is no JSON object is refused before joserfc judges it,
|
|
129
|
+
and one whose members have the wrong shape — a ``crit`` that is no
|
|
130
|
+
list of names — fails joserfc's own check with a ``TypeError``.
|
|
131
|
+
|
|
125
132
|
Raises:
|
|
126
133
|
InvalidAccessTokenError: When the token cannot be verified.
|
|
127
134
|
"""
|
|
128
135
|
try:
|
|
136
|
+
_require_object_header(access_token)
|
|
129
137
|
key_set = await self._key_set_provider.get_key_set()
|
|
130
138
|
return jwt.decode(access_token, key_set, algorithms=list(self._algorithms))
|
|
131
139
|
except InvalidKeyIdError as error:
|
|
132
140
|
return await self._decode_after_refresh(access_token, error)
|
|
133
|
-
except (JoseError, OidcKeySetError, ValueError) as error:
|
|
141
|
+
except (JoseError, OidcKeySetError, ValueError, TypeError, RecursionError) as error:
|
|
134
142
|
raise InvalidAccessTokenError(f"The token could not be verified: {error}") from error
|
|
135
143
|
|
|
136
144
|
async def _decode_after_refresh(self, access_token: str, cause: InvalidKeyIdError) -> Token:
|
|
@@ -142,7 +150,7 @@ class OidcTokenHandler:
|
|
|
142
150
|
try:
|
|
143
151
|
key_set = await self._key_set_provider.get_key_set(force_refresh=True)
|
|
144
152
|
return jwt.decode(access_token, key_set, algorithms=list(self._algorithms))
|
|
145
|
-
except (JoseError, OidcKeySetError, ValueError) as error:
|
|
153
|
+
except (JoseError, OidcKeySetError, ValueError, TypeError, RecursionError) as error:
|
|
146
154
|
raise InvalidAccessTokenError(
|
|
147
155
|
f"The token names an unknown key: {cause}",
|
|
148
156
|
) from error
|
|
@@ -248,3 +256,18 @@ def _scopes(claims: Mapping[str, object]) -> list[str]:
|
|
|
248
256
|
if isinstance(scp, (list, tuple)):
|
|
249
257
|
return [str(one) for one in cast("Sequence[object]", scp)]
|
|
250
258
|
return []
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
def _require_object_header(access_token: str) -> None:
|
|
262
|
+
"""Refuse a token whose protected header is no JSON object.
|
|
263
|
+
|
|
264
|
+
joserfc reads the header's members by name, so an array or a string
|
|
265
|
+
standing where the object should be is turned away here, before it is
|
|
266
|
+
judged.
|
|
267
|
+
|
|
268
|
+
Raises:
|
|
269
|
+
InvalidAccessTokenError: When the header is no JSON object.
|
|
270
|
+
"""
|
|
271
|
+
header = cast("object", jws.extract_compact(access_token.encode()).headers())
|
|
272
|
+
if not isinstance(header, dict):
|
|
273
|
+
raise InvalidAccessTokenError("The token header is not a JSON object.")
|
|
@@ -108,8 +108,10 @@ async def _payload_value(request: Request, token_key: str) -> str | None:
|
|
|
108
108
|
"""Read the value from the request payload: the JSON body, else the parsed form."""
|
|
109
109
|
try:
|
|
110
110
|
payload = cast("object", await request.json())
|
|
111
|
-
except ValueError:
|
|
111
|
+
except (ValueError, RecursionError):
|
|
112
112
|
# A body that is not JSON is not an error: the form is the payload then.
|
|
113
|
+
# Nesting deeper than the parser goes is a RecursionError, not a ValueError,
|
|
114
|
+
# and is the same body that does not decode.
|
|
113
115
|
payload = None
|
|
114
116
|
if isinstance(payload, dict):
|
|
115
117
|
value = cast("Mapping[str, object]", payload).get(token_key)
|
{xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/firewall/firewall.py
RENAMED
|
@@ -67,8 +67,12 @@ class Firewall(EventSubscriberInterface):
|
|
|
67
67
|
answers it — the matched firewall's stored listener first, the
|
|
68
68
|
listeners that only observe the failure after it — has its response
|
|
69
69
|
set on the request's event, so the request is answered rather than
|
|
70
|
-
failing. A
|
|
71
|
-
|
|
70
|
+
failing. A failure no listener answers is raised as it was raised: the
|
|
71
|
+
steps after the one that failed — the access decision among them — never
|
|
72
|
+
ran, so letting the request go on would hand the route a request nobody
|
|
73
|
+
decided about. The firewall fails closed, and the request fails with the
|
|
74
|
+
error. A caller driving the events by hand, with no dispatcher handed to
|
|
75
|
+
``on_request``, sees every failure raise as it was raised.
|
|
72
76
|
|
|
73
77
|
The kernel has one lifecycle per request — no request is handled inside
|
|
74
78
|
another — so the main-request-only guard the upstream subscriber opens
|
|
@@ -123,6 +127,9 @@ class Firewall(EventSubscriberInterface):
|
|
|
123
127
|
dispatcher: Where a failure the chain raises is announced. The
|
|
124
128
|
dispatcher passes itself; a caller driving the events by
|
|
125
129
|
hand leaves it out and sees the failure raise.
|
|
130
|
+
|
|
131
|
+
Raises:
|
|
132
|
+
Exception: Whatever a step raised, when no listener answered it.
|
|
126
133
|
"""
|
|
127
134
|
del name
|
|
128
135
|
context = await self._firewall_map.match(event.request)
|
|
@@ -148,8 +155,9 @@ class Firewall(EventSubscriberInterface):
|
|
|
148
155
|
raise
|
|
149
156
|
failure = ExceptionEvent(event.request, event.state, error)
|
|
150
157
|
_ = await dispatcher.dispatch(failure)
|
|
151
|
-
if failure.response is
|
|
152
|
-
|
|
158
|
+
if failure.response is None:
|
|
159
|
+
raise
|
|
160
|
+
event.set_response(failure.response)
|
|
153
161
|
|
|
154
162
|
async def on_exception(self, event: ExceptionEvent) -> None:
|
|
155
163
|
"""Route the failure to the listener of the firewall that ran the request.
|
{xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/oidc/oidc_id_token.py
RENAMED
|
@@ -66,7 +66,9 @@ class OidcIdToken:
|
|
|
66
66
|
raise AuthenticationError("Invalid ID token format.") from error
|
|
67
67
|
try:
|
|
68
68
|
claims = cast("object", json.loads(payload or b""))
|
|
69
|
-
except ValueError as error:
|
|
69
|
+
except (ValueError, RecursionError) as error:
|
|
70
|
+
# A nesting deeper than the decoder follows is a payload it
|
|
71
|
+
# cannot read, whichever of the two the interpreter raises.
|
|
70
72
|
raise AuthenticationError("Invalid ID token payload.") from error
|
|
71
73
|
if not isinstance(claims, dict):
|
|
72
74
|
raise AuthenticationError("Invalid ID token payload.")
|
|
@@ -126,7 +126,10 @@ class OidcSignatureVerifier:
|
|
|
126
126
|
# any request is sent to its JWKS — and no MAC algorithm is ever
|
|
127
127
|
# accepted, so a public key published by the provider can never be
|
|
128
128
|
# turned into the shared secret of an "HS256" token (key confusion).
|
|
129
|
-
|
|
129
|
+
protected = cast("object", signature.headers())
|
|
130
|
+
if not isinstance(protected, dict):
|
|
131
|
+
raise AuthenticationError("Invalid ID token format: the header is not a JSON object.")
|
|
132
|
+
headers = cast("Mapping[str, object]", protected)
|
|
130
133
|
algorithm = headers.get("alg")
|
|
131
134
|
if not isinstance(algorithm, str) or algorithm not in self._algorithms:
|
|
132
135
|
expected = '", "'.join(self._algorithms)
|
|
@@ -145,7 +148,9 @@ class OidcSignatureVerifier:
|
|
|
145
148
|
key_set = _key_set(keys)
|
|
146
149
|
try:
|
|
147
150
|
token = jwt.decode(id_token, key_set, algorithms=list(self._algorithms))
|
|
148
|
-
except (JoseError, ValueError) as error:
|
|
151
|
+
except (JoseError, ValueError, TypeError) as error:
|
|
152
|
+
# A header member of the wrong shape (a ``crit`` that is no list
|
|
153
|
+
# of names) fails joserfc's header check with a TypeError.
|
|
149
154
|
raise AuthenticationError(
|
|
150
155
|
f"The ID token signature could not be verified: {error}",
|
|
151
156
|
) from error
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/_parked_session.py
RENAMED
|
File without changes
|
{xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/_request_parameters.py
RENAMED
|
File without changes
|
{xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/_security_state.py
RENAMED
|
File without changes
|
|
File without changes
|
{xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_map_interface.py
RENAMED
|
File without changes
|
{xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/access_token/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authentication/_referer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authenticator/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xtr_security_http-5.2.0 → xtr_security_http-6.0.0}/src/xtr_security_http/authorization/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|