U
    RhT                     @  s*  d dl mZ d dlZd dlZd dlZd dlZd dlmZ ejdkrPd dlm	Z	 n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ddddZd&dddddddZG dd deZG dd dZG dd dZG d d! d!ZG d"d# d#eZG d$d% d%eZdS )'    )annotationsN)	urlencode)   
   )	ParamSpec)is_async_callable)HTTPException)HTTPConnectionRequest)RedirectResponse)	WebSocket_Pr	   ztyping.Sequence[str]bool)connscopesreturnc                 C  s    |D ]}|| j jkr dS qdS )NFT)Zauthr   )r   r   Zscope r   >./venv/lib/python3.8/site-packages/starlette/authentication.pyhas_required_scope   s    r     zstr | typing.Sequence[str]intz
str | NonezStyping.Callable[[typing.Callable[_P, typing.Any]], typing.Callable[_P, typing.Any]])r   status_coderedirectr   c                   s4   t | tr| gnt| ddd fdd}|S )Nztyping.Callable[_P, typing.Any])funcr   c                   s   t  }t|j D ]&\}|jdks4|jdkr|j} qPqtd  d|dkrt dddd fd	d
}|S t	 rt dddd fdd}|S t dddd fdd}|S d S )Nrequest	websocketz2No "request" or "websocket" argument on function ""z_P.argsz	_P.kwargsNone)argskwargsr   c                    s\   | dt| k r|  nd }t|ts.tt|sH| I d H  n | |I d H  d S )Nr   )getlen
isinstancer   AssertionErrorr   close)r   r   r   )r   idxscopes_listr   r   websocket_wrapper2   s
     
z6requires.<locals>.decorator.<locals>.websocket_wrapperz
typing.Anyc                    s   | dt| k r|  nd }t|ts.tt|s|d k	rrtdt|ji}|	 d| }t
|ddS td | |I d H S Nr   next?i/  )urlr   )r   r    r!   r"   r
   r#   r   r   strr+   Zurl_forr   r   r   r   r   Zorig_request_qparamZnext_urlr   r%   r   r&   r   r   r   async_wrapper@   s     

z2requires.<locals>.decorator.<locals>.async_wrapperc                    s   | dt| k r|  nd }t|ts.tt|s|d k	rrtdt|ji}|	 d| }t
|ddS td | |S r(   r,   r.   r/   r   r   sync_wrapperQ   s     

z1requires.<locals>.decorator.<locals>.sync_wrapper)
inspectZ	signature	enumerateZ
parametersvaluesname	Exception	functoolswrapsr   )r   ZsigZ	parameterZtype_r'   r0   r1   r   r&   r   )r   r%   r   	decorator%   s"    
	  zrequires.<locals>.decorator)r"   r-   list)r   r   r   r:   r   r9   r   requires   s    ;r<   c                   @  s   e Zd ZdS )AuthenticationErrorN)__name__
__module____qualname__r   r   r   r   r=   c   s   r=   c                   @  s   e Zd ZdddddZdS )AuthenticationBackendr	   z'tuple[AuthCredentials, BaseUser] | None)r   r   c                   s
   t  d S NNotImplementedError)selfr   r   r   r   authenticateh   s    z"AuthenticationBackend.authenticateN)r>   r?   r@   rF   r   r   r   r   rA   g   s   rA   c                   @  s   e Zd ZdddddZdS )AuthCredentialsNztyping.Sequence[str] | None)r   c                 C  s   |d krg nt || _d S rB   )r;   r   )rE   r   r   r   r   __init__m   s    zAuthCredentials.__init__)N)r>   r?   r@   rH   r   r   r   r   rG   l   s   rG   c                   @  sB   e Zd ZeddddZeddddZedddd	Zd
S )BaseUserr   r   c                 C  s
   t  d S rB   rC   rE   r   r   r   is_authenticatedr   s    zBaseUser.is_authenticatedr-   c                 C  s
   t  d S rB   rC   rK   r   r   r   display_namev   s    zBaseUser.display_namec                 C  s
   t  d S rB   rC   rK   r   r   r   identityz   s    zBaseUser.identityN)r>   r?   r@   propertyrL   rM   rN   r   r   r   r   rI   q   s   rI   c                   @  s@   e Zd ZdddddZedddd	Zeddd
dZdS )
SimpleUserr-   r   )usernamer   c                 C  s
   || _ d S rB   rQ   )rE   rQ   r   r   r   rH      s    zSimpleUser.__init__r   rJ   c                 C  s   dS )NTr   rK   r   r   r   rL      s    zSimpleUser.is_authenticatedc                 C  s   | j S rB   rR   rK   r   r   r   rM      s    zSimpleUser.display_nameN)r>   r?   r@   rH   rO   rL   rM   r   r   r   r   rP      s
   rP   c                   @  s0   e Zd ZeddddZeddddZdS )	UnauthenticatedUserr   rJ   c                 C  s   dS )NFr   rK   r   r   r   rL      s    z$UnauthenticatedUser.is_authenticatedr-   c                 C  s   dS )N r   rK   r   r   r   rM      s    z UnauthenticatedUser.display_nameN)r>   r?   r@   rO   rL   rM   r   r   r   r   rS      s   rS   )r   N) Z
__future__r   r7   r2   systypingZurllib.parser   version_infor   Ztyping_extensionsZstarlette._utilsr   Zstarlette.exceptionsr   Zstarlette.requestsr	   r
   Zstarlette.responsesr   Zstarlette.websocketsr   r   r   r<   r6   r=   rA   rG   rI   rP   rS   r   r   r   r   <module>   s0   
	  E