a
    њh*                     @  s>  d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ ejdkrdd 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)Sequence)AnyCallable)	urlencode)   
   )	ParamSpec)is_async_callable)HTTPException)HTTPConnectionRequest)RedirectResponse)	WebSocket_Pr   zSequence[str]bool)connscopesreturnc                 C  s    |D ]}|| j jvr dS qdS )NFT)authr   )r   r   scope r   S/wd/webapps/venvs/v2025_4um/lib/python3.9/site-packages/starlette/authentication.pyhas_required_scope   s    r     zstr | Sequence[str]intz
str | Nonez0Callable[[Callable[_P, Any]], Callable[_P, Any]])r   status_coderedirectr   c                   s4   t | tr| gnt| ddd fdd}|S )NzCallable[_P, 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.J t|sH| I d H  n | i |I d H  d S )Nr    )getlen
isinstancer   r   close)r#   r$   r    )r   idxscopes_listr   r   websocket_wrapper3   s
     
z6requires.<locals>.decorator.<locals>.websocket_wrapperr   c                    s   | dt| k r|  nd }t|ts.J t|s|d urrtdt|ji}| d| }t	|ddS t
d | i |I d H S Nr   next?i/  )urlr   )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_wrapperA   s     

z2requires.<locals>.decorator.<locals>.async_wrapperc                    s   | dt| k r|  nd }t|ts.J t|s|d urrtdt|ji}| d| }t	|ddS t
d | i |S r,   r0   r2   r3   r   r   sync_wrapperR   s     

z1requires.<locals>.decorator.<locals>.sync_wrapper)
inspect	signature	enumerate
parametersvaluesname	Exception	functoolswrapsr
   )r   sigZ	parametertype_r+   r4   r5   r   r*   r   )r   r)   r   	decorator&   s"    
	  zrequires.<locals>.decorator)r'   r1   list)r   r   r   rB   r   rA   r   requires   s    ;rD   c                   @  s   e Zd ZdS )AuthenticationErrorN)__name__
__module____qualname__r   r   r   r   rE   d   s   rE   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   authenticatei   s    z"AuthenticationBackend.authenticateN)rF   rG   rH   rN   r   r   r   r   rI   h   s   rI   c                   @  s   e Zd ZdddddZdS )AuthCredentialsNzSequence[str] | None)r   c                 C  s   |d u rg nt || _d S rJ   )rC   r   )rM   r   r   r   r   __init__n   s    zAuthCredentials.__init__)N)rF   rG   rH   rP   r   r   r   r   rO   m   s   rO   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 rJ   rK   rM   r   r   r   is_authenticateds   s    zBaseUser.is_authenticatedr1   c                 C  s
   t  d S rJ   rK   rS   r   r   r   display_namew   s    zBaseUser.display_namec                 C  s
   t  d S rJ   rK   rS   r   r   r   identity{   s    zBaseUser.identityN)rF   rG   rH   propertyrT   rU   rV   r   r   r   r   rQ   r   s   rQ   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 )
SimpleUserr1   r"   )usernamer   c                 C  s
   || _ d S rJ   rY   )rM   rY   r   r   r   rP      s    zSimpleUser.__init__r   rR   c                 C  s   dS )NTr   rS   r   r   r   rT      s    zSimpleUser.is_authenticatedc                 C  s   | j S rJ   rZ   rS   r   r   r   rU      s    zSimpleUser.display_nameN)rF   rG   rH   rP   rW   rT   rU   r   r   r   r   rX      s
   rX   c                   @  s0   e Zd ZeddddZeddddZdS )	UnauthenticatedUserr   rR   c                 C  s   dS )NFr   rS   r   r   r   rT      s    z$UnauthenticatedUser.is_authenticatedr1   c                 C  s   dS )N r   rS   r   r   r   rU      s    z UnauthenticatedUser.display_nameN)rF   rG   rH   rW   rT   rU   r   r   r   r   r[      s   r[   )r   N)$
__future__r   r=   r6   syscollections.abcr   typingr   r   urllib.parser   version_infor	   Ztyping_extensionsZstarlette._utilsr
   Zstarlette.exceptionsr   Zstarlette.requestsr   r   Zstarlette.responsesr   Zstarlette.websocketsr   r   r   rD   r<   rE   rI   rO   rQ   rX   r[   r   r   r   r   <module>   s2   
	  E