Ë
    Õ±1hƒ  ã                  óÜ   — 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y)é    )ÚannotationsN)Ú	AwaitableÚIterable)ÚAnyÚCallableÚcasté   )ÚHeaders)ÚInvalidHeader)Úbuild_www_authenticate_basicÚparse_authorization_basicé   )ÚHTTPResponseÚWebSocketServerProtocolÚ BasicAuthWebSocketServerProtocolÚbasic_auth_protocol_factoryc                ó|   — 	 | \  }}t        |t        «      xr t        |t        «      S # t        t        f$ r Y yw xY w©NF)Ú
isinstanceÚstrÚ	TypeErrorÚ
ValueError)ÚvalueÚusernameÚpasswords      úT/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/websockets/legacy/auth.pyÚis_credentialsr      sF   € ðGØ"Ñˆ�(ô ˜(¤CÓ(ÒF¬Z¸Ä#Ó-FÐFøô ”zÐ"ò Ùðús   ‚) ©;º;c                  ó€   ‡ — 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_credentialsc               óD   •— |�|| _         || _        t        ‰| �  |i |¤Ž y ©N)r    Ú_check_credentialsÚsuperÚ__init__)Úselfr    r#   ÚargsÚkwargsÚ	__class__s        €r   r(   z)BasicAuthWebSocketServerProtocol.__init__.   s,   ø€ ð ÐØˆDŒJØ"3ˆÔÜ‰Ñ˜$Ð) &Ó)ó    c              ƒ  ó\   K  — | j                   �| j                  ||«      ƒ d{  –—† S y7 Œ­w)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:   s3   è ø€ ð  ×"Ñ"Ð.Ø×0Ñ0°¸8ÓD×DÐDàð Eús   ‚",¤*¥,c              ƒ  ó  •K  — 	 |d   }	 t        |«      \  }}| j                  ||«      ƒ d{  –—† s3t        j                  j                  dt	        | j
                  «      fgdfS || _	        t        ‰| �-  ||«      ƒ d{  –—† S # t         $ r6 t        j                  j                  dt	        | j
                  «      fgdfcY S w xY w# t        $ r6 t        j                  j                  dt	        | j
                  «      fgdfcY S w xY w7 ŒÚ7 ŒŠ­w)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)   ÚpathÚrequest_headersÚauthorizationr   r   r,   s         €r   r5   z0BasicAuthWebSocketServerProtocol.process_requestO   s  øè ø€ ð	Ø+¨OÑ<ˆMð	Ü!:¸=Ó!IÑˆH�hð ×+Ñ+¨H°hÓ?×?Ð?ä—‘×,Ñ,Ø$Ô&BÀ4Ç:Á:Ó&NÐOÐPØ(ðð ð !ˆŒä‘WÑ,¨T°?ÓC×CÐCøô3 ò 	ä—‘×,Ñ,Ø$Ô&BÀ4Ç:Á:Ó&NÐOÐPØ(ðò ð	ûô ò 	ä—‘×,Ñ,Ø$Ô&BÀ4Ç:Á:Ó&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#   ú,Callable[[str, str], Awaitable[bool]] | Noner+   r   ÚreturnÚNone©r   r   r   r   r:   Úbool)r6   r   r7   r
   r:   zHTTPResponse | None)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    Ú__annotations__r   r(   r#   r5   Ú__classcell__)r,   s   @r   r   r      s•   ø… ñð
 €Eˆ3ƒOðð  €HˆjÓØ-ð
 !ØJNñ	
*àð
*ð ð
*ð Hð	
*ð
 ð
*ð 
õ
*óð*$Dàð$Dð !ð$Dð 
÷	$Dñ $Dr-   c                óº  ‡— |du |du k(  rt        d«      ‚|�Œt        |«      rt        t        |«      g}n^t	        |t
        «      r@t        t        t
        t           |«      «      }t        d„ |D «       «      st        d|› �«      ‚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  ó2   K  — | ]  }t        |«      –— Œ y ­wr%   )r   )Ú.0Úitems     r   ú	<genexpr>z.basic_auth_protocol_factory.<locals>.<genexpr>¤   s   è ø€ ÒI°”~ d×+ÑIùs   ‚zinvalid credentials argument: c              “  ób   •K  — 	 ‰|    }t        j                  ||«      S # t         $ r Y yw xY w­wr   )r1   ÚhmacÚcompare_digest)r   r   Úexpected_passwordÚcredentials_dicts      €r   r#   z6basic_auth_protocol_factory.<locals>.check_credentials«   s@   øè ø€ ðØ$4°XÑ$>Ð!ô ×&Ñ&Ð'8¸(ÓCÐCøô ò Ùðüs   ƒ/…  Š/ 	,©/«,¬/.r"   r<   )r   r   r   ÚCredentialsr   r   ÚlistÚallÚdictr   r   Ú	functoolsÚpartial)r    Úcredentialsr#   Úcreate_protocolÚcredentials_listrM   s        @r   r   r   v   sò   ø€ ðL 	�tÐÐ!2°dÐ!:Ò;ÜÐIÓJÐJàÐÜ˜+Ô&Ü $¤[°+Ó >Ð?ÑÜ˜¤XÔ.Ü#¤D¬´+Ñ)>ÀÓ$LÓMÐÜÑIÐ8HÔIÔIÜÐ"@ÀÀÐ NÓOÐOäÐ<¸[¸MÐJÓKÐKäÐ 0Ó1Ðõ	Dð ÐÜ:ˆô Ü�Ô6Ð6Ñ7¸ó€Oô ×ÑØØØ+ôð r-   )r   r   r:   r=   )NNNN)
r    r!   rT   z*Credentials | Iterable[Credentials] | Noner#   r9   rU   z6Callable[..., BasicAuthWebSocketServerProtocol] | Noner:   z/Callable[..., BasicAuthWebSocketServerProtocol])Ú
__future__r   rR   rJ   r2   Úcollections.abcr   r   Útypingr   r   r   Údatastructuresr
   Ú
exceptionsr   Úheadersr   r   Úserverr   r   Ú__all__Útupler   rN   r   r   r   © r-   r   ú<module>ra      s¡   ðÝ "ã Û Û ß /ß &Ñ &å $Ý &ß Mß 9ð .Ð/LÐ
M€à�C˜�H‰o€óGôVDÐ'>ô VDðt Ø>BØFJØNRð	HØðHà;ðHð DðHð Lð	Hð
 5ôHr-   