o
    ùT·jÝ  ã                   @  s  d dl mZ d dlZd dlZd dlmZmZ d dlmZm	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 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)ÚCallableÚSequence)ÚAnyÚ	ParamSpec)Ú	urlencode)Úis_async_callable)ÚHTTPException)ÚHTTPConnectionÚRequest)ÚRedirectResponse)Ú	WebSocketÚ_PÚconnr
   ÚscopesúSequence[str]ÚreturnÚboolc                 C  s    |D ]}|| j jvr dS qdS )NFT)Úauthr   )r   r   Úscope© r   ú[/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/starlette/authentication.pyÚhas_required_scope   s
   ÿr   é“  ústr | Sequence[str]Ústatus_codeÚintÚredirectú
str | Noneú0Callable[[Callable[_P, Any]], Callable[_P, Any]]c                   s.   t | tƒr| gnt| ƒ‰d‡ ‡‡fdd„}|S )NÚfuncúCallable[_P, 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                  Ÿ  sv   �|  dˆt| ƒk r| ˆ nd ¡}t|tƒs!J dt|ƒj› d�ƒ‚t|ˆƒs/| ¡ I d H  d S ˆ | i |¤ŽI d H  d S )Nr#   zKParameter with name 'websocket' is required to be of type 'WebSocket' not 'ú')ÚgetÚlenÚ
isinstancer   ÚtypeÚ__name__r   Úclose)r%   r'   r#   )r    ÚidxÚscopes_listr   r   Úwebsocket_wrapper-   s   € ÿÿ
z6requires.<locals>.decorator.<locals>.websocket_wrapperr   c                  Ÿ  s¤   �|  dˆt| ƒk r| ˆ nd ¡}t|tƒs!J dt|ƒj› d�ƒ‚t|ˆƒsHˆd urCtdt|j	ƒiƒ}| 
ˆ¡› d|› �}t|dd�S tˆd�‚ˆ | i |¤ŽI d H S ©	Nr"   zGParameter with name 'request' is required to be of type 'Request' not 'r*   Únextú?i/  )Úurlr   )r   ©r+   r,   r-   r   r.   r/   r   r   Ústrr7   Úurl_forr   r	   ©r%   r'   r"   Úorig_request_qparamÚnext_url©r    r1   r   r2   r   r   r   Úasync_wrapper>   s   € ÿ

z2requires.<locals>.decorator.<locals>.async_wrapperc                    sœ   |  dˆt| ƒk r| ˆ nd ¡}t|tƒs J dt|ƒj› d�ƒ‚t|ˆƒsGˆd urBtdt|j	ƒiƒ}| 
ˆ¡› d|› �}t|dd�S tˆd�‚ˆ | i |¤ŽS r4   r8   r;   r>   r   r   Úsync_wrapperQ   s    ÿ

z1requires.<locals>.decorator.<locals>.sync_wrapper)r%   r&   r'   r(   r   r)   )r%   r&   r'   r(   r   r   )
ÚinspectÚ	signatureÚ	enumerateÚ
parametersÚvaluesÚnameÚ	ExceptionÚ	functoolsÚwrapsr   )r    ÚsigÚ	parameterÚtype_r3   r?   r@   ©r   r2   r   )r    r1   r   Ú	decorator    s$   
þzrequires.<locals>.decorator)r    r!   r   r!   )r-   r9   Úlist)r   r   r   rN   r   rM   r   Úrequires   s   BrP   c                   @  s   e Zd ZdS )ÚAuthenticationErrorN)r/   Ú
__module__Ú__qualname__r   r   r   r   rQ   e   s    rQ   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   Úauthenticatej   s   €z"AuthenticationBackend.authenticateN)r   r
   r   rU   )r/   rR   rS   rZ   r   r   r   r   rT   i   s    rT   c                   @  s   e Zd Zdddd„ZdS )ÚAuthCredentialsNr   úSequence[str] | Nonec                 C  s    |d u r	g | _d S t |ƒ| _d S rV   )rO   r   )rY   r   r   r   r   Ú__init__o   s    zAuthCredentials.__init__rV   )r   r\   )r/   rR   rS   r]   r   r   r   r   r[   n   s    r[   c                   @  ó6   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 ƒ ‚rV   rW   ©rY   r   r   r   Úis_authenticatedt   ó   zBaseUser.is_authenticatedr9   c                 C  r`   rV   rW   ra   r   r   r   Údisplay_namex   rc   zBaseUser.display_namec                 C  r`   rV   rW   ra   r   r   r   Úidentity|   rc   zBaseUser.identityN©r   r   ©r   r9   ©r/   rR   rS   Úpropertyrb   rd   re   r   r   r   r   r_   s   ó    r_   c                   @  s@   e Zd Zddd„Zeddd	„ƒZedd
d„ƒZeddd„ƒZdS )Ú
SimpleUserÚusernamer9   r   r)   c                 C  s
   || _ d S rV   ©rl   )rY   rl   r   r   r   r]   ‚   s   
zSimpleUser.__init__r   c                 C  ó   dS )NTr   ra   r   r   r   rb   …   ó   zSimpleUser.is_authenticatedc                 C  ó   | j S rV   rm   ra   r   r   r   rd   ‰   rc   zSimpleUser.display_namec                 C  rp   rV   rm   ra   r   r   r   re   �   rc   zSimpleUser.identityN)rl   r9   r   r)   rf   rg   )r/   rR   rS   r]   ri   rb   rd   re   r   r   r   r   rk   �   s    
rk   c                   @  r^   )ÚUnauthenticatedUserr   r   c                 C  rn   )NFr   ra   r   r   r   rb   “   ro   z$UnauthenticatedUser.is_authenticatedr9   c                 C  rn   ©NÚ r   ra   r   r   r   rd   —   ro   z UnauthenticatedUser.display_namec                 C  rn   rr   r   ra   r   r   r   re   ›   ro   zUnauthenticatedUser.identityNrf   rg   rh   r   r   r   r   rq   ’   rj   rq   )r   r
   r   r   r   r   )r   N)r   r   r   r   r   r   r   r   )!Ú
__future__r   rH   rA   Úcollections.abcr   r   Útypingr   r   Úurllib.parser   Ústarlette._utilsr   Ústarlette.exceptionsr	   Ústarlette.requestsr
   r   Ústarlette.responsesr   Ústarlette.websocketsr   r   r   rP   rG   rQ   rT   r[   r_   rk   rq   r   r   r   r   Ú<module>   s,    
	ýL