o a)@sdZddlZddlZddlZddlmZddlmZddlm Z m Z ddl m Z dd l mZdd lmZeeZGd d d e ZdS) z oauthlib.oauth2.rfc6749.endpoint.metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ An implementation of the `OAuth 2.0 Authorization Server Metadata`. .. _`OAuth 2.0 Authorization Server Metadata`: https://tools.ietf.org/html/rfc8414 N) grant_types)AuthorizationEndpoint) BaseEndpointcatch_errors_and_unavailability)IntrospectEndpoint)RevocationEndpoint) TokenEndpointc@sbeZdZdZidfddZe  dddZdd d Zd d ZddZ ddZ ddZ ddZ dS)MetadataEndpointaOAuth2.0 Authorization Server Metadata endpoint. This specification generalizes the metadata format defined by `OpenID Connect Discovery 1.0` in a way that is compatible with OpenID Connect Discovery while being applicable to a wider set of OAuth 2.0 use cases. This is intentionally parallel to the way that OAuth 2.0 Dynamic Client Registration Protocol [`RFC7591`_] generalized the dynamic client registration mechanisms defined by OpenID Connect Dynamic Client Registration 1.0 in a way that is compatible with it. .. _`OpenID Connect Discovery 1.0`: https://openid.net/specs/openid-connect-discovery-1_0.html .. _`RFC7591`: https://tools.ietf.org/html/rfc7591 TcCsPt|tsJ|D] }t|tsJq t|||_||_||_||_dS)N) isinstancedictr__init__ raise_errors endpointsinitial_claimsvalidate_metadata_serverclaims)selfrrrendpointrL/usr/lib/python3/dist-packages/oauthlib/oauth2/rfc6749/endpoints/metadata.pyr(s zMetadataEndpoint.__init__GETNcCsddd}|t|jdfS)z!Create metadata response zapplication/json*)z Content-TypezAccess-Control-Allow-Origin)jsondumpsr)ruri http_methodbodyheadersrrrcreate_metadata_response3sz)MetadataEndpoint.create_metadata_responseFcCs|jsdS||vr|rtd|dS|rE||ds'td|||d||vs9d||vs9d||vrCtd|||dS|rZ||dsXtd |||dS|rt||tsmtd |||||D]}t|tstd ||||qqdSdS) Nzkey {} is a mandatory metadata.httpszkey {}: {} must be an HTTPS URL?&#z8key {}: {} must not contain query or fragment componentshttpzkey {}: {} must be an URLzkey {}: {} must be an Arrayz/array {}: {} must contains only string (not {}))r ValueErrorformat startswithr liststr)rarraykey is_requiredis_listis_url is_issuerelemrrrvalidate_metadata>s2$  z"MetadataEndpoint.validate_metadatacCsX|j|j|dddg|j|ddd|j|ddd|j|ddddd S) z If the token endpoint is used in the grant type, the value of this parameter MUST be the same as the value of the "grant_type" parameter passed to the token endpoint defined in the grant type definition. %token_endpoint_auth_methods_supportedclient_secret_postclient_secret_basicTr/0token_endpoint_auth_signing_alg_values_supportedtoken_endpointr.r0N) _grant_typesextendkeys setdefaultr3rrrrrrvalidate_metadata_tokenWs z(MetadataEndpoint.validate_metadata_tokencCs|dttdd|j|dddgd|dvr$|jd|j|dd d d |j|dd d d |dvra|jd }t|t j sNt |d rN|j }|dt|j |j|dd d |j|dd d ddS)Nresponse_types_supportedcSs|dkS)Nnoner)xrrrgszBMetadataEndpoint.validate_metadata_authorization..response_modes_supportedqueryfragmenttokenimplicitT)r.r/r7code default_grant code_challenge_methods_supportedauthorization_endpointr:)r>r*filter_response_typesr=r;appendr3r rAuthorizationCodeGranthasattrrK_code_challenge_methods)rrr code_grantrrrvalidate_metadata_authorizationes"     z0MetadataEndpoint.validate_metadata_authorizationcCF|dddg|j|ddd|j|ddd|j|dddddS) N*revocation_endpoint_auth_methods_supportedr5r6Tr75revocation_endpoint_auth_signing_alg_values_supportedrevocation_endpointr:r>r3r?rrrvalidate_metadata_revocation| z-MetadataEndpoint.validate_metadata_revocationcCrV) N-introspection_endpoint_auth_methods_supportedr5r6Tr78introspection_endpoint_auth_signing_alg_values_supportedintrospection_endpointr:rZr?rrrvalidate_metadata_introspectionr\z0MetadataEndpoint.validate_metadata_introspectioncCs t|j}|j|dddd|j|ddd|j|ddd|j|ddd|j|d dd|j|d dd|j|d ddg|_|jD].}t|trR|||t|t r]| ||t|t rh| ||t|t rs|||qE|d |j|j|d dd|S) a Authorization servers can have metadata describing their configuration. The following authorization server metadata values are used by this specification. More details can be found in `RFC8414 section 2`_ : issuer REQUIRED authorization_endpoint URL of the authorization server's authorization endpoint [`RFC6749#Authorization`_]. This is REQUIRED unless no grant types are supported that use the authorization endpoint. token_endpoint URL of the authorization server's token endpoint [`RFC6749#Token`_]. This is REQUIRED unless only the implicit grant type is supported. scopes_supported RECOMMENDED. response_types_supported REQUIRED. Other OPTIONAL fields: jwks_uri, registration_endpoint, response_modes_supported grant_types_supported OPTIONAL. JSON array containing a list of the OAuth 2.0 grant type values that this authorization server supports. The array values used are the same as those used with the "grant_types" parameter defined by "OAuth 2.0 Dynamic Client Registration Protocol" [`RFC7591`_]. If omitted, the default value is "["authorization_code", "implicit"]". token_endpoint_auth_methods_supported token_endpoint_auth_signing_alg_values_supported service_documentation ui_locales_supported op_policy_uri op_tos_uri revocation_endpoint revocation_endpoint_auth_methods_supported revocation_endpoint_auth_signing_alg_values_supported introspection_endpoint introspection_endpoint_auth_methods_supported introspection_endpoint_auth_signing_alg_values_supported code_challenge_methods_supported Additional authorization server metadata parameters MAY also be used. Some are defined by other specifications, such as OpenID Connect Discovery 1.0 [`OpenID.Discovery`_]. .. _`RFC8414 section 2`: https://tools.ietf.org/html/rfc8414#section-2 .. _`RFC6749#Authorization`: https://tools.ietf.org/html/rfc6749#section-3.1 .. _`RFC6749#Token`: https://tools.ietf.org/html/rfc6749#section-3.2 .. _`RFC7591`: https://tools.ietf.org/html/rfc7591 .. _`OpenID.Discovery`: https://openid.net/specs/openid-connect-discovery-1_0.html issuerT)r.r1jwks_uri)r0scopes_supportedr7service_documentationui_locales_supported op_policy_uri op_tos_urigrant_types_supported)copydeepcopyrr3r;rr r r@rrUr r[rr`r>r?rrrrs, J         z)MetadataEndpoint.validate_metadata_server)rNN)FFFF) __name__ __module__ __qualname____doc__rrr!r3r@rUr[r`rrrrrr s   r )rnrirloggingr authorizationrbaserr introspectr revocationr rHr getLoggerrklogr rrrrs