
    k7i                         S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  S SK	Jr  SSKJr  SS	KJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr   " S S5      rg)    Ngenerate_token)default_json_headers)	deprecate)	JoseError)JsonWebToken   )AccessDeniedError)InvalidRequestError   )ClientMetadataClaims)InvalidClientMetadataError)InvalidSoftwareStatementError) UnapprovedSoftwareStatementErrorc                   x    \ rS rSrSrSrSrSS jrS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rSrg)ClientRegistrationEndpoint   zThe client registration endpoint is an OAuth 2.0 endpoint designed to
allow a client to be registered with the authorization server.
client_registrationNc                 :    Xl         U=(       d    [        /U l        g N)serverr   claims_classes)selfr   r   s      Y/home/james-whalen/.local/lib/python3.13/site-packages/authlib/oauth2/rfc7591/endpoint.py__init__#ClientRegistrationEndpoint.__init__   s    ,F1E0F    c                 $    U R                  U5      $ r   )create_registration_responser   requests     r   __call__#ClientRegistrationEndpoint.__call__"   s    0099r   c                 f   U R                  U5      nU(       d
  [        5       eX!l        U R                  U5      nU R	                  U5      n0 nUR                  U5        UR                  U5        U R                  XCU5      nU R                  Xa5      nU(       a  UR                  U5        SU[        4$ )N   )	authenticate_tokenr
   
credentialextract_client_metadatagenerate_client_infoupdatesave_client!generate_client_registration_infor   )r   r!   tokenclient_metadataclient_infobodyclientregistration_infos           r   r   7ClientRegistrationEndpoint.create_registration_response%   s    ''0#%%"66w?//8O$K !!+H BB6SKK)*D...r   c                    UR                   R                  (       d
  [        5       eUR                   R                  R                  5       nUR	                  SS 5      nU(       a3  U R
                  (       a"  U R                  X15      nUR                  U5        0 nU R                  5       nU R                   Hi  n[        US5      (       a  U(       a  UR                  U5      O0 nU" U0 X5      n	 U	R                  5         UR                  " S0 U	R!                  5       D6  Mk     U$ ! [         a  n
[        U
R                  5      U
eS n
A
ff = f)Nsoftware_statementget_claims_options )payloaddatar   copypop'software_statement_alg_values_supportedextract_software_statementr*   get_server_metadatar   hasattrr6   validater   r   descriptionget_registered_claims)r   r!   	json_datar5   r9   r.   server_metadataclaims_classoptionsclaimserrors              r   r(   2ClientRegistrationEndpoint.extract_client_metadata7   s$   ##%''OO((--/	&]]+?F$"N"N223EODT"224 //L <)=>>? //@ 
 ")RJFO! ""DV%A%A%CD 0 	  O01B1BCNOs   -D##
E-EEc                     U R                  U5      nU(       d
  [        5       e [        U R                  5      nUR	                  X5      nU$ ! [
         a  n[        5       UeS nAff = fr   )resolve_public_keyr   r   r<   decoder   r   )r   r5   r!   keyjwtrG   excs          r   r=   5ClientRegistrationEndpoint.extract_software_statementR   sb    %%g.244	;tKKLCZZ 28FM 	;/1s:	;s   'A 
A&A!!A&c                 J    U R                  U5      n U R                  U5      n[	        [
        R
                  " 5       5      nSn[        UUUUS9$ ! [         a    U R                  5       n[        SSS9   Ndf = f! [         a    U R                  5       n[        SSS9   N|f = f)Nz[generate_client_id takes a 'request' parameter. It will become mandatory in coming releasesz1.8)versionz_generate_client_secret takes a 'request' parameter. It will become mandatory in coming releasesr   )	client_idclient_secretclient_id_issued_atclient_secret_expires_at)generate_client_id	TypeErrorr   generate_client_secretinttimedict)r   r!   rS   rT   rU   rV   s         r   r)   /ClientRegistrationEndpoint.generate_client_info_   s    	//8I	 77@M "$))+.#$ ' 3%=	
 	
)  	//1I>	  	 779M>	s"   A A; $A87A8;$B"!B"c                     g)zGenerate ```registration_client_uri`` and ``registration_access_token``
for RFC7592. This method returns ``None`` by default. Developers MAY rewrite
this method to return registration information.
Nr7   )r   r1   r!   s      r   r,   <ClientRegistrationEndpoint.generate_client_registration_info~   s    
 r   c                 8    U R                   R                  U5      $ r   )r   create_json_requestr    s     r   create_endpoint_request2ClientRegistrationEndpoint.create_endpoint_request   s    {{..w77r   c                     [        S5      $ )zqGenerate ``client_id`` value. Developers MAY rewrite this method
to use their own way to generate ``client_id``.
*   r   r    s     r   rW   -ClientRegistrationEndpoint.generate_client_id   s     b!!r   c                 t    [         R                  " [        R                  " S5      5      R	                  S5      $ )zyGenerate ``client_secret`` value. Developers MAY rewrite this method
to use their own way to generate ``client_secret``.
   ascii)binasciihexlifyosurandomrL   r    s     r   rY   1ClientRegistrationEndpoint.generate_client_secret   s(     

2/66w??r   c                     [        5       e)zUReturn server metadata which includes supported grant types,
response types and etc.
NotImplementedError)r   s    r   r>   .ClientRegistrationEndpoint.get_server_metadata   s     "##r   c                     [        5       e)a  Authenticate current credential who is requesting to register a client.
Developers MUST implement this method in subclass::

    def authenticate_token(self, request):
        auth = request.headers.get("Authorization")
        return get_token_by_auth(auth)

:return: token instance
rp   r    s     r   r&   -ClientRegistrationEndpoint.authenticate_token        "##r   c                     [        5       e)a  Resolve a public key for decoding ``software_statement``. If
``enable_software_statement=True``, developers MUST implement this
method in subclass::

    def resolve_public_key(self, request):
        return get_public_key_from_user(request.credential)

:return: JWK or Key string
rp   r    s     r   rK   -ClientRegistrationEndpoint.resolve_public_key   ru   r   c                     [        5       e)a^  Save client into database. Developers MUST implement this method
in subclass::

    def save_client(self, client_info, client_metadata, request):
        client = OAuthClient(
            client_id=client_info['client_id'],
            client_secret=client_info['client_secret'],
            ...
        )
        client.save()
        return client
rp   )r   r/   r.   r!   s       r   r+   &ClientRegistrationEndpoint.save_client   s     "##r   )r   r   )NN)__name__
__module____qualname____firstlineno____doc__ENDPOINT_NAMEr<   r   r"   r   r(   r=   r)   r,   rb   rW   rY   r>   r&   rK   r+   __static_attributes__r7   r   r   r   r      s^     *M /3+G:/$6;
>8"@$
$
$$r   r   )rj   rl   r[   authlib.common.securityr   authlib.constsr   authlib.deprecater   authlib.joser   r   rfc6749r
   r   rG   r   errorsr   r   r   r   r7   r   r   <module>r      s;     	  2 / ' " % ' ) ( . 1 4l$ l$r   