o
    [h|                  	   @   s  d dl 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
mZ d dlm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dej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)HTTPException)HTTPConnectionRequest)RedirectResponseResponse)	WebSocketconnscopesreturnc                 C   s    |D ]}|| j jvr dS qdS )NFT)authr	   )r   r	   scope r   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-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   d }t  }t|j D ]\}|jdks|jdkr!|j} n	qtd  d|dkrFt dt	j
dt	j
dd f fdd	}|S t ret 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                     s\   | d| r
|  nd }t|tsJ t|s"| I d H  d S  | i |I d H  d S )Nr   )get
isinstancer   r   close)r   r   r   )r   idxscopes_listr   r   websocket_wrapper(   s   
z6requires.<locals>.decorator.<locals>.websocket_wrapperc                     sj   | d| r
|  nd }t|tsJ t|s+d ur&t|ddS td | i |I d H S Nr   i/  )urlr   )r   r   r   r   r   r   Zurl_forr   r   r   r   r   r   r   r   r   r   r   async_wrapper8   s   


z2requires.<locals>.decorator.<locals>.async_wrapperc                     sb   | d| r	|  nd }t|tsJ t|s*d ur%t|ddS td | i |S r   r!   r"   r#   r   r   sync_wrapperK   s   


z1requires.<locals>.decorator.<locals>.sync_wrapper)inspect	signature	enumerate
parametersvaluesname	Exception	functoolswrapstypingAnyasyncioiscoroutinefunctionr   )r   typesigZ	parameterr   r$   r%   r   r   r   )r   r   r   	decorator   sB   


(zrequires.<locals>.decorator)r   strlistr/   Callable)r	   r   r   r6   r   r5   r   requires   s   @r:   c                   @   s   e Zd ZdS )AuthenticationErrorN)__name__
__module____qualname__r   r   r   r   r;   ]   s    r;   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   authenticateb   s   z"AuthenticationBackend.authenticateN)r<   r=   r>   r   r/   OptionalTuplerF   r   r   r   r   r?   a   s    r?   c                   @   s"   e Zd Zddeje fddZdS )r@   Nr	   c                 C   s    |d u r	g | _d S t || _d S rB   )r8   r	   )rE   r	   r   r   r   __init__i   s    zAuthCredentials.__init__rB   )r<   r=   r>   r/   Sequencer7   rI   r   r   r   r   r@   h   s    r@   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 )	rA   r
   c                 C      t  rB   rC   rE   r   r   r   is_authenticatedn      zBaseUser.is_authenticatedc                 C   rK   rB   rC   rL   r   r   r   display_namer   rN   zBaseUser.display_namec                 C   rK   rB   rC   rL   r   r   r   identityv   rN   zBaseUser.identityN)	r<   r=   r>   propertyboolrM   r7   rO   rP   r   r   r   r   rA   m   s    rA   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 rB   rT   )rE   rT   r   r   r   rI   |   s   
zSimpleUser.__init__c                 C      dS )NTr   rL   r   r   r   rM         zSimpleUser.is_authenticatedc                 C   s   | j S rB   rU   rL   r   r   r   rO      rN   zSimpleUser.display_name)	r<   r=   r>   r7   rI   rQ   rR   rM   rO   r   r   r   r   rS   {   s    rS   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   rV   )NFr   rL   r   r   r   rM      rW   z$UnauthenticatedUser.is_authenticatedc                 C   rV   )N r   rL   r   r   r   rO      rW   z UnauthenticatedUser.display_nameN)r<   r=   r>   rQ   rR   rM   r7   rO   r   r   r   r   rX      s
    rX   )r   N)r1   r-   r&   r/   Zstarlette.exceptionsr   Zstarlette.requestsr   r   Zstarlette.responsesr   r   Zstarlette.websocketsr   rJ   r7   rR   r   Unionintr9   r:   r,   r;   r?   r@   rA   rS   rX   r   r   r   r   <module>   s4    	
J