
    &g")                         d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
mZ ddlmZ dd	lmZ dd
lmZ  ej        e          Z G d de
          ZdS )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utils   )AuthorizationEndpoint)BaseEndpointcatch_errors_and_unavailability)IntrospectEndpoint)RevocationEndpoint)TokenEndpointc                   `    e Zd ZdZi dfdZe	 	 dd            ZddZd	 Zd
 Z	d Z
d Zd ZdS )MetadataEndpointa  OAuth2.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
   Tc                     t          |t                    sJ |D ]}t          |t                    sJ t          j        |            || _        || _        || _        |                                 | _        d S )N)	
isinstancedictr   __init__raise_errors	endpointsinitial_claimsvalidate_metadata_serverclaims)selfr   r   r   endpoints        \/var/www/api/venv/lib/python3.11/site-packages/oauthlib/oauth2/rfc6749/endpoints/metadata.pyr   zMetadataEndpoint.__init__(   s    &$'''''! 	6 	6Hh555555d###("$3355    GETNc                 D    ddd}|t          j        | j                  dfS )z!Create metadata response
        zapplication/json*)zContent-TypezAccess-Control-Allow-Origin   )jsondumpsr   )r   urihttp_methodbodyheaderss        r   create_metadata_responsez)MetadataEndpoint.create_metadata_response3   s1     /+.
 
 
4;//44r   Fc                 <   | j         sd S ||vr&|r"t          d                    |                    d S |rt          j        ||                   s)t          d                    |||                             d||         v sd||         v s
d||         v r)t          d                    |||                             d S |rF||                             d          s)t          d                    |||                             d S |rt          ||         t                    s)t          d	                    |||                             ||         D ]C}t          |t                    s*t          d
                    |||         |                    Bd S d S )Nzkey {} is a mandatory metadata.zkey {}: {} must be an HTTPS URL?&#z8key {}: {} must not contain query or fragment componentshttpzkey {}: {} must be an URLzkey {}: {} must be an Arrayz/array {}: {} must contains only string (not {}))	r   
ValueErrorformatr   is_secure_transport
startswithr   liststr)r   arraykeyis_requiredis_listis_url	is_issuerelems           r   validate_metadataz"MetadataEndpoint.validate_metadata>   s     	Fe P !B!I!I#!N!NOOOP P  	v,U3Z88 \ !B!I!I#uUXz!Z!Z[[[eCj  C5:$5$5c
9J9J ![!b!bcfhmnqhr!s!sttt :K9J  		v:((00 V !<!C!CCs!T!TUUUV V  	veCj$// X !>!E!Ec5QT:!V!VWWWc
 v v!$,, v$%V%]%]^achilcmos%t%tuuuv		v 	vv vr   c                 *   | j                             |j                                                    |                    dddg           |                     |dd           |                     |dd           |                     |ddd           d	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_supportedclient_secret_postclient_secret_basicTr5   0token_endpoint_auth_signing_alg_values_supportedtoken_endpointr4   r6   N)_grant_typesextendkeys
setdefaultr9   r   r   r   s      r   validate_metadata_tokenz(MetadataEndpoint.validate_metadata_tokenW   s     	  !6!;!;!=!=>>>ADXZoCpqqqv'NX\]]]v'Ycghhhv'7TRVWWWWWr   c           
         |                     dt          t          d |j                                                                       |                     dddg           d|d         v r| j                            d           |                     |ddd	           |                     |dd
           d|d         v r|j        d         }t          |t          j
                  st          |d          r|j        }|                     dt          |j                                                             |                     |dd
           |                     |ddd           d S )Nresponse_types_supportedc                     | dk    S )Nnone )xs    r   <lambda>zBMetadataEndpoint.validate_metadata_authorization.<locals>.<lambda>g   s
    V r   response_modes_supportedqueryfragmenttokenimplicitT)r4   r5   r>   codedefault_grant code_challenge_methods_supportedauthorization_endpointrA   )rE   r0   filter_response_typesrD   rB   appendr9   r   r   AuthorizationCodeGranthasattrrU   _code_challenge_methods)r   r   r   
code_grants       r   validate_metadata_authorizationz0MetadataEndpoint.validate_metadata_authorizatione   s   4v&;&;X=U=Z=Z=\=\]]^^	` 	` 	`4w
6KLLL
 f7888$$Z000v'At]abbbv'A4PPPV6777!1&9Jj+*LMM 6RYZdfuRvRv 6'5
@":#E#J#J#L#LMMO O O""6+MW["\\\v'?TZ^_____r   c                     |                     dddg           |                     |dd           |                     |dd           |                     |ddd           d S )	N*revocation_endpoint_auth_methods_supportedr<   r=   Tr>   5revocation_endpoint_auth_signing_alg_values_supportedrevocation_endpointrA   rE   r9   rF   s      r   validate_metadata_revocationz-MetadataEndpoint.validate_metadata_revocation|   s    F/1FG	I 	I 	I 	v'S]abbbv'^hlmmmv'<$W[\\\\\r   c                     |                     dddg           |                     |dd           |                     |dd           |                     |ddd           d S )	N-introspection_endpoint_auth_methods_supportedr<   r=   Tr>   8introspection_endpoint_auth_signing_alg_values_supportedintrospection_endpointrA   rd   rF   s      r   validate_metadata_introspectionz0MetadataEndpoint.validate_metadata_introspection   s    I/1FG	I 	I 	I 	v'V`deeev'akopppv'?TZ^_____r   c                 j   t          j        | j                  }|                     |ddd           |                     |dd           |                     |dd           |                     |dd           |                     |d	d           |                     |d
d           |                     |dd           g | _        | j        D ]}t          |t                    r|                     ||           t          |t                    r| 
                    ||           t          |t                    r|                     ||           t          |t                    r|                     ||           |                    d| j                   |                     |dd           |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)r4   r7   jwks_uri)r6   scopes_supportedr>   service_documentationui_locales_supportedop_policy_uri
op_tos_urigrant_types_supported)copydeepcopyr   r9   rB   r   r   r   rG   r   r_   r   re   r
   rj   rE   rF   s      r   r   z)MetadataEndpoint.validate_metadata_server   s   T t233vxTTRRRvz$???v'94HHHv'>tLLLv'=tLLLvtDDDv|DAAA 	G 	GH(M22 ?,,VX>>>($9:: G44VXFFF($677 D11&(CCC($677 G44VXFFF 	143DEEEv'>MMMr   )r   NN)FFFF)__name__
__module____qualname____doc__r   r	   r&   r9   rG   r_   re   rj   r   rL   r   r   r   r      s          *,$ 	6 	6 	6 	6 %DH)-5 5 5 %$5v v v v2X X X` ` `.] ] ]` ` `b b b b br   r   )ry   rt   r    logging r   r   authorizationr   baser   r	   
introspectr
   
revocationr   rR   r   	getLoggerrv   logr   rL   r   r   <module>r      s        ! ! ! ! ! ! ! ! 0 0 0 0 0 0 ? ? ? ? ? ? ? ? * * * * * * * * * * * *            g!!W W W W W| W W W W Wr   