
    [ix.                       U d dl mZ d dlZd dlmZmZmZ d dlZd dl	m
Z
mZmZmZmZmZmZmZmZ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m Z   ee!      Z"d
e#d<    e
       Z$ddZ% G d dejL                  jN                        Z( G d de(ejL                  jN                        Z) G d de(ejL                  jN                        Z* G d de(ejL                  jN                        Z+y)    )annotationsN)AnyFinalcast)	AuthCachebuild_logout_urlclear_cookie_and_chunksdecode_provider_token!generate_default_provider_sectionget_cookie_with_chunksget_origin_from_redirect_uriget_redirect_uriget_secrets_auth_sectionget_validated_redirect_uriset_cookie_with_chunks)StreamlitAuthError)
get_logger)make_url_path)TornadoOAuthTornadoOAuth2App)AUTH_COOKIE_NAMETOKENS_COOKIE_NAMEr   _LOGGERc                f   t               }|r t        |      xs d}|j                         }ni }d}|j                  | i       }|s| dk(  rt	        |      }||d<   |j                  di       }d|vrd|d<   d|vrd|d<   t        |t              }|j                  |        |j                  |       |fS )	zRCreate an OAuth client for the given provider based on secrets.toml configuration./defaultclient_kwargsscopezopenid email profilepromptselect_account)cache)	r   r   to_dict
setdefaultr   r   
auth_cacheregistercreate_client)providerauth_sectionredirect_uriconfigprovider_sectionprovider_client_kwargsoauths          z/var/www/html/userprofiledev.eatanceapp.com/venv/lib/python3.12/site-packages/streamlit/web/server/oauth_authlib_routes.pycreate_oauth_clientr/   -   s    +-L'5<%%'((26I 5<\J,y-88"M,,*@w'--+;x(z2E	NN8x(,66    c                  T    e Zd ZdZd
dZddZ	 	 	 	 	 	 ddZddZddZddZ	ddZ
y	)AuthHandlerMixinzNMixin for handling auth cookies. Added for compatibility with Tornado < 6.3.0.c                    || _         y N)base_url)selfr5   s     r.   
initializezAuthHandlerMixin.initializeK   s	     r0   c                N    | j                  t        | j                  d             y )Nr   )redirectr   r5   r6   s    r.   redirect_to_basez!AuthHandlerMixin.redirect_to_baseN   s    mDMM378r0   c                    t        | j                  | j                  t        |       t        | j                  | j                  t        |       y r4   )r   _set_single_cookie_create_signed_valuer   r   )r6   	user_infotokenss      r.   set_auth_cookiez AuthHandlerMixin.set_auth_cookieQ   sF     	##%%		
 	##%%		
r0   c                t    	 | j                  ||d       y# t        $ r | j                  ||d       Y yw xY w)zSet a single cookie.T)httpOnly)httponlyN)set_signed_cookieAttributeErrorset_secure_cookier6   cookie_namevalues      r.   r=   z#AuthHandlerMixin._set_single_cookiea   sR    	 "" # 
  	"" # 	s    77c                ~    	 | j                  ||      S # t        $ r t        d| j                  ||            cY S w xY w)zCreate a signed cookie value.bytes)create_signed_valuerF   r   create_secure_cookie_valuerH   s      r.   r>   z%AuthHandlerMixin._create_signed_values   sF    	V++K?? 	V!@!@e!TUU	Vs    %<<c                    	 t        d| j                  |            S # t        $ r t        d| j                  |            cY S t        $ r Y yw xY w)zGet a signed cookie.rL   N)r   get_signed_cookierF   get_secure_cookie	Exception)r6   rI   s     r.   _get_signed_cookiez#AuthHandlerMixin._get_signed_cookie{   sR    	!7!7!DEE 	F!7!7!DEE 		s    $AAAc                    t        | j                  | j                  t               t        | j                  | j                  t               y)z6Clear auth cookies, including any split cookie chunks.N)r	   rS   clear_cookier   r   r:   s    r.   clear_auth_cookiez"AuthHandlerMixin.clear_auth_cookie   s>    ##	

 	 ##	
r0   N)r5   strreturnNonerX   rY   )r?   dict[str, Any]r@   r[   rX   rY   )rI   rW   rJ   rW   rX   rY   )rI   rW   rJ   rW   rX   rL   )rI   rW   rX   zbytes | None)__name__
__module____qualname____doc__r7   r;   rA   r=   r>   rS   rV    r0   r.   r2   r2   H   sA    X!9
'
1?
	
 $V	
r0   r2   c                      e Zd ZddZddZy)AuthLoginHandlerc                   K   | j                         }|| j                          yt        |      \  }}	 |j                  | |       y# t        $ r&}| j                  dt        |             Y d}~yd}~ww xY ww)z*Redirect to the OAuth provider login page.Ni  )reason)_parse_provider_tokenr;   r/   authorize_redirectrR   
send_errorrW   )r6   r'   clientr)   es        r.   getzAuthLoginHandler.get   ss     --/!!#28<	0%%dL9 	0OOCAO//	0s.   2A:A A:	A7A2-A:2A77A:c                l    | j                  dd       }|y 	 t        |      }|d   S # t        $ r Y y w xY w)Nr'   )get_argumentr
   r   )r6   provider_tokenpayloads      r.   re   z&AuthLoginHandler._parse_provider_token   sM    **:t<!	+N;G z"" " 		s   ' 	33NrZ   rX   z
str | None)r\   r]   r^   rj   re   r`   r0   r.   rb   rb      s    0	#r0   rb   c                      e Zd ZddZddZy)AuthLogoutHandlerc                    | j                          | j                         }|r| j                  |       y | j                          y r4   )rV   _get_provider_logout_urlr9   r;   )r6   provider_logout_urls     r.   rj   zAuthLogoutHandler.get   s9     ";;=MM-.!!#r0   c                   t        | j                  t              }|sy	 t        j                  |      }|j                  d      }|syt        |      \  }}|j                         }|j                  d      }|st        j                  d|       yt               }|t        j                  d       yd}	t        | j                  t              }
|
r'	 t        j                  |
      }|j                  d      }	t        ||j                   ||	      S # t        j                  t        f$ r t        j                  d       Y yw xY w# t"        $ r }t        j%                  d	|       Y d}~yd}~ww xY w)
z7Get the OAuth provider's logout URL from OIDC metadata.Nr'   end_session_endpointz-No end_session_endpoint found for provider %sz$Redirect url could not be determinedid_tokenz#Error, invalid tokens cookie value.)rv   	client_idpost_logout_redirect_urirw   z%Failed to get provider logout URL: %s)r   rS   r   jsonloadsrj   r/   load_server_metadatar   infor   r   JSONDecodeError	TypeError	exceptionr   rx   rR   warning)r6   cookie_valuer?   r'   rh   _metadatarv   r)   rw   tokens_cookie_valuer@   ri   s                r.   rs   z*AuthLogoutHandler._get_provider_logout_url   sZ   -d.E.EGWX-	

<0I }}Z0H+H5IFA224H#+<<0F#G 'LhW
 67L#CD $(H"8'');# # !ZZ(;<F%zz*5H
 $%9 **)5!	 	 ,,i8  %%&KL   	OOCQG	sN   (E AE !E 2E &D 7E .E>E  EE 	E-E((E-NrZ   ro   )r\   r]   r^   rj   rs   r`   r0   r.   rq   rq      s    $4r0   rq   c                  $    e Zd ZddZddZddZy)AuthCallbackHandlerc                .  K   | j                         }|| j                          y | j                         }|&t        j	                  d       | j                          y | j                  dd       }|r| j                  dd       }|j                  dd      j                  dd      }|r"|j                  dd      j                  dd      nd }t        j	                  d||       | j                          y t        |      \  }}|j                  |       }	t        d|	j                  d	            }
t        |
|d
|      }dD ci c]  }||	v s||	|    }}|
r| j                  ||       nt        j	                  d       | j                          y c c}w w)Nz:Error, misconfigured origin for `redirect_uri` in secrets.errorerror_description
 z6Error during authentication: %s. Error description: %sr[   userinfoT)originis_logged_inr'   )rw   access_tokenzError, missing user info.)_get_provider_by_stater;   _get_origin_from_secretsr   r   rl   replacer/   authorize_access_tokenr   rj   dictrA   )r6   r'   r   r   r   sanitized_errorsanitized_error_descriptionrh   r   tokenuserr   kr@   s                 r.   rj   zAuthCallbackHandler.get   s    ..0 !!#..0>MML !!#!!'40 $ 1 12Et L#mmD"5==dBGO % "))$3;;D"E (
 MMH+
 !!#'1	--d3$eii
&;<DdXV'CR'C!qEz!U1X+'CR  v6 MM56 Ss   D?F	FFAFc                   | j                  dd       }|y t        t        j                         j	                               }i }|D ]  }	 |j                  d      \  }}}}|||<     |j                  |      }|S # t        $ r Y ?w xY w)Nstater   )rl   listr$   get_dictkeyssplit
ValueErrorrj   )	r6   state_code_from_urlcurrent_cache_keysstate_provider_mappingkeyr   recorded_providercoder'   s	            r.   r   z*AuthCallbackHandler._get_provider_by_state  s    "//>&!*"5"5"7"<"<">?!#%C03		#-1' ,="4( &   699:MN  s   	A99	BBc                    t               S r4   )r   r:   s    r.   r   z,AuthCallbackHandler._get_origin_from_secrets9  s    +--r0   NrZ   ro   )r\   r]   r^   rj   r   r   r`   r0   r.   r   r      s    - ^4.r0   r   )r'   rW   rX   ztuple[TornadoOAuth2App, str]),
__future__r   rz   typingr   r   r   tornado.webtornadostreamlit.auth_utilr   r   r	   r
   r   r   r   r   r   r   r   streamlit.errorsr   streamlit.loggerr   streamlit.url_utilr   streamlit.web.server.oidc_mixinr   r    streamlit.web.server.server_utilr   r   r\   r   __annotations__r$   r/   webRequestHandlerr2   rb   rq   r   r`   r0   r.   <module>r      s    #  # #     0 ' , J QH% %[
76I
w{{11 I
X#')C)C #4>('++*D*D >BK.*GKK,F,F K.r0   