§
    iÝ[f¨  ã                   óœ   — d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	 ddl
mZmZ ddl
mZ dd	lmZ dd
lmZmZmZ  G d„ d¦  «        ZdS )é    N)Údefault_json_headers©Úgenerate_token)ÚJsonWebTokenÚ	JoseErroré   )ÚAccessDeniedErrorÚInvalidRequestError)Úscope_to_listé   )ÚClientMetadataClaims)ÚInvalidClientMetadataErrorÚ UnapprovedSoftwareStatementErrorÚInvalidSoftwareStatementErrorc                   óx   — e Zd ZdZdZeZdZd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚClientRegistrationEndpointz�The client registration endpoint is an OAuth 2.0 endpoint designed to
    allow a client to be registered with the authorization server.
    Úclient_registrationNc                 ó   — || _         d S ©N)Úserver)Úselfr   s     úS/var/www/piapp/venv/lib/python3.11/site-packages/authlib/oauth2/rfc7591/endpoint.pyÚ__init__z#ClientRegistrationEndpoint.__init__   s   € ØˆŒˆˆó    c                 ó,   — |                       |¦  «        S r   )Úcreate_registration_response©r   Úrequests     r   Ú__call__z#ClientRegistrationEndpoint.__call__!   s   € Ø×0Ò0°Ñ9Ô9Ð9r   c                 ó   — |                       |¦  «        }|st          ¦   «         ‚||_        |                      |¦  «        }|                      ¦   «         }i }|                     |¦  «         |                     |¦  «         |                      |||¦  «        }|                      ||¦  «        }|r|                     |¦  «         d|t          fS )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   z7ClientRegistrationEndpoint.create_registration_response$   sÔ   € Ø×'Ò'¨Ñ0Ô0ˆØð 	&Ý#Ñ%Ô%Ð%à"ˆÔà×6Ò6°wÑ?Ô?ˆØ×/Ò/Ñ1Ô1ˆØˆØ�Š�OÑ$Ô$Ð$Ø�Š�KÑ Ô Ð Ø×!Ò! +¨ÀÑHÔHˆØ ×BÒBÀ6È7ÑSÔSÐØð 	+Ø�KŠKÐ)Ñ*Ô*Ð*Ø�DÕ.Ð.Ð.r   c                 ó  — |j         st          ¦   «         ‚|j                              ¦   «         }|                     dd ¦  «        }|r2| j        r+|                      ||¦  «        }|                     |¦  «         |                      ¦   «         }|                      |i ||  	                    ¦   «         ¦  «        }	 | 
                    ¦   «          n&# t          $ r}t          |j        ¦  «        ‚d }~ww xY w|                     ¦   «         S )NÚsoftware_statement)Údatar
   ÚcopyÚpopÚ'software_statement_alg_values_supportedÚextract_software_statementr&   Úget_claims_optionsÚclaims_classÚget_server_metadataÚvalidater   r   ÚdescriptionÚget_registered_claims)r   r   Ú	json_datar0   r1   ÚoptionsÚclaimsÚerrors           r   r$   z2ClientRegistrationEndpoint.extract_client_metadata6   s  € ØŒ|ð 	(Ý%Ñ'Ô'Ð'à”L×%Ò%Ñ'Ô'ˆ	Ø&Ÿ]š]Ð+?ÀÑFÔFÐØð 	# $Ô"Nð 	#Ø×2Ò2Ð3EÀwÑOÔOˆDØ×Ò˜TÑ"Ô"Ð"à×)Ò)Ñ+Ô+ˆØ×"Ò" 9¨b°'¸4×;SÒ;SÑ;UÔ;UÑVÔVˆð	@Ø�OŠOÑÔÐÐøÝð 	@ð 	@ð 	@Ý,¨UÔ->Ñ?Ô?Ð?øøøøð	@øøøà×+Ò+Ñ-Ô-Ð-s   Â8C Ã
C0ÃC+Ã+C0c                 óÞ   — |                       |¦  «        }|st          ¦   «         ‚	 t          | j        ¦  «        }|                     ||¦  «        }|S # t
          $ r t          ¦   «         ‚w xY wr   )Úresolve_public_keyr   r   r4   Údecoder   r   )r   r0   r   ÚkeyÚjwtr>   s         r   r5   z5ClientRegistrationEndpoint.extract_software_statementH   s~   € Ø×%Ò% gÑ.Ô.ˆØð 	5Ý2Ñ4Ô4Ð4ð	2Ý˜tÔKÑLÔLˆCØ—Z’ZÐ 2°CÑ8Ô8ˆFàˆMøÝð 	2ð 	2ð 	2Ý/Ñ1Ô1Ð1ð	2øøøs   §+A ÁA,c                 ó¨  ‡‡‡	— |                       ¦   «         }|si S |                     d¦  «        Š	|                     d¦  «        Š|                     d¦  «        Š|                     d¦  «        }i }‰	�t          ‰	¦  «        Š	ˆ	fd„}d|i|d<   ‰�t          ‰¦  «        Šˆfd	„}d|i|d
<   ‰�t          ‰¦  «        Šˆfd„}d|i|d<   |�d|i|d<   |S )zFGenerate claims options validation from Authorization Server metadata.Úscopes_supportedÚresponse_types_supportedÚgrant_types_supportedÚ%token_endpoint_auth_methods_supportedNc                 ón   •— |sdS t          t          |¦  «        ¦  «        }‰                     |¦  «        S )NT)Úsetr   Ú
issuperset)r>   ÚvalueÚscopesrF   s      €r   Ú_validate_scopezFClientRegistrationEndpoint.get_claims_options.<locals>._validate_scopec   s9   ø€ Øð  Ø˜4Ý�]¨5Ñ1Ô1Ñ2Ô2�Ø'×2Ò2°6Ñ:Ô:Ð:r   r9   Úscopec                 óV   •— |rt          |¦  «        ndh}‰                     |¦  «        S )NÚcode©rK   rL   )r>   rM   Úresponse_typesrG   s      €r   Ú_validate_response_typeszOClientRegistrationEndpoint.get_claims_options.<locals>._validate_response_typesn   s/   ø€ ð 05Ð!B¥ U¡¤ ¸6¸(�Ø/×:Ò:¸>ÑJÔJÐJr   rT   c                 óV   •— |rt          |¦  «        ndh}‰                     |¦  «        S )NÚauthorization_coderS   )r>   rM   Úgrant_typesrH   s      €r   Ú_validate_grant_typeszLClientRegistrationEndpoint.get_claims_options.<locals>._validate_grant_typesy   s1   ø€ ð -2ÐM�c %™jœj˜jÐ8LÐ7M�Ø,×7Ò7¸ÑDÔDÐDr   rX   ÚvaluesÚtoken_endpoint_auth_method)r8   ÚgetrK   )
r   ÚmetadataÚauth_methods_supportedr=   rO   rU   rY   rH   rG   rF   s
          @@@r   r6   z-ClientRegistrationEndpoint.get_claims_optionsU   sZ  øøø€ à×+Ò+Ñ-Ô-ˆØð 	ØˆIà#Ÿ<š<Ð(:Ñ;Ô;ÐØ#+§<¢<Ð0JÑ#KÔ#KÐ Ø (§¢Ð-DÑ EÔ EÐØ!)§¢Ð.UÑ!VÔ!VÐØˆØÐ'Ý"Ð#3Ñ4Ô4Ðð;ð ;ð ;ð ;ð ;ð !+¨OÐ<ˆG�GÑà#Ð/Ý'*Ð+CÑ'DÔ'DÐ$ðKð Kð Kð Kð Kð *4Ð5MÐ(NˆGÐ$Ñ%à Ð,Ý$'Ð(=Ñ$>Ô$>Ð!ðEð Eð Eð Eð Eð '1Ð2GÐ%HˆG�MÑ"à!Ð-Ø5=Ð?UÐ4VˆGÐ0Ñ1àˆr   c                 ó¼   — |                       ¦   «         }|                      ¦   «         }t          t          j        ¦   «         ¦  «        }d}t	          ||||¬¦  «        S )Nr   )Ú	client_idÚclient_secretÚclient_id_issued_atÚclient_secret_expires_at)Úgenerate_client_idÚgenerate_client_secretÚintÚtimeÚdict)r   r`   ra   rb   rc   s        r   r%   z/ClientRegistrationEndpoint.generate_client_info†   sa   € à×+Ò+Ñ-Ô-ˆ	Ø×3Ò3Ñ5Ô5ˆÝ!¥$¤)¡+¤+Ñ.Ô.ÐØ#$Ð ÝØØ'Ø 3Ø%=ð	
ñ 
ô 
ð 	
r   c                 ó   — dS )zÔGenerate ```registration_client_uri`` and ``registration_access_token``
        for RFC7592. This method returns ``None`` by default. Developers MAY rewrite
        this method to return registration information.N© )r   r-   r   s      r   r(   z<ClientRegistrationEndpoint.generate_client_registration_info“   s	   € ð ˆtr   c                 ó6   — | j                              |¦  «        S r   )r   Úcreate_json_requestr   s     r   Úcreate_endpoint_requestz2ClientRegistrationEndpoint.create_endpoint_request™   s   € ØŒ{×.Ò.¨wÑ7Ô7Ð7r   c                 ó    — t          d¦  «        S )z�Generate ``client_id`` value. Developers MAY rewrite this method
        to use their own way to generate ``client_id``.
        é*   r   ©r   s    r   rd   z-ClientRegistrationEndpoint.generate_client_idœ   s   € õ ˜bÑ!Ô!Ð!r   c                 ót   — t          j        t          j        d¦  «        ¦  «                             d¦  «        S )z‰Generate ``client_secret`` value. Developers MAY rewrite this method
        to use their own way to generate ``client_secret``.
        é   Úascii)ÚbinasciiÚhexlifyÚosÚurandomrB   rp   s    r   re   z1ClientRegistrationEndpoint.generate_client_secret¢   s+   € õ Ô¥¤
¨2¡¤Ñ/Ô/×6Ò6°wÑ?Ô?Ð?r   c                 ó   — t          ¦   «         ‚)zeReturn server metadata which includes supported grant types,
        response types and etc.
        ©ÚNotImplementedErrorrp   s    r   r8   z.ClientRegistrationEndpoint.get_server_metadata¨   s   € õ "Ñ#Ô#Ð#r   c                 ó   — t          ¦   «         ‚)aL  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
        ry   r   s     r   r"   z-ClientRegistrationEndpoint.authenticate_token®   ó   € õ "Ñ#Ô#Ð#r   c                 ó   — t          ¦   «         ‚)aI  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
        ry   r   s     r   rA   z-ClientRegistrationEndpoint.resolve_public_keyº   r|   r   c                 ó   — t          ¦   «         ‚)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
        ry   )r   r+   r*   r   s       r   r'   z&ClientRegistrationEndpoint.save_clientÆ   s   € õ "Ñ#Ô#Ð#r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚENDPOINT_NAMEr   r7   r4   r   r   r   r$   r5   r6   r%   r(   rm   rd   re   r8   r"   rA   r'   rj   r   r   r   r      s  € € € € € ðð ð *€Mð (€Lð /3Ð+ðð ð ð:ð :ð :ð/ð /ð /ð$.ð .ð .ð$2ð 2ð 2ð/ð /ð /ðb
ð 
ð 
ðð ð ð8ð 8ð 8ð"ð "ð "ð@ð @ð @ð$ð $ð $ð
$ð 
$ð 
$ð
$ð 
$ð 
$ð$ð $ð $ð $ð $r   r   )rv   rg   rt   Úauthlib.constsr   Úauthlib.common.securityr   Úauthlib.joser   r   Úrfc6749r	   r
   r   r>   r   Úerrorsr   r   r   r   rj   r   r   ú<module>r‰      s  ðØ 	€	€	€	Ø €€€Ø €€€Ø /Ð /Ð /Ð /Ð /Ð /Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø #Ð #Ð #Ð #Ð #Ð #Ø (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ðB$ð B$ð B$ð B$ð B$ñ B$ô B$ð B$ð B$ð B$r   