
    Ch%                     f   S SK r S SKJr  S SKJrJr  S SKJrJrJ	r	J
r
Jr  S SKJrJr  S SKJr  S SKJrJr  S SKJr  S S	KJr  S S
KJrJrJrJrJr  S SKJrJ r   \ RB                  " \"5      r# " S S\5      r$ " S S\5      r%S\&SS\-  \-  S\&S-  4S jr' " S S\
\   5      r(\ " S S5      5       r)g)    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                       \ rS rSr% \" SSS9r\\S'   \" SSS9r\	S-  \S'   \" SS	S9r
\S
   \S'   \" SSS9r\\S'   \" SSS9r\S   \S'   \" SSS9r\S-  \S'   \" SSS9r\S-  \S'   \" SSS9r\S-  \S'   Srg)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____firstlineno__r   r   str__annotations__r   r   r    r   r!   r#   r$   r%   r&   __static_attributes__r'       \/home/james-whalen/.local/lib/python3.13/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                   X    \ rS rSr% \\S'   \S-  \S'   Sr\S-  \S'   Sr	\S-  \S'   Sr
g)AuthorizationErrorResponse,   errorNerror_description	error_urir$   r'   )r(   r)   r*   r+   r   r-   r,   r6   r   r$   r.   r'   r/   r0   r2   r2   ,   s.    !!Tz!#Iv}#E3:r/   r2   keyparamsreturnc                 \    Uc  g UR                  U 5      n[        U[        5      (       a  U$ g )N)get
isinstancer,   )r7   r8   values      r0   best_effort_extract_stringr>   4   s,    ~JJsOE%r/   c                        \ rS rSr% \\S'   Srg)AnyUrlModel=   rootr'   N)r(   r)   r*   r+   r   r-   r.   r'   r/   r0   r@   r@   =   s    
Lr/   r@   c                   >    \ rS rSr% \\\\4   \S'   S\S\4S jr	Sr
g)AuthorizationHandlerA   providerrequestr9   c           	        ^ ^	^
^^#    S mS mS m	S m
 SS[         S[        S -  S[        4U	U
UU U4S jjjn UR                  S:X  a  UR                  m
OUR                  5       I S h  vN m
[        ST
5      m [        R                  T
5      nUR                  mT R                  R                  UR                  5      I S h  vN m	T	(       d  U" SSUR                   S3SS9I S h  vN $  T	R!                  UR"                  5      m T	R)                  UR*                  5      n[/        TUUR0                  TUR"                  S LUR2                  S9n [5        T R                  R7                  T	U5      I S h  vN SSS0S9$  GN! [         aV  nSnUR                  5        H  nUS   S	:X  d  M  US
   S:X  d  M  Sn  O   U" U[        U5      5      I S h  vN  s S nA$ S nAff = f GN& GN! [$         a$  nU" SUR&                  S9I S h  vN  s S nA$ S nAff = f! [,         a$  nU" SUR&                  S9I S h  vN  s S nA$ S nAff = f N! [8         a.  nU" UR:                  UR<                  S9I S h  vN  s S nA$ S nAff = f! [>         a.  n[@        RC                  SUS9  U" SSS9I S h  vN  s S nA$ S nAff = f7f)Nr4   r5   attempt_load_clientc           
      &  >#    Tc?  U(       a8  [        ST5      nU(       a#  T	R                  R                  U5      I S h  vN OS mTcN  T(       aG   Tb	  ST;  a  S nO)[        R	                  [        ST5      5      R
                  nTR                  U5      mT
c  [        ST5      m
[        U UT
S9nT(       a4  T(       a-  [        [        [        T5      40 UR                  SS9D6SSS	0S
9$ [        SUSS	0S9$  N! [        [        4 a     Nvf = f7f)Nr   r   r$   )r4   r5   r$   T)exclude_none.  Cache-Controlno-storeurlstatus_codeheadersi  )rQ   contentrR   )r>   rF   
get_clientr@   model_validaterB   validate_redirect_urir
   r   r2   r   r   r,   
model_dumpr   )r4   r5   rI   r   raw_redirect_uri
error_respclientr8   r   selfr$   s         r0   error_response3AuthorizationHandler.handle.<locals>.error_responseN   s5    * ~"56{FK	FOt}}77	BBBUY#)nF.J+/(+6+E+E6~vN,$ ) $*#?#?@P#QL }27FC3"3J '.s</@mJDYDYgkDYDlm #,j9  , #&,j9 E C ()@A  s6   <DC9 DAC; A#D;DDDDGETr$   invalid_requestloc)r    typeliteral_errorunsupported_response_typezClient ID 'z' not foundF)r4   r5   rI   )r4   r5   invalid_scope)r$   scopesr!   r    redirect_uri_provided_explicitlyr&   rL   rM   rN   rO   z)Unexpected error in authorization_handler)exc_infoserver_errorzAn unexpected error occurred)T)"r   r,   boolmethodquery_paramsformr>   r   rU   r$   r
   errorsr   rF   rT   r   rV   r   r   messagevalidate_scoper%   r   r   r!   r&   r   	authorizer   r4   r5   	Exceptionlogger	exception)r[   rG   r\   auth_requestvalidation_errorr4   ere   auth_paramsrZ   r8   r   r$   s   `        @@@@r0   handle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2Ax#55!F):V ; 3 ,E3KL\3]^^^^_
 + ++&6&>&>    % +)&6&>&>   ( " b+!''QM`M`aaaab  	pHScd'nPnoooo	ps  -K0J %F &J 7!F (J  G&$J %G)&J )K+G, H ".J $I 5I6	I ?K J 
G#G-G8GGGG#J KG##J )J ,
H6H
HHHJ KHJ 
I'I;H><I IJ KIJ I 
JJ8I;9J=J>J KJJ 
KJ>3J64J>8K9K>KKr'   N)r(   r)   r*   r+   r   r   r-   r   r   rx   r.   r'   r/   r0   rD   rD   A   s,    .sC}==[pG [p [pr/   rD   )*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(   rr   r   r2   r,   r>   r@   rD   r'   r/   r0   <module>r      s     !  I I : & : ; >  G			8	$9 ( C ;1N SVY]S] )F#  ^p ^p ^pr/   