
    ^h                     B    S r SSKJr  SSKJrJr  SSKJr  S\S\4S jrg)	a  
Example Custom SSO Handler

Use this if you want to run custom code after litellm has retrieved information from your IDP (Identity Provider).

Flow:
- User lands on Admin UI
- LiteLLM redirects user to your SSO provider
- Your SSO provider redirects user back to LiteLLM
- LiteLLM has retrieved user information from your IDP
- Your custom SSO handler is called and returns an object of type SSOUserDefinedValues
- User signed in to UI
    )OpenID)LitellmUserRolesSSOUserDefinedValues)	user_infouserIDPInforeturnc           	      l  #     [        S5        [        SU  35        U R                  c  [        SU  35      e[        U R                  S9I S h  vN n[        SU5        [	        / U R                  U R
                  [        R                  R                  SSS9$  NJ! [         a    [        S	5      ef = f7f)
Nzinside custom sso handlerzuserIDPInfo: z-No ID found for user. userIDPInfo.id is None )user_idz_user_info from litellm DB 
   1d)modelsr
   
user_email	user_role
max_budgetbudget_durationzFailed custom auth)
printid
ValueErrorr   r   emailr   INTERNAL_USERvalue	Exception)r   
_user_infos     R/home/james-whalen/.local/lib/python3.13/site-packages/litellm/proxy/custom_sso.pycustom_sso_handlerr      s     .)*k]+,>>!?}M 
 %[^^<<
+Z8#NN"((&44:: 
 	
 =  .,--.s0   B4A
B BA	B B4B B11B4N)	__doc__fastapi_sso.sso.baser   litellm.proxy._typesr   r   :litellm.proxy.management_endpoints.internal_user_endpointsr   r        r   <module>r"      s)    ( G P.& .5I .r!   