§
    .çh^  ã                   óh   — d dl Z d dlmZ d dlmZ d dlmZ  G d„ de¦  «        Z G d„ d¦  «        Z	dS )	é    N)ÚAny)Ú OAuthAuthorizationServerProvider)ÚOAuthClientInformationFullc                   ó   — e Zd Zdefd„ZdS )ÚAuthenticationErrorÚmessagec                 ó   — || _         d S )N)r   )Úselfr   s     úc/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/mcp/server/auth/middleware/client_auth.pyÚ__init__zAuthenticationError.__init__	   s   € ØˆŒˆˆó    N)Ú__name__Ú
__module__Ú__qualname__Ústrr   © r   r   r   r      s/   € € € € € ð ð ð ð ð ð ð r   r   c                   óJ   — e Zd ZdZdeeeef         fd„Zdededz  defd„Z	dS )	ÚClientAuthenticatora—  
    ClientAuthenticator is a callable which validates requests from a client
    application, used to verify /token calls.
    If, during registration, the client requested to be issued a secret, the
    authenticator asserts that /token calls must be authenticated with
    that same token.
    NOTE: clients can opt for no authentication during registration, in which case this
    logic is skipped.
    Úproviderc                 ó   — || _         dS )zx
        Initialize the dependency.

        Args:
            provider: Provider to look up client information
        N)r   )r
   r   s     r   r   zClientAuthenticator.__init__   s   € ð !ˆŒˆˆr   Ú	client_idÚclient_secretNÚreturnc              ƒ   óN  K  — | j                              |¦  «        ƒ d {V —†}|st          d¦  «        ‚|j        rj|st          d¦  «        ‚|j        |k    rt          d¦  «        ‚|j        r8|j        t          t          j        ¦   «         ¦  «        k     rt          d¦  «        ‚|S )NzInvalid client_idzClient secret is requiredzInvalid client_secretzClient secret has expired)r   Ú
get_clientr   r   Úclient_secret_expires_atÚintÚtime)r
   r   r   Úclients       r   Úauthenticatez ClientAuthenticator.authenticate!   sÇ   è è € ð ”}×/Ò/°	Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:ˆØð 	;Ý%Ð&9Ñ:Ô:Ð:ð Ôð 	GØ ð GÝ)Ð*EÑFÔFÐFàÔ# }Ò4Ð4Ý)Ð*AÑBÔBÐBð Ô/ðGàÔ3µc½$¼)¹+¼+Ñ6FÔ6FÒFÐFå)Ð*EÑFÔFÐFàˆr   )
r   r   r   Ú__doc__r   r   r   r   r   r    r   r   r   r   r      su   € € € € € ðð ð!Ð!AÀ#ÀsÈCÀ-Ô!Pð !ð !ð !ð !ðØðØ-0°4©Zðà	#ðð ð ð ð ð r   r   )
r   Útypingr   Úmcp.server.auth.providerr   Úmcp.shared.authr   Ú	Exceptionr   r   r   r   r   ú<module>r&      s    ðØ €€€Ø Ð Ð Ð Ð Ð à EÐ EÐ EÐ EÐ EÐ EØ 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ˜)ñ ô ð ð
+ð +ð +ð +ð +ñ +ô +ð +ð +ð +r   