
    &thM                        d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
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)Any	AwaitableCallableIterableOptionalTupleUnion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      j/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/websockets/legacy/auth.pyis_credentialsr"      s\    G"( (C((FZ#-F-FF z"   uu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Optional[str]r   r%   check_credentialsargsr   r(   /Optional[Callable[[str, str], Awaitable[bool]]]kwargsr   Nonec               Z    ||| _         || _         t                      j        |i | d S N)r%   _check_credentialssuper__init__)selfr%   r(   r)   r+   	__class__s        r!   r1   z)BasicAuthWebSocketServerProtocol.__init__-   s<     DJ"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:
            bool: :obj:`True` if the handshake should continue;
            :obj:`False` if it should fail with a HTTP 401 error.

        NF)r/   )r2   r   r    s      r!   r(   z2BasicAuthWebSocketServerProtocol.check_credentials9   s>        ".008DDDDDDDDDur4   pathrequest_headersr   Optional[HTTPResponse]c                  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 )zR
        Check HTTP Basic Auth and return a 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   r0   process_request)r2   r6   r7   authorizationr   r    r3   s         r!   r?   z0BasicAuthWebSocketServerProtocol.process_requestN   s]     	+O<MM 	 	 	,$&B4:&N&NOP(   		!:=!I!IHhh 	 	 	,$&B4:&N&NOP,   	 ++Hh???????? 	,$&B4:&N&NOP(  !WW,,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   )r6   r   r7   r   r   r8   )__name__
__module____qualname____doc__r%   __annotations__r   r1   r(   r?   __classcell__)r3   s   @r!   r   r      s          
 EOOOO #H""""-
  $MQ	
* 
* 
* 
* 
* 
* 
* 
*   *$D $D $D $D $D $D $D $D $D $Dr4   r%   r&   credentials3Optional[Union[Credentials, Iterable[Credentials]]]r(   r*   create_protocol;Optional[Callable[[Any], BasicAuthWebSocketServerProtocol]]1Callable[[Any], BasicAuthWebSocketServerProtocol]c                    |du |du k    rt          d          |t          |          rt          t          |          g}nbt	          |t
                    r;t          |          }t          d |D                       st          d|           nt          d|           t          |          dfd
}|-t          t          t          gt          f         t                    }t          j        || |          S )aI  
    Protocol factory that enforces HTTP Basic Auth.

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

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

    Args:
        realm: indicates the 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: defines hard coded authorized credentials. It can be a
            ``(username, password)`` pair or a list of such pairs.
        check_credentials: defines a coroutine that verifies credentials.
            This coroutine 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Ir4   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   )r;   hmaccompare_digest)r   r    expected_passwordcredentials_dicts      r!   r(   z6basic_auth_protocol_factory.<locals>.check_credentials   sP      $4X$>!!   uu&'8(CCCs    
r'   rA   )r   r"   r   Credentialsr   r   listalldictr   r   r   	functoolspartial)r%   rH   r(   rJ   credentials_listrV   s        @r!   r   r   u   sR   L 	t!2d!:;;IJJJ+&& 	L $[+ > >?X.. 	L#K00II8H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 cU<<=,
 

 +   r4   )r   r   r   r   )NNNN)
r%   r&   rH   rI   r(   r*   rJ   rK   r   rL   )
__future__r   r[   rS   r<   typingr   r   r   r   r   r	   r
   r   datastructuresr   
exceptionsr   headersr   r   serverr   r   __all__r   rW   r"   r   r    r4   r!   <module>rf      sk   " " " " " "       S S S S S S S S S S S S S S S S S S S S $ $ $ $ $ $ & & & & & & M M M M M M M M 9 9 9 9 9 9 9 9 ./L
MCHoG G G GVD VD VD VD VD'> VD VD VDt  GKIMSW	G G G G G G Gr4   