
    l0jR                    \   d dl mZ d dlZd dlZd dlmZmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ  e	d          Zd'dZ	 	 d(d)dZ G d de          Z G d d          Z G d d           Z G d! d"          Z G d# d$e          Z G d% d&e          Z dS )*    )annotationsN)CallableSequence)Any	ParamSpec)	urlencode)is_async_callable)HTTPException)HTTPConnectionRequest)RedirectResponse)	WebSocket_Pconnr   scopesSequence[str]returnboolc                2    |D ]}|| j         j        vr dS dS )NFT)authr   )r   r   scopes      [/home/wildlama/miniconda3/envs/lam/lib/python3.11/site-packages/starlette/authentication.pyhas_required_scoper      s2      	(((55 )4      str | Sequence[str]status_codeintredirect
str | None0Callable[[Callable[_P, Any]], Callable[_P, Any]]c                j    t          | t                    r| gnt          |           dfd}|S )NfuncCallable[_P, Any]r   c                    t          j                   }t          |j                                                  D ]$\  }|j        dk    s|j        dk    r	|j        } n%t          d  d          |dk    r$t          j                   d 	fd            }|S t                     r&t          j                   d 	
fd            }|S t          j                   d 	
fd            }|S )Nrequest	websocketz2No "request" or "websocket" argument on function ""args_P.argskwargs	_P.kwargsr   Nonec                 L  K   |                     dt          |           k     r|          nd           }t          |t                    s J dt	          |          j         d            t          |          s|                                 d {V  d S  | i | d {V  d S )Nr'   zKParameter with name 'websocket' is required to be of type 'WebSocket' not '')getlen
isinstancer   type__name__r   close)r)   r+   r'   r#   idxscopes_lists      r   websocket_wrapperz6requires.<locals>.decorator.<locals>.websocket_wrapper-   s      "JJ{s4yyDIIVZ[[	!)Y77  9!)__59 9 9 7
 *)[AA 0#//+++++++++++$////////////r   r   c                   K   |                     dt          |           k     r|          nd           }t          |t                    s J dt	          |          j         d            t          |          s`Nt          dt          |j	                  i          }|
                               d| }t          |d          S t          	           | i | d {V S 	Nr&   zGParameter with name 'request' is required to be of type 'Request' not 'r/   next?i/  )urlr   )r   r0   r1   r2   r   r3   r4   r   r   strr=   url_forr   r
   
r)   r+   r&   orig_request_qparamnext_urlr#   r6   r   r7   r   s
        r   async_wrapperz2requires.<locals>.decorator.<locals>.async_wrapper>   s      **YS3t99__S		RVWW!'733  w^bcj^k^k^twww 3 *';?? A+.7W[AQAQ8R.S.S+&-ooh&?&?#W#WBU#W#W/H#NNNN'K@@@@!T426222222222r   c                    |                     dt          |           k     r|          nd           }t          |t                    s J dt	          |          j         d            t          |          s`Nt          dt          |j	                  i          }|
                               d| }t          |d          S t          	           | i |S r:   r>   rA   s
        r   sync_wrapperz1requires.<locals>.decorator.<locals>.sync_wrapperQ   s     **YS3t99__S		RVWW!'733  w^bcj^k^k^twww 3 *';?? A+.7W[AQAQ8R.S.S+&-ooh&?&?#W#WBU#W#W/H#NNNN'K@@@@tT,V,,,r   )r)   r*   r+   r,   r   r-   )r)   r*   r+   r,   r   r   )
inspect	signature	enumerate
parametersvaluesname	Exception	functoolswrapsr	   )r#   sig	parametertype_r8   rD   rF   r6   r   r7   r   s   `      @r   	decoratorzrequires.<locals>.decorator    s    %%'(=(=(?(?@@ 	Z 	ZNC~**in.K.K! /L XQUXXXYYYK_T""
0 
0 
0 
0 
0 
0 
0 #"
0 %$t$$ $	 _T""3 3 3 3 3 3 3 3 3 #"3 !  _T""- - - - - - - - - #"-  r   )r#   r$   r   r$   )r2   r?   list)r   r   r   rS   r7   s    `` @r   requiresrU      s`    
 )55G6((4<<K@  @  @  @  @  @  @  @ D r   c                      e Zd ZdS )AuthenticationErrorN)r4   
__module____qualname__ r   r   rW   rW   e   s        Dr   rW   c                      e Zd ZddZdS )AuthenticationBackendr   r   r   'tuple[AuthCredentials, BaseUser] | Nonec                "   K   t                      NNotImplementedError)selfr   s     r   authenticatez"AuthenticationBackend.authenticatej   s      !###r   N)r   r   r   r]   )r4   rX   rY   rc   rZ   r   r   r\   r\   i   s(        $ $ $ $ $ $r   r\   c                      e Zd ZdddZdS )AuthCredentialsNr   Sequence[str] | Nonec                6    |g nt          |          | _        d S r_   )rT   r   )rb   r   s     r   __init__zAuthCredentials.__init__o   s    "NbbVr   r_   )r   rf   )r4   rX   rY   rh   rZ   r   r   re   re   n   s-        = = = = = = =r   re   c                  V    e Zd Zedd            Zed	d            Zed	d            ZdS )
BaseUserr   r   c                    t                      r_   r`   rb   s    r   is_authenticatedzBaseUser.is_authenticatedt       !###r   r?   c                    t                      r_   r`   rl   s    r   display_namezBaseUser.display_namex   rn   r   c                    t                      r_   r`   rl   s    r   identityzBaseUser.identity|   rn   r   Nr   r   r   r?   )r4   rX   rY   propertyrm   rp   rr   rZ   r   r   rj   rj   s   sr        $ $ $ X$ $ $ $ X$ $ $ $ X$ $ $r   rj   c                  F    e Zd Zd
dZedd            Zedd            Zd	S )
SimpleUserusernamer?   r   r-   c                    || _         d S r_   rx   )rb   rx   s     r   rh   zSimpleUser.__init__   s     r   r   c                    dS )NTrZ   rl   s    r   rm   zSimpleUser.is_authenticated   s    tr   c                    | j         S r_   rz   rl   s    r   rp   zSimpleUser.display_name   s
    }r   N)rx   r?   r   r-   rs   rt   )r4   rX   rY   rh   ru   rm   rp   rZ   r   r   rw   rw      sh        ! ! ! !    X    X  r   rw   c                  >    e Zd Zedd            Zedd            ZdS )	UnauthenticatedUserr   r   c                    dS )NFrZ   rl   s    r   rm   z$UnauthenticatedUser.is_authenticated   s    ur   r?   c                    dS )N rZ   rl   s    r   rp   z UnauthenticatedUser.display_name   s    rr   Nrs   rt   )r4   rX   rY   ru   rm   rp   rZ   r   r   r~   r~      sR           X    X  r   r~   )r   r   r   r   r   r   )r   N)r   r   r   r   r   r    r   r!   )!
__future__r   rN   rG   collections.abcr   r   typingr   r   urllib.parser   starlette._utilsr	   starlette.exceptionsr
   starlette.requestsr   r   starlette.responsesr   starlette.websocketsr   r   r   rU   rM   rW   r\   re   rj   rw   r~   rZ   r   r   <module>r      s   " " " " " "      . . . . . . . . ! ! ! ! ! ! ! ! " " " " " " . . . . . . . . . . . . 6 6 6 6 6 6 6 6 0 0 0 0 0 0 * * * * * *Yt__    I I I I IX	 	 	 	 	) 	 	 	$ $ $ $ $ $ $ $
= = = = = = = =
$ $ $ $ $ $ $ $
 
 
 
 
 
 
 
    (     r   