§
    JŠtjƒ  ã                  óØ   — d dl m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	m
Z
m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gZeeef         Zdd„Z G d„ de¦  «        Z	 	 	 	 ddd„ZdS ) é    )ÚannotationsN)Ú	AwaitableÚIterable)ÚAnyÚCallableÚcasté   )ÚHeaders)ÚInvalidHeader)Úbuild_www_authenticate_basicÚparse_authorization_basicé   )ÚHTTPResponseÚWebSocketServerProtocolÚ BasicAuthWebSocketServerProtocolÚbasic_auth_protocol_factoryÚvaluer   ÚreturnÚboolc                ó’   — 	 | \  }}t          |t          ¦  «        ot          |t          ¦  «        S # t          t          f$ r Y dS w xY w©NF)Ú
isinstanceÚstrÚ	TypeErrorÚ
ValueError)r   ÚusernameÚpasswords      úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/websockets/legacy/auth.pyÚis_credentialsr      s\   € ðGØ"Ñˆ�(õ ˜(¥CÑ(Ô(ÐF­Z¸Å#Ñ-FÔ-FÐFøõ •zÐ"ð ð ð Øˆuˆuðøøøs   ‚1 ±AÁAc                  ób   ‡ — e Zd ZU dZdZded<   	 dZded<   	 dddœdˆ fd„Zdd„Zdˆ fd„Z	ˆ xZ
S )r   zC
    WebSocket server protocol that enforces HTTP Basic Auth.

    Ú r   ÚrealmNú
str | Noner   ©r"   Úcheck_credentialsÚargsr   r%   ú,Callable[[str, str], Awaitable[bool]] | NoneÚkwargsr   ÚNonec               óZ   •— |�|| _         || _         t          ¦   «         j        |i |¤Ž d S ©N)r"   Ú_check_credentialsÚsuperÚ__init__)Úselfr"   r%   r&   r(   Ú	__class__s        €r   r.   z)BasicAuthWebSocketServerProtocol.__init__.   s<   ø€ ð ÐØˆDŒJØ"3ˆÔØ�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)ó    r   r   c              ƒ  óP   K  — | j         �|                       ||¦  «        ƒ d{V —†S dS )aÂ  
        Check whether credentials are authorized.

        This coroutine may be overridden in a subclass, for example to
        authenticate against a database or an external service.

        Args:
            username: HTTP Basic Auth username.
            password: HTTP Basic Auth password.

        Returns:
            :obj:`True` if the handshake should continue;
            :obj:`False` if it should fail with an HTTP 401 error.

        NF)r,   )r/   r   r   s      r   r%   z2BasicAuthWebSocketServerProtocol.check_credentials:   s>   è è € ð  Ô"Ð.Ø×0Ò0°¸8ÑDÔDÐDÐDÐDÐDÐDÐDÐDàˆur1   ÚpathÚrequest_headersr
   úHTTPResponse | Nonec              ƒ  ó  •K  — 	 |d         }n9# t           $ r, t          j        j        dt	          | j        ¦  «        fgdfcY S w xY w	 t          |¦  «        \  }}n9# t          $ r, t          j        j        dt	          | j        ¦  «        fgdfcY S w xY w|                      ||¦  «        ƒ d{V —†s)t          j        j        dt	          | j        ¦  «        fgdfS || _	        t          ¦   «                              ||¦  «        ƒ d{V —†S )zS
        Check HTTP Basic Auth and return an HTTP 401 response if needed.

        ÚAuthorizationzWWW-Authenticates   Missing credentials
s   Unsupported credentials
Ns   Invalid credentials
)ÚKeyErrorÚhttpÚ
HTTPStatusÚUNAUTHORIZEDr   r"   r   r   r%   r   r-   Úprocess_request)r/   r3   r4   Úauthorizationr   r   r0   s         €r   r<   z0BasicAuthWebSocketServerProtocol.process_requestO   s]  øè è € ð	Ø+¨OÔ<ˆMˆMøÝð 	ð 	ð 	å”Ô,Ø$Õ&BÀ4Ä:Ñ&NÔ&NÐOÐPØ(ðð ð ð ð	øøøð	Ý!:¸=Ñ!IÔ!IÑˆH�h�høÝð 	ð 	ð 	å”Ô,Ø$Õ&BÀ4Ä:Ñ&NÔ&NÐOÐPØ,ðð ð ð ð	øøøð ×+Ò+¨H°hÑ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?ð 	å”Ô,Ø$Õ&BÀ4Ä:Ñ&NÔ&NÐOÐPØ(ðð ð !ˆŒå‘W”W×,Ò,¨T°?ÑCÔCÐCÐCÐCÐCÐCÐCÐCs!   … Ž3AÁAÁA Á3BÂB)
r&   r   r"   r#   r%   r'   r(   r   r   r)   ©r   r   r   r   r   r   )r3   r   r4   r
   r   r5   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   Ú__annotations__r   r.   r%   r<   Ú__classcell__)r0   s   @r   r   r      sÁ   ø€ € € € € € ðð ð
 €E€O€O€O�Oðð  €HÐÐÐÑØ-ð
 !ØJNð	
*ð 
*ð 
*ð 
*ð 
*ð 
*ð 
*ð 
*ðð ð ð ð*$Dð $Dð $Dð $Dð $Dð $Dð $Dð $Dð $Dð $Dr1   r"   r#   Úcredentialsú*Credentials | Iterable[Credentials] | Noner%   r'   Úcreate_protocolú6Callable[..., BasicAuthWebSocketServerProtocol] | Noneú/Callable[..., BasicAuthWebSocketServerProtocol]c                ó4  ‡— |du |du k    rt          d¦  «        ‚|�»t          |¦  «        rt          t          |¦  «        g}n€t	          |t
          ¦  «        rYt          t          t
          t                   |¦  «        ¦  «        }t          d„ |D ¦   «         ¦  «        st          d|› �¦  «        ‚nt          d|› �¦  «        ‚t          |¦  «        Šdˆfd
„}|€t          }t          t          dt          f         |¦  «        }t          j        || |¬¦  «        S )a  
    Protocol factory that enforces HTTP Basic Auth.

    :func:`basic_auth_protocol_factory` is designed to integrate with
    :func:`~websockets.legacy.server.serve` like this::

        serve(
            ...,
            create_protocol=basic_auth_protocol_factory(
                realm="my dev server",
                credentials=("hello", "iloveyou"),
            )
        )

    Args:
        realm: Scope of protection. It should contain only ASCII characters
            because the encoding of non-ASCII characters is undefined.
            Refer to section 2.2 of :rfc:`7235` for details.
        credentials: Hard coded authorized credentials. It can be a
            ``(username, password)`` pair or a list of such pairs.
        check_credentials: Coroutine that verifies credentials.
            It receives ``username`` and ``password`` arguments
            and returns a :class:`bool`. One of ``credentials`` or
            ``check_credentials`` must be provided but not both.
        create_protocol: Factory that creates the protocol. By default, this
            is :class:`BasicAuthWebSocketServerProtocol`. It can be replaced
            by a subclass.
    Raises:
        TypeError: If the ``credentials`` or ``check_credentials`` argument is
            wrong.

    Nz/provide either credentials or check_credentialsc              3  ó4   K  — | ]}t          |¦  «        V — Œd S r+   )r   )Ú.0Úitems     r   ú	<genexpr>z.basic_auth_protocol_factory.<locals>.<genexpr>¤   s*   è è € ÐIÐI°•~ dÑ+Ô+ÐIÐIÐIÐIÐIÐIr1   zinvalid credentials argument: r   r   r   r   r   c              “  óh   •K  — 	 ‰|          }n# t           $ r Y dS w xY wt          j        ||¦  «        S r   )r8   ÚhmacÚcompare_digest)r   r   Úexpected_passwordÚcredentials_dicts      €r   r%   z6basic_auth_protocol_factory.<locals>.check_credentials«   sP   øè è € ðØ$4°XÔ$>Ð!Ð!øÝð ð ð Ø�u�uðøøøåÔ&Ð'8¸(ÑCÔCÐCs   … Ž
›.r$   r>   )r   r   r   ÚCredentialsr   r   ÚlistÚallÚdictr   r   Ú	functoolsÚpartial)r"   rE   r%   rG   Úcredentials_listrS   s        @r   r   r   v   se  ø€ ðL 	�tÐÐ!2°dÐ!:Ò;Ð;ÝÐIÑJÔJÐJàÐÝ˜+Ñ&Ô&ð 	LÝ $¥[°+Ñ >Ô >Ð?ÐÐÝ˜¥XÑ.Ô.ð 	LÝ#¥D­µ+Ô)>ÀÑ$LÔ$LÑMÔMÐÝÐIÐIÐ8HÐIÑIÔIÑIÔIð PÝÐ NÀÐ NÐ NÑOÔOÐOðPõ ÐJ¸[ÐJÐJÑKÔKÐKåÐ 0Ñ1Ô1Ðð	Dð 	Dð 	Dð 	Dð 	Dð 	Dð ÐÝ:ˆõ Ý�Õ6Ð6Ô7¸ñô €Oõ ÔØØØ+ðñ ô ð r1   )r   r   r   r   )NNNN)
r"   r#   rE   rF   r%   r'   rG   rH   r   rI   )Ú
__future__r   rX   rP   r9   Úcollections.abcr   r   Útypingr   r   r   Údatastructuresr
   Ú
exceptionsr   Úheadersr   r   Úserverr   r   Ú__all__Útupler   rT   r   r   r   © r1   r   ú<module>re      se  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø €€€Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &à $Ð $Ð $Ð $Ð $Ð $Ø &Ð &Ð &Ð &Ð &Ð &Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ð .Ð/LÐ
M€à�C˜�HŒo€ðGð Gð Gð GðVDð VDð VDð VDð VDÐ'>ñ VDô VDð VDðt Ø>BØFJØNRð	Hð Hð Hð Hð Hð Hð Hr1   