
    #jR                    >   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Z	 	 d	 	 	 	 	 	 	 ddZ G d de      Z G d d      Z G d d      Z G d d      Z G d de      Z G d de      Z y)    )annotationsN)CallableSequence)Any	ParamSpec)	urlencode)is_async_callable)HTTPException)HTTPConnectionRequest)RedirectResponse)	WebSocket_Pc                F    |D ]  }|| j                   j                  vs y y)NFT)authscopes)connr   scopes      n/home/mi/.openclaw/workspace/fridge-app/backend/.venv/lib/python3.12/site-packages/starlette/authentication.pyhas_required_scoper      s+     		(((     c                `    t        | t              r| gn
t        |       	 	 	 	 dfd}|S )Nc                    t        j                         }t        |j                  j	                               D ]1  \  }|j
                  dk(  s|j
                  dk(  s%|j
                  } n t        d  d      |dk(  r"t        j                         d 	fd       }|S t               r$t        j                         d	 	
fd       }|S t        j                         d	 	
fd       }|S )
Nrequest	websocketz2No "request" or "websocket" argument on function ""c                 &  K   |j                  dt        |       k  r|    nd       }t        |t              sJ dt	        |      j
                   d       t        |      s|j                          d {    y  | i | d {    y 7 7 w)Nr   zKParameter with name 'websocket' is required to be of type 'WebSocket' not '')getlen
isinstancer   type__name__r   close)argskwargsr   funcidxscopes_lists      r   websocket_wrapperz6requires.<locals>.decorator.<locals>.websocket_wrapper-   s     "JJ{s4yDIVZ[	!)Y7 !)_556a97
 *)[A#//+++//// ,/s$   A3B6B7BBBBc                   K   |j                  dt        |       k  r|    nd       }t        |t              sJ dt	        |      j
                   d       t        |      sQCt        dt        |j                        i      }|j                         d| }t        |d      S t        	       | i | d {   S 7 w	Nr   zGParameter with name 'request' is required to be of type 'Request' not 'r   next?i/  )urlstatus_code)r0   r   r    r!   r   r"   r#   r   r   strr/   url_forr   r
   
r%   r&   r   orig_request_qparamnext_urlr'   r(   redirectr)   r0   s
        r   async_wrapperz2requires.<locals>.decorator.<locals>.async_wrapper>   s      **YS3t9_S	RVW!'73 ]^bcj^k^t^t]uuvw3 *';?+.7W[[AQ8R.S+&-ooh&?%@BUAV#W/H#NN'K@@!4262222s   B<C?C Cc                 t   |j                  dt        |       k  r|    nd       }t        |t              sJ dt	        |      j
                   d       t        |      sQCt        dt        |j                        i      }|j                         d| }t        |d      S t        	       | i |S r,   r1   r4   s
        r   sync_wrapperz1requires.<locals>.decorator.<locals>.sync_wrapperQ   s     **YS3t9_S	RVW!'73 ]^bcj^k^t^t]uuvw3 *';?+.7W[[AQ8R.S+&-ooh&?%@BUAV#W/H#NN'K@@T,V,,r   )r%   _P.argsr&   	_P.kwargsreturnNone)r%   r;   r&   r<   r=   r   )
inspect	signature	enumerate
parametersvaluesname	Exception	functoolswrapsr	   )r'   sig	parametertype_r*   r8   r:   r(   r7   r)   r0   s   `      @r   	decoratorzrequires.<locals>.decorator    s     %'(=(=(?@ 	ZNC~~*inn.K!	Z
 PQUPVVWXYYK__T"
0 #
0 %$t$__T"3 3 #3 !  __T"- - #-  r   )r'   Callable[_P, Any]r=   rL   )r!   r2   list)r   r0   r7   rK   r)   s    `` @r   requiresrN      s<    
 )56(4<K@ @ 	@ D r   c                      e Zd Zy)AuthenticationErrorN)r#   
__module____qualname__ r   r   rP   rP   e   s    r   rP   c                      e Zd ZddZy)AuthenticationBackendc                   K   t               wNNotImplementedError)selfr   s     r   authenticatez"AuthenticationBackend.authenticatej   s     !##s   N)r   r   r=   z'tuple[AuthCredentials, BaseUser] | None)r#   rQ   rR   r[   rS   r   r   rU   rU   i   s    $r   rU   c                      e Zd ZdddZy)AuthCredentialsNc                8    |g | _        y t        |      | _        y rW   )rM   r   )rZ   r   s     r   __init__zAuthCredentials.__init__o   s    "NbVr   rW   )r   zSequence[str] | None)r#   rQ   rR   r_   rS   r   r   r]   r]   n   s    =r   r]   c                  B    e Zd Zedd       Zedd       Zedd       Zy)BaseUserc                    t               rW   rX   rZ   s    r   is_authenticatedzBaseUser.is_authenticatedt       !##r   c                    t               rW   rX   rc   s    r   display_namezBaseUser.display_namex   re   r   c                    t               rW   rX   rc   s    r   identityzBaseUser.identity|   re   r   Nr=   boolr=   r2   )r#   rQ   rR   propertyrd   rg   ri   rS   r   r   ra   ra   s   s<    $ $ $ $ $ $r   ra   c                  8    e Zd ZddZedd       Zedd       Zy)
SimpleUserc                    || _         y rW   username)rZ   rr   s     r   r_   zSimpleUser.__init__   s	     r   c                     y)NTrS   rc   s    r   rd   zSimpleUser.is_authenticated   s    r   c                    | j                   S rW   rq   rc   s    r   rg   zSimpleUser.display_name   s    }}r   N)rr   r2   r=   r>   rj   rl   )r#   rQ   rR   r_   rm   rd   rg   rS   r   r   ro   ro      s/    !    r   ro   c                  0    e Zd Zedd       Zedd       Zy)UnauthenticatedUserc                     y)NFrS   rc   s    r   rd   z$UnauthenticatedUser.is_authenticated   s    r   c                     y)N rS   rc   s    r   rg   z UnauthenticatedUser.display_name   s    r   Nrj   rl   )r#   rQ   rR   rm   rd   rg   rS   r   r   rv   rv      s(       r   rv   )r   r   r   zSequence[str]r=   rk   )i  N)r   zstr | Sequence[str]r0   intr7   z
str | Noner=   z0Callable[[Callable[_P, Any]], Callable[_P, Any]])!
__future__r   rF   r?   collections.abcr   r   typingr   r   urllib.parser   starlette._utilsr	   starlette.exceptionsr
   starlette.requestsr   r   starlette.responsesr   starlette.websocketsr   r   r   rN   rE   rP   rU   r]   ra   ro   rv   rS   r   r   <module>r      s    "   . ! " . . 6 0 *t_ III I 6	IX	) 	$ $
= =
$ $
 
( r   