o
    hT                     @  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r(d 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Z		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_Pconnr	   scopestyping.Sequence[str]returnboolc                 C  s    |D ]}|| j jvr dS qdS )NFT)authr   )r   r   scope r   l/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/starlette/authentication.pyhas_required_scope   s
   r     str | typing.Sequence[str]status_codeintredirect
str | NoneStyping.Callable[[typing.Callable[_P, typing.Any]], typing.Callable[_P, typing.Any]]c                   s.   t | tr| gnt| d fdd}|S )Nfunctyping.Callable[_P, typing.Any]r   c                   s   t  }t|j D ]\}|jdks|jdkr|j} n	qtd  d|dkr<t d fdd}|S t	 rRt d fdd}|S t d fdd}|S )Nrequest	websocketz2No "request" or "websocket" argument on function ""args_P.argskwargs	_P.kwargsr   Nonec                    sd   | dt| k r|  nd }t|tsJ t|s&| I d H  d S  | i |I d H  d S )Nr"   )getlen
isinstancer   r   close)r$   r&   r"   )r   idxscopes_listr   r   websocket_wrapper2   s    
z6requires.<locals>.decorator.<locals>.websocket_wrapper
typing.Anyc                    s   | dt| k r|  nd }t|tsJ t|s?d ur:t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   strr4   url_forr   r   r$   r&   r!   orig_request_qparam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J t|s>d ur9tdt|ji}| d| }t	|ddS t
d | i |S r1   r5   r8   r;   r   r   sync_wrapperQ   s    

z1requires.<locals>.decorator.<locals>.sync_wrapper)r$   r%   r&   r'   r   r(   )r$   r%   r&   r'   r   r0   )
inspect	signature	enumerate
parametersvaluesname	Exception	functoolswrapsr   )r   sig	parametertype_r/   r<   r=   r   r.   r   )r   r-   r   	decorator%   s$   
	zrequires.<locals>.decorator)r   r    r   r    )r+   r6   list)r   r   r   rK   r   rJ   r   requires   s   ;rM   c                   @  s   e Zd ZdS )AuthenticationErrorN)__name__
__module____qualname__r   r   r   r   rN   c   s    rN   c                   @  s   e Zd ZdddZdS )	AuthenticationBackendr   r	   r   'tuple[AuthCredentials, BaseUser] | Nonec                   s   t  NNotImplementedError)selfr   r   r   r   authenticateh   s   z"AuthenticationBackend.authenticateN)r   r	   r   rS   )rO   rP   rQ   rX   r   r   r   r   rR   g   s    rR   c                   @  s   e Zd ZddddZdS )AuthCredentialsNr   typing.Sequence[str] | Nonec                 C  s    |d u r	g | _d S t || _d S rT   )rL   r   )rW   r   r   r   r   __init__m   s    zAuthCredentials.__init__rT   )r   rZ   )rO   rP   rQ   r[   r   r   r   r   rY   l   s    rY   c                   @  s6   e Zd ZedddZedddZeddd	Zd
S )BaseUserr   r   c                 C     t  rT   rU   rW   r   r   r   is_authenticatedr      zBaseUser.is_authenticatedr6   c                 C  r]   rT   rU   r^   r   r   r   display_namev   r`   zBaseUser.display_namec                 C  r]   rT   rU   r^   r   r   r   identityz   r`   zBaseUser.identityNr   r   r   r6   )rO   rP   rQ   propertyr_   ra   rb   r   r   r   r   r\   q   s    r\   c                   @  s2   e Zd ZdddZeddd	Zedd
dZdS )
SimpleUserusernamer6   r   r(   c                 C  s
   || _ d S rT   rg   )rW   rg   r   r   r   r[      s   
zSimpleUser.__init__r   c                 C     dS )NTr   r^   r   r   r   r_         zSimpleUser.is_authenticatedc                 C  s   | j S rT   rh   r^   r   r   r   ra      r`   zSimpleUser.display_nameN)rg   r6   r   r(   rc   rd   )rO   rP   rQ   r[   re   r_   ra   r   r   r   r   rf      s    
rf   c                   @  s(   e Zd Zed	ddZed
ddZdS )UnauthenticatedUserr   r   c                 C  ri   )NFr   r^   r   r   r   r_      rj   z$UnauthenticatedUser.is_authenticatedr6   c                 C  ri   )N r   r^   r   r   r   ra      rj   z UnauthenticatedUser.display_nameNrc   rd   )rO   rP   rQ   re   r_   ra   r   r   r   r   rk      s
    rk   )r   r	   r   r   r   r   )r   N)r   r   r   r   r   r   r   r   ) 
__future__r   rE   r>   systypingurllib.parser   version_infor   typing_extensionsstarlette._utilsr   starlette.exceptionsr   starlette.requestsr	   r
   starlette.responsesr   starlette.websocketsr   r   r   rM   rD   rN   rR   rY   r\   rf   rk   r   r   r   r   <module>   s2    

	E