
    {h%                     d   d dl Z d dlmZ d dlmZmZ d dlmZmZm	Z	m
Z
mZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZmZmZmZmZ d dlmZm Z   e jB                  e"      Z# G d de      Z$ G d de      Z%de&ddez  ez  de&dz  fdZ' G d de
e         Z(e G d d             Z)y)    N)	dataclass)AnyLiteral)AnyUrl	BaseModelField	RootModelValidationError)FormDataQueryParams)Request)RedirectResponseResponse)stringify_pydantic_error)PydanticJSONResponse)AuthorizationErrorCodeAuthorizationParamsAuthorizeError OAuthAuthorizationServerProviderconstruct_redirect_uri)InvalidRedirectUriErrorInvalidScopeErrorc                   "   e Zd ZU  edd      Zeed<    edd      Zedz  ed<    edd      Z	e
d	   ed
<    edd      Zeed<    edd      Ze
d   ed<    edd      Zedz  ed<    edd      Zedz  ed<    edd      Zedz  ed<   y)AuthorizationRequest.zThe client ID)description	client_idNz&URL to redirect to after authorizationredirect_uriz*Must be 'code' for authorization code flowcoderesponse_typezPKCE code challengecode_challengeS256z(PKCE code challenge method, must be S256code_challenge_methodzOptional state parameterstatezOOptional scope; if specified, should be a space-separated list of scope stringsscopezIRFC 8707 resource indicator - the MCP server this token will be used withresource)__name__
__module____qualname__r   r   str__annotations__r   r   r   r   r    r"   r#   r$   r%        c/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/mcp/server/auth/handlers/authorize.pyr   r      s    3O<Is<"':b"cL&4-c &+3<h%iM76?i1FGNCG-26Gq-r76?rd0JKE3:KeE3:  !_HcDj r,   r   c                   P    e Zd ZU eed<   edz  ed<   dZedz  ed<   dZedz  ed<   y)AuthorizationErrorResponseerrorNerror_description	error_urir#   )	r&   r'   r(   r   r*   r)   r2   r   r#   r+   r,   r-   r/   r/   ,   s.    !!Tz!#Iv}#E3:r,   r/   keyparamsreturnc                 P    |y |j                  |       }t        |t              r|S y )N)get
isinstancer)   )r3   r4   values      r-   best_effort_extract_stringr:   4   s)    ~JJsOE%r,   c                       e Zd ZU eed<   y)AnyUrlModelrootN)r&   r'   r(   r   r*   r+   r,   r-   r<   r<   =   s    
Lr,   r<   c                   4    e Zd ZU eeeef   ed<   dedefdZy)AuthorizationHandlerproviderrequestr5   c                    	
K   d d d 	d 
	 ddt         dt        d z  dt        f	
 fd}	 |j                  dk(  r|j                  
n|j                          d {   
t        d
      	 t        j                  
      }|j                   j                  j                  |j                         d {   		s! |dd|j                   dd       d {   S 	 	j!                  |j"                        	 	j)                  |j*                        }t/        ||j0                  |j"                  d u|j2                        }	 t5         j                  j7                  	|       d {   dddi      S 7 # t        $ rQ}d}|j                         D ]  }|d   d	k(  s|d
   dk(  sd} n  ||t        |             d {  7  cY d }~S d }~ww xY w7 $7 # t$        $ r'} |d|j&                         d {  7  cY d }~S d }~ww xY w# t,        $ r'} |d|j&                         d {  7  cY d }~S d }~ww xY w7 # t8        $ r1} ||j:                  |j<                         d {  7  cY d }~S d }~ww xY w# t>        $ r4}t@        jC                  d|        |dd       d {  7  cY d }~S d }~ww xY ww)Nr0   r1   attempt_load_clientc           	        K   5|r3t        d      }|xr# 	j                  j                  |       d {   FrD	 dvrd }n)t        j	                  t        d            j
                  }j                  |      
t        d      
t        | |
      }r5r3t        t        t              fi |j                  d      ddd	i
      S t        d|dd	i      S 7 # t        t        f$ r Y vw xY ww)Nr   r   r#   )r0   r1   r#   T)exclude_none.  Cache-Controlno-storeurlstatus_codeheadersi  )rK   contentrL   )r:   r@   
get_clientr<   model_validater=   validate_redirect_urir
   r   r/   r   r   r)   
model_dumpr   )r0   r1   rC   r   raw_redirect_uri
error_respclientr4   r   selfr#   s         r-   error_responsez3AuthorizationHandler.handle.<locals>.error_responseN   s3    * ~"56{FK	"PT]]-E-Ei-P'P#)nF.J+/(+6+E+E6~vN,$ ) $*#?#?@P#QL }27FC3"3J '.s</@mJDYDYgkDYDlm #,j9  , #&,j9 E (Q ()@A  s5   3C=C&C= AC( A$C=(C:7C=9C::C=GETr#   invalid_requestloc)r   typeliteral_errorunsupported_response_typezClient ID 'z' not foundF)r0   r1   rC   )r0   r1   invalid_scope)r#   scopesr    r    redirect_uri_provided_explicitlyr%   rF   rG   rH   rI   z)Unexpected error in authorization_handler)exc_infoserver_errorzAn unexpected error occurred)T)"r   r)   boolmethodquery_paramsformr:   r   rO   r#   r
   errorsr   r@   rN   r   rP   r   r   messagevalidate_scoper$   r   r   r    r%   r   	authorizer   r0   r1   	Exceptionlogger	exception)rU   rA   rV   auth_requestvalidation_errorr0   er^   auth_paramsrT   r4   r   r#   s   `        @@@@r-   handlezAuthorizationHandler.handleE   s     
 )->	)>	"Tz>	 "&>	 >	@R	p~~& --  '||~- /w?E	_3BB6J$**  ==33&& F ++(3L4J4J3K;&W(-  %;;L<U<UV..|/A/AB .+::)1=1J1JRV1V%..Kb'"mm55#  !$,j9 y . # _0A)002 Ax#55!F):V ; ,E3KL\3]^^^^_
 + ++&6&>&>    % +)&6&>&>   ( " b+!''QM`M`aaaab  	pHScd'nPnoooo	ps  *K/J !F "J 3!F (J <G ="J G# J #K%G& H 1J $I 2I3I ?K J 	GG*G3GGGGJ KGJ #J &	H/HH	HHJ KHJ 	I	"I9H<:I>I	?J KI		J I 	J!J8I;9J=J>J KJJ 	K$K8J;9K=K>KKKN)	r&   r'   r(   r   r   r*   r   r   rq   r+   r,   r-   r?   r?   A   s,    .sC}==[pG [p [pr,   r?   )*loggingdataclassesr   typingr   r   pydanticr   r   r   r	   r
   starlette.datastructuresr   r   starlette.requestsr   starlette.responsesr   r   mcp.server.auth.errorsr   mcp.server.auth.json_responser   mcp.server.auth.providerr   r   r   r   r   mcp.shared.authr   r   	getLoggerr&   rk   r   r/   r)   r:   r<   r?   r+   r,   r-   <module>r~      s     !  I I : & : ; >  G			8	$9 ( C ;1N SVY]S] )F#  ^p ^p ^pr,   