
    vKg                        S SK Jr  S SKrS SKrS SKrS SKJrJr  S SKJ	r	J
r
Jr  SSKJr  SSKJr  SSKJrJr  S	S
KJrJr  SS/r\\\4   rSS jr " S S\5      r    S         SS jjrg)    )annotationsN)	AwaitableIterable)AnyCallablecast   )Headers)InvalidHeader)build_www_authenticate_basicparse_authorization_basic   )HTTPResponseWebSocketServerProtocol BasicAuthWebSocketServerProtocolbasic_auth_protocol_factoryc                     U u  p[        U[        5      =(       a    [        U[        5      $ ! [        [        4 a     gf = fNF)
isinstancestr	TypeError
ValueError)valueusernamepasswords      V/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/websockets/legacy/auth.pyis_credentialsr      sD    G" (C(FZ#-FF z" s   - A A c                     ^  \ rS rSr% SrSrS\S'    SrS\S'    SSS	.         SU 4S
 jjjrSS jr	      SU 4S jjr
SrU =r$ )r      z;
WebSocket server protocol that enforces HTTP Basic Auth.

 r   realmN
str | Noner   r!   check_credentialsc               D   > Ub  Xl         X l        [        TU ]  " U0 UD6  g N)r!   _check_credentialssuper__init__)selfr!   r$   argskwargs	__class__s        r   r)   )BasicAuthWebSocketServerProtocol.__init__.   s(     J"3$)&)    c                \   #    U R                   b  U R                  X5      I Sh  vN $ g N7f)ar  
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$   2BasicAuthWebSocketServerProtocol.check_credentials:   s0       "".00DDD Es   ",*,c                $  >#     US   n [        U5      u  pEU R                  XE5      I Sh  vN (       d3  [        R                  R                  S[	        U R
                  5      4/S4$ X@l	        [        TU ]-  X5      I Sh  vN $ ! [          a6    [        R                  R                  S[	        U R
                  5      4/S4s $ f = f! [         a6    [        R                  R                  S[	        U R
                  5      4/S4s $ f = f N N7f)zC
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*   pathrequest_headersauthorizationr   r   r-   s         r   r8   0BasicAuthWebSocketServerProtocol.process_requestO   s    	+O<M	!:=!IH ++H???,,$&B4::&NOP(  !W,TCCC3  	,,$&B4::&NOP( 	  	,,$&B4::&NOP, 	 @ Dsa   DB C	 DDADDD=CDCD	=D	DD		DD)r'   r!   r   )
r+   r   r!   r"   r$   ,Callable[[str, str], Awaitable[bool]] | Noner,   r   returnNoner   r   r   r   r>   bool)r9   r   r:   r
   r>   zHTTPResponse | None)__name__
__module____qualname____firstlineno____doc__r!   __annotations__r   r)   r$   r8   __static_attributes____classcell__)r-   s   @r   r   r      s    
 E3O  Hj-
 !JN	
*
* 
* H	
*
 
* 

* 
**$D$D !$D 
	$D $Dr/   c                  ^ USL USL :X  a  [        S5      eUb  [        U5      (       a  [        [        U5      /nOi[	        U[
        5      (       aF  [        [        [
        [           U5      5      n[        S U 5       5      (       d  [        SU 35      eO[        SU 35      e[        U5      mSU4S jjnUc  [        n[        [        S[        4   U5      n[        R                  " UU US9$ )	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  6   #    U H  n[        U5      v   M     g 7fr&   )r   ).0items     r   	<genexpr>.basic_auth_protocol_factory.<locals>.<genexpr>   s     I8H~d++8Hs   zinvalid credentials argument: c                d   >#     TU    n[        R                  " X!5      $ ! [          a     gf = f7fr   )r4   hmaccompare_digest)r   r   expected_passwordcredentials_dicts      r   r$   6basic_auth_protocol_factory.<locals>.check_credentials   s=     $4X$>! &&'8CC  s   0  0
-0-0.r#   r@   )r   r   r   Credentialsr   r   listalldictr   r   	functoolspartial)r!   credentialsr$   create_protocolcredentials_listrT   s        @r   r   r   v   s   L 	t!2d!:;IJJ+&& $[+ >?X..#D+)>$LMI8HIII"@ NOO J <[MJKK 01	D : 667O + r/   )r   r   r>   rA   )NNNN)
r!   r"   r\   z*Credentials | Iterable[Credentials] | Noner$   r=   r]   z6Callable[..., BasicAuthWebSocketServerProtocol] | Noner>   z/Callable[..., BasicAuthWebSocketServerProtocol])
__future__r   rZ   rQ   r5   collections.abcr   r   typingr   r   r   datastructuresr
   
exceptionsr   headersr   r   serverr   r   __all__tupler   rV   r   r   r    r/   r   <module>ri      s    "    / & & $ & M 9 ./L
MCHoGVD'> VDt >BFJNR	HH;H DH L	H
 5Hr/   