o
     d~                     @   s4  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d
e
deje defddZ		d dejeeje f dedeje dejegef f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vr dS qdS )NFT)authr   )r   r   scope r   C/usr/local/lib/python3.10/dist-packages/starlette/authentication.pyhas_required_scope   s
   r     status_coderedirectc                    s:   t | tr| gnt| dtjdtjf fdd}|S )Nfuncr   c                    s   t  }t|j D ]\}|jdks|jdkr|j} n	qtd  d|dkrDt dt	j
dt	j
dd f fdd	}|S t rbt dt	j
dt	j
dtf fd
d}|S t dt	j
dt	j
dtf fdd}|S )Nrequest	websocketz2No "request" or "websocket" argument on function ""argskwargsr   c                     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_wrapper*   s   
z6requires.<locals>.decorator.<locals>.websocket_wrapperc                     s   | dt| k r|  nd }t|tsJ t|s?d ur:tdt|ji}dj|	|d}t
|ddS td | i |I d H S Nr   nextz{redirect_path}?{orig_request})redirect_pathorig_requesti/  )urlr   )r   r   r   r   r   r   r   strr(   format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j|	|d}t
|ddS td | i |S r$   r)   r-   r0   r   r   sync_wrapperR   s    

z1requires.<locals>.decorator.<locals>.sync_wrapper)inspect	signature	enumerate
parametersvaluesname	Exception	functoolswrapstypingAnyr   r   )r   sig	parametertype_r#   r1   r2   r   r"   r   )r   r!   r   	decorator   s@   

(zrequires.<locals>.decorator)r   r*   listr<   Callable)r   r   r   rB   r   rA   r   requires   s   GrE   c                   @   s   e Zd ZdS )AuthenticationErrorN)__name__
__module____qualname__r   r   r   r   rF   g   s    rF   c                   @   s*   e Zd Zdedejejd  fddZdS )AuthenticationBackendr   r   )AuthCredentialsBaseUserc                    s   t  NNotImplementedError)selfr   r   r   r   authenticatel   s   z"AuthenticationBackend.authenticateN)rG   rH   rI   r   r<   OptionalTuplerQ   r   r   r   r   rJ   k   s    rJ   c                   @   s(   e Zd Zddejeje  fddZdS )rK   Nr   c                 C   s    |d u r	g | _d S t || _d S rM   )rC   r   )rP   r   r   r   r   __init__s   s    zAuthCredentials.__init__rM   )rG   rH   rI   r<   rR   Sequencer*   rT   r   r   r   r   rK   r   s     rK   c                   @   sB   e Zd ZedefddZedefddZedefddZdS )	rL   r   c                 C      t  rM   rN   rP   r   r   r   is_authenticatedx      zBaseUser.is_authenticatedc                 C   rV   rM   rN   rW   r   r   r   display_name|   rY   zBaseUser.display_namec                 C   rV   rM   rN   rW   r   r   r   identity   rY   zBaseUser.identityN)	rG   rH   rI   propertyboolrX   r*   rZ   r[   r   r   r   r   rL   w   s    rL   c                   @   sB   e Zd ZdeddfddZedefddZedefdd	ZdS )

SimpleUserusernamer   Nc                 C   s
   || _ d S rM   r_   )rP   r_   r   r   r   rT      s   
zSimpleUser.__init__c                 C      dS )NTr   rW   r   r   r   rX         zSimpleUser.is_authenticatedc                 C   s   | j S rM   r`   rW   r   r   r   rZ      rY   zSimpleUser.display_name)	rG   rH   rI   r*   rT   r\   r]   rX   rZ   r   r   r   r   r^      s    r^   c                   @   s0   e Zd ZedefddZedefddZdS )UnauthenticatedUserr   c                 C   ra   )NFr   rW   r   r   r   rX      rb   z$UnauthenticatedUser.is_authenticatedc                 C   ra   )N r   rW   r   r   r   rZ      rb   z UnauthenticatedUser.display_nameN)rG   rH   rI   r\   r]   rX   r*   rZ   r   r   r   r   rc      s
    rc   )r   N)#r:   r3   r<   urllib.parser   starlette._utilsr   starlette.exceptionsr   starlette.requestsr   r   starlette.responsesr   r   starlette.websocketsr	   TypeVarrD   r
   rU   r*   r]   r   UnionintrR   rE   r9   rF   rJ   rK   rL   r^   rc   r   r   r   r   <module>   s8    	
Q