
    )`i &                        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 j!        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)dS )    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<   dS )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%        v/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/mcp/server/auth/handlers/authorize.pyr   r      sL        U3O<<<Is<<<"'%:b"c"c"cL&4-ccc &+U3<h%i%i%iM76?iii%1FGGGNCGGG-2U6Gq-r-r-r76?rrrd0JKKKE3:KKKe  E3:    !5_  HcDj     r,   r   c                   R    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<   dS )AuthorizationErrorResponseerrorNerror_description	error_urir#   )	r&   r'   r(   r   r*   r)   r2   r   r#   r+   r,   r-   r/   r/   ,   sV         !!!!Tz!!!#Iv}###E3:r,   r/   keyparamsreturnc                 f    |d S |                     |           }t          |t                    r|S d S )N)get
isinstancer)   )r3   r4   values      r-   best_effort_extract_stringr:   4   s7    ~tJJsOOE% 4r,   c                       e Zd ZU eed<   dS )AnyUrlModelrootN)r&   r'   r(   r   r*   r+   r,   r-   r<   r<   =   s         
LLLLLr,   r<   c                   <    e Zd ZU eeeef         ed<   dedefdZdS )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|                                 d {V 
t          d
          	 t                              
          }|j	        nk# t          $ r^}d}|                                D ]}|d	         d
k    r|d         dk    rd} n ||t          |                     d {V cY d }~S d }~ww xY w j                            |j                   d {V 		s |dd|j         dd           d {V S 	 	                    |j                  n/# t$          $ r"} |d|j                   d {V cY d }~S d }~ww xY w	 	                    |j                  }n/# t,          $ r"} |d|j                   d {V cY d }~S d }~ww xY wt/          ||j        |j        d u|j                  }	 t5           j                            	|           d {V dddi          S # t8          $ r'} ||j        |j                   d {V cY d }~S d }~ww xY w# t>          $ r9}t@          !                    d|            |dd           d {V cY d }~S d }~ww xY w)NTr0   r1   attempt_load_clientc           	      @  K   6|r4t          d          }|r 	j                            |           d {V nd frd	 dvrd }n-t                              t          d                    j        }                    |          n# t          t          f$ r Y nw xY w
t          d          
t          | |
          }rBr@t          t          t                    fi |                    d          ddd	i
          S t          d|dd	i          S )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   s     * ~"5~6{FKK	FOYt}77	BBBBBBBBBUY##)nF.J.J+/((+6+E+E6~vNN, , ) $*#?#?@P#Q#QLL')@A    D }27FCC3"3  J   '.s</@/@mmJDYDYgkDYDlDlmm #,j9    , #&,j9   s   AB B! B!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J$*" _ _ _0A)0022  Ax#555!F):V:V ;+^E3KL\3]3]^^^^^^^^^^^^^^_  =33&       F  +^+&WL4J&W&W&W(-         %;;L<UVV*   +^+&6&>              ..|/ABB$   +^)&6&>               .+:)1=1JRV1V%.  Kb'"m55#        !$,j9    " b b b+^!'QM`aaaaaaaaaaaaaaab  	p 	p 	pHScddd'nPnooooooooooooooo	ps   =I( 3!B I( 
C=AC82C=3I( 8C==AI( E  I(  
F*FFI( FI( F+ *I( +
G5GGI( G)I( 2H4 4
I%>I I%I(  I%%I( (
J+2.J& J+&J+N)	r&   r'   r(   r   r   r*   r   r   rq   r+   r,   r-   r?   r?   A   s_         .sC}====[pG [p [p [p [p [p [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~      sI    ! ! ! ! ! !         I I I I I I I I I I I I I I : : : : : : : : & & & & & & : : : : : : : : ; ; ; ; ; ; > > > > > >              G F F F F F F F		8	$	$    9   (       C ;1N SVY]S]        )F#    ^p ^p ^p ^p ^p ^p ^p ^p ^p ^pr,   