
    ?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y)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                   X    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y)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              rJ  t        j                  |        || _        || _        || _        | j                         | _        y )N)	
isinstancedictr   __init__raise_errors	endpointsinitial_claimsvalidate_metadata_serverclaims)selfr   r   r   endpoints        _/var/www/openai/venv/lib/python3.12/site-packages/oauthlib/oauth2/rfc6749/endpoints/metadata.pyr   zMetadataEndpoint.__init__(   sc    &$'''!Hh555 " 	d#("$335    Nc                 P    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   s-     /+.
 

4;;/44r   c                 |   | j                   sy ||vr|rt        dj                  |            y |rjt        j                  ||         st        dj                  |||               d||   v sd||   v sd||   v rt        dj                  |||               y |r3||   j                  d      st        dj                  |||               y |rkt        ||   t              st        d	j                  |||               ||   D ]1  }t        |t              rt        d
j                  |||   |             y y )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^     e !B!I!I#!NOO  ,,U3Z8 !B!I!I#uUXz!Z[[eCj C5:$5c
9J ![!b!bcfhmnqhr!stt :K :((0 !<!C!CCs!TUU 1 eCj$/ !>!E!Ec5QT:!VWWc
!$,$%V%]%]^achilcmos%tuu # r   c                    | j                   j                  |j                   j                                |j                  dddg       | j	                  |dd       | j	                  |dd       | j	                  |ddd       y	)
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r4   0token_endpoint_auth_signing_alg_values_supportedtoken_endpointr3   r5   N)_grant_typesextendkeys
setdefaultr8   r   r   r   s      r   validate_metadata_tokenz(MetadataEndpoint.validate_metadata_tokenW   s     	  !6!6!;!;!=>ADXZoCpqv'NX\]v'Ycghv'7TRVWr   c           
         |j                  dt        t        d |j                  j	                                            |j                  dddg       d|d   v r| j
                  j                  d       | j                  |ddd	       | j                  |dd
       d|d   v r|j                  d   }t        |t        j                        st        |d      r|j                  }|j                  dt        |j                  j	                                      | j                  |dd
       | j                  |ddd       y )Nresponse_types_supportedc                     | dk7  S )Nnone )xs    r   <lambda>zBMetadataEndpoint.validate_metadata_authorization.<locals>.<lambda>g   s    Vr   response_modes_supportedqueryfragmenttokenimplicitT)r3   r4   r=   codedefault_grant code_challenge_methods_supportedauthorization_endpointr@   )rD   r/   filter_response_typesrC   rA   appendr8   r   r   AuthorizationCodeGranthasattrrT   _code_challenge_methods)r   r   r   
code_grants       r   validate_metadata_authorizationz0MetadataEndpoint.validate_metadata_authorizatione   s:   4v&;X=U=U=Z=Z=\]^	`4w
6KL
 f788$$Z0v'At]abv'A4PV677!11&9Jj+*L*LMRYZdfuRv'55
@":#E#E#J#J#LMO""6+MW["\v'?TZ^_r   c                     |j                  dddg       | j                  |dd       | j                  |dd       | j                  |ddd       y )	N*revocation_endpoint_auth_methods_supportedr;   r<   Tr=   5revocation_endpoint_auth_signing_alg_values_supportedrevocation_endpointr@   rD   r8   rE   s      r   validate_metadata_revocationz-MetadataEndpoint.validate_metadata_revocation|   sf    F/1FG	I 	v'S]abv'^hlmv'<$W[\r   c                     |j                  dddg       | j                  |dd       | j                  |dd       | j                  |ddd       y )	N-introspection_endpoint_auth_methods_supportedr;   r<   Tr=   8introspection_endpoint_auth_signing_alg_values_supportedintrospection_endpointr@   rc   rE   s      r   validate_metadata_introspectionz0MetadataEndpoint.validate_metadata_introspection   sf    I/1FG	I 	v'V`dev'akopv'?TZ^_r   c                     t        j                  | j                        }| j                  |ddd       | j                  |dd       | j                  |dd       | j                  |dd       | j                  |d	d       | j                  |d
d       | j                  |dd       g | _        | j
                  D ]  }t        |t              r| j                  ||       t        |t              r| j                  ||       t        |t              r| j                  ||       t        |t              sz| j                  ||        |j                  d| j                         | 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)r3   r6   jwks_uri)r5   scopes_supportedr=   service_documentationui_locales_supportedop_policy_uri
op_tos_urigrant_types_supported)copydeepcopyr   r8   rA   r   r   r   rF   r   r^   r   rd   r
   ri   rD   rE   s      r   r   z)MetadataEndpoint.validate_metadata_server   sf   T t223vxTTRvz$?v'94Hv'>tLv'=tLvtDv|DAH(M2,,VX>($9:44VXF($6711&(C($6744VXF ' 	143D3DEv'>Mr   )GETNN)FFFF)__name__
__module____qualname____doc__r   r	   r%   r8   rF   r^   rd   ri   r   rK   r   r   r   r      sQ     *,$ 	6 %DH)-5 %5v2X`.]`br   r   )ry   rs   r   logging r   r   authorizationr   baser   r	   
introspectr
   
revocationr   rQ   r   	getLoggerrv   logr   rK   r   r   <module>r      sG       ! 0 ? * *  g!W| Wr   