U
    &%e~                     @   s&  d dl Z d dlZd dl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mZ d dlmZ ejdejd	Ze
eje ed
ddZdejeeje f eeje ejegef 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 )    N)	urlencode)is_async_callable)HTTPException)HTTPConnectionRequest)RedirectResponseResponse)	WebSocket_CallableType)bound)connscopesreturnc                 C   s    |D ]}|| j jkr dS qdS )NFT)authr   )r   r   scope r   W/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/starlette/authentication.pyhas_required_scope   s    r     )r   status_coderedirectr   c                    s8   t | tr| gnt| tjtjd fdd}|S )N)funcr   c                    s   t  }t|j D ]&\}|jdks4|jdkr|j} qPqtd  d|dkrt t	j
t	j
d d fdd}|S t rt t	j
t	j
td fdd	}|S t t	j
t	j
td fd
d}|S d S )Nrequest	websocketz2No "request" or "websocket" argument on function "")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_wrapper*   s     
z6requires.<locals>.decorator.<locals>.websocket_wrapperc                     s   | dt| k r|  nd }t|ts.tt|s|d k	rrtdt|ji}dj	|
|d}t|ddS td | |I d H S Nr   nextz{redirect_path}?{orig_request})Zredirect_pathZorig_requesti/  )urlr   )r   r   r   r   r   r    r   r   strr'   formatZ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j	|
|d}t|ddS td | |S r%   r(   r+   r,   r   r   sync_wrapperR   s     

z1requires.<locals>.decorator.<locals>.sync_wrapper)inspect	signature	enumerate
parametersvaluesname	Exception	functoolswrapstypingAnyr   r   )r   sigZ	parametertype_r$   r-   r.   r   r#   r   )r   r"   r   	decorator   s2    

  $zrequires.<locals>.decorator)r   r)   listr8   Callable)r   r   r   r=   r   r<   r   requires   s    Gr@   c                   @   s   e Zd ZdS )AuthenticationErrorN)__name__
__module____qualname__r   r   r   r   rA   g   s   rA   c                   @   s(   e Zd Zeejejd  dddZdS )AuthenticationBackend)AuthCredentialsBaseUser)r   r   c                    s
   t  d S NNotImplementedError)selfr   r   r   r   authenticatel   s    z"AuthenticationBackend.authenticateN)rB   rC   rD   r   r8   OptionalTuplerL   r   r   r   r   rE   k   s   rE   c                   @   s(   e Zd Zdejeje  dddZdS )rF   N)r   c                 C   s   |d krg nt || _d S rH   )r>   r   )rK   r   r   r   r   __init__s   s    zAuthCredentials.__init__)N)rB   rC   rD   r8   rM   Sequencer)   rO   r   r   r   r   rF   r   s   rF   c                   @   sB   e Zd ZeedddZeedddZeedddZdS )	rG   r   c                 C   s
   t  d S rH   rI   rK   r   r   r   is_authenticatedx   s    zBaseUser.is_authenticatedc                 C   s
   t  d S rH   rI   rR   r   r   r   display_name|   s    zBaseUser.display_namec                 C   s
   t  d S rH   rI   rR   r   r   r   identity   s    zBaseUser.identityN)	rB   rC   rD   propertyboolrS   r)   rT   rU   r   r   r   r   rG   w   s   rG   c                   @   s@   e Zd ZeddddZeedddZeeddd	ZdS )

SimpleUserN)usernamer   c                 C   s
   || _ d S rH   rY   )rK   rY   r   r   r   rO      s    zSimpleUser.__init__rQ   c                 C   s   dS )NTr   rR   r   r   r   rS      s    zSimpleUser.is_authenticatedc                 C   s   | j S rH   rZ   rR   r   r   r   rT      s    zSimpleUser.display_name)	rB   rC   rD   r)   rO   rV   rW   rS   rT   r   r   r   r   rX      s
   rX   c                   @   s0   e Zd ZeedddZeedddZdS )UnauthenticatedUserrQ   c                 C   s   dS )NFr   rR   r   r   r   rS      s    z$UnauthenticatedUser.is_authenticatedc                 C   s   dS )N r   rR   r   r   r   rT      s    z UnauthenticatedUser.display_nameN)rB   rC   rD   rV   rW   rS   r)   rT   r   r   r   r   r[      s   r[   )r   N)#r6   r/   r8   urllib.parser   Zstarlette._utilsr   Zstarlette.exceptionsr   Zstarlette.requestsr   r   Zstarlette.responsesr   r   Zstarlette.websocketsr	   TypeVarr?   r
   rP   r)   rW   r   UnionintrM   r@   r5   rA   rE   rF   rG   rX   r[   r   r   r   r   <module>   s0   	  Q