§
    .çh¤  ã                   ó¼   — d dl Z d dlmZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZ d dlmZmZ  G d„ d	e¦  «        Z G d
„ de¦  «        Z G d„ d¦  «        ZdS )é    N)ÚAny)ÚAuthCredentialsÚAuthenticationBackendÚ
SimpleUser)ÚHTTPException)ÚHTTPConnection)ÚReceiveÚScopeÚSend)ÚAccessTokenÚ OAuthAuthorizationServerProviderc                   ó(   ‡ — e Zd ZdZdefˆ fd„Zˆ xZS )ÚAuthenticatedUserzUser with authentication info.Ú	auth_infoc                 óz   •— t          ¦   «                              |j        ¦  «         || _        |j        | _        d S ©N)ÚsuperÚ__init__Ú	client_idÚaccess_tokenÚscopes)Úselfr   Ú	__class__s     €úc/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/mcp/server/auth/middleware/bearer_auth.pyr   zAuthenticatedUser.__init__   s4   ø€ Ý‰Œ×Ò˜Ô,Ñ-Ô-Ð-Ø%ˆÔØÔ&ˆŒˆˆó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__classcell__)r   s   @r   r   r      sJ   ø€ € € € € Ø(Ð(ð' +ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r   r   c                   ó<   — e Zd ZdZdeeeef         fd„Zdefd„ZdS )ÚBearerAuthBackendz>
    Authentication backend that validates Bearer tokens.
    Úproviderc                 ó   — || _         d S r   )r#   )r   r#   s     r   r   zBearerAuthBackend.__init__   s   € ð !ˆŒˆˆr   Úconnc              ƒ   ó¦  ‡K  — t          ˆfd„‰j        D ¦   «         d ¦  «        }|r'|                     ¦   «                              d¦  «        sd S |dd …         }| j                             |¦  «        ƒ d {V —†}|sd S |j        r+|j        t          t          j        ¦   «         ¦  «        k     rd S t          |j
        ¦  «        t          |¦  «        fS )Nc              3   ó|   •K  — | ]6}|                      ¦   «         d k    ¯‰j                             |¦  «        V — Œ7dS )ÚauthorizationN)ÚlowerÚheadersÚget)Ú.0Úkeyr%   s     €r   ú	<genexpr>z1BearerAuthBackend.authenticate.<locals>.<genexpr>&   sR   øè è € ð ð àØ—9’9‘;”; /Ò1Ð1ð ”× Ò  Ñ%Ô%à1Ð1Ð1Ð1ðð r   zbearer é   )Únextr*   r)   Ú
startswithr#   Úload_access_tokenÚ
expires_atÚintÚtimer   r   r   )r   r%   Úauth_headerÚtokenr   s    `   r   ÚauthenticatezBearerAuthBackend.authenticate$   s   øè è € Ýðð ð ð àœ<ðñ ô ð
 ñ
ô 
ˆð ð 	 +×"3Ò"3Ñ"5Ô"5×"@Ò"@ÀÑ"KÔ"Kð 	Ø4à˜A˜B˜B”ˆð œ-×9Ò9¸%Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@ˆ	àð 	Ø4àÔð 	 IÔ$8½3½t¼y¹{¼{Ñ;KÔ;KÒ$KÐ$KØ4å˜yÔ/Ñ0Ô0Õ2CÀIÑ2NÔ2NÐNÐNr   N)	r   r   r   r   r   r   r   r   r8   © r   r   r"   r"      sg   € € € € € ðð ð!à2°3¸¸S°=ÔAð!ð !ð !ð !ðO ~ð Oð Oð Oð Oð Oð Or   r"   c                   óF   — e Zd ZdZdedee         fd„Zdede	de
dd	fd
„Zd	S )ÚRequireAuthMiddlewarezÉ
    Middleware that requires a valid Bearer token in the Authorization header.

    This will validate the token with the auth provider and store the resulting
    auth info in the request state.
    ÚappÚrequired_scopesc                 ó"   — || _         || _        dS )zì
        Initialize the middleware.

        Args:
            app: ASGI application
            provider: Authentication provider to validate tokens
            required_scopes: Optional list of scopes that the token must have
        N)r<   r=   )r   r<   r=   s      r   r   zRequireAuthMiddleware.__init__F   s   € ð ˆŒØ.ˆÔÐÐr   ÚscopeÚreceiveÚsendÚreturnNc              ƒ   ó0  K  — |                      d¦  «        }t          |t          ¦  «        st          dd¬¦  «        ‚|                      d¦  «        }| j        D ]}|	||j        vrt          dd¬¦  «        ‚Œ|                      |||¦  «        ƒ d {V —† d S )NÚuseri‘  ÚUnauthorized)Ústatus_codeÚdetailÚauthi“  zInsufficient scope)r+   Ú
isinstancer   r   r=   r   r<   )r   r?   r@   rA   Ú	auth_userÚauth_credentialsÚrequired_scopes          r   Ú__call__zRequireAuthMiddleware.__call__R   sÅ   è è € Ø—I’I˜fÑ%Ô%ˆ	Ý˜)Õ%6Ñ7Ô7ð 	HÝ¨C¸ÐGÑGÔGÐGØ Ÿ9š9 VÑ,Ô,Ðà"Ô2ð 	Rð 	RˆNð !Ð(Ø!Ð)9Ô)@Ð@Ð@å#°Ð<PÐQÑQÔQÐQð Að hŠhu˜g tÑ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,r   )r   r   r   r   r   ÚlistÚstrr   r
   r	   r   rM   r9   r   r   r;   r;   >   st   € € € € € ðð ð
/˜Cð 
/°$°s´)ð 
/ð 
/ð 
/ð 
/ð- Eð -°Gð -À4ð -ÈDð -ð -ð -ð -ð -ð -r   r;   )r5   Útypingr   Ústarlette.authenticationr   r   r   Ústarlette.exceptionsr   Ústarlette.requestsr   Ústarlette.typesr	   r
   r   Úmcp.server.auth.providerr   r   r   r"   r;   r9   r   r   ú<module>rV      s>  ðØ €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð
 /Ð .Ð .Ð .Ð .Ð .Ø -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rð'ð 'ð 'ð 'ð '˜
ñ 'ô 'ð 'ð"Oð "Oð "Oð "Oð "OÐ-ñ "Oô "Oð "OðJ"-ð "-ð "-ð "-ð "-ñ "-ô "-ð "-ð "-ð "-r   