
    PqhR?                         d dl Z d dlZd dlZd dlZddlmZ ddlmZmZ ddl	m
Z
  ej                  e      ZdZd Zd Z G d	 d
e      Z G d de      Zy)    N   )canonicalize)decode_partdecode_id_token)Clientbrokerc                      t        |fi | |k(  S N)dict)smallbigs     Q/srv/www/ollama/chat-ollama/venv/lib/python3.12/site-packages/msal/token_cache.pyis_subdict_ofr      s    u$$    c                 D    | j                  d| j                  d            S )Npreferred_usernameupn)get)id_token_claimss    r   _get_usernamer      s&    E"$ $r   c                       e Zd ZdZ G d d      Z G d d      Zd ZddZdd	Zd
 Z	ddZ
ddZd Zd Zd Zd Zd Zy)
TokenCachea  This is considered as a base class containing minimal cache behavior.

    Although it maintains tokens using unified schema across all MSAL libraries,
    this class does not serialize/persist them.
    See subclass :class:`SerializableTokenCache` for details on serialization.
    c                        e Zd ZdZdZdZdZdZy)TokenCache.CredentialTypeAccessTokenRefreshTokenAccountIdTokenAppMetadataN)__name__
__module____qualname__ACCESS_TOKENREFRESH_TOKENACCOUNTID_TOKENAPP_METADATA r   r   CredentialTyper      s    $&$r   r)   c                       e Zd ZdZdZy)TokenCache.AuthorityTypeADFSMSSTSN)r    r!   r"   r,   r-   r(   r   r   AuthorityTyper+   %   s    r   r.   c                 \    t        j                          _        i  _         j                  j
                  	 	 d fd	 j                  j                  	 	 d fd	 j                  j                  	 	 d fd	 j                  j                  dd j                  j                  d	di _
        y )
Nc           	          dj                  | xs d|xs dj                  j                  |xs dd|xs dg      j                         S N- )joinr)   r$   lower)home_account_idenvironment	client_idtarget!ignored_payload_from_a_real_tokenselfs        r   <lambda>z%TokenCache.__init__.<locals>.<lambda>.   sR    HH'-2#)r++99!R"  !57 r   c           	          dj                  | xs d|xs dj                  j                  |xs d|xs d|xs dg      j                         S r1   )r4   r)   r#   r5   )r6   r7   r8   realmr9   r:   r;   s         r   r<   z%TokenCache.__init__.<locals>.<lambda>9   sV    HH'-2#)r++88!R"  !57 r   c                     dj                  | xs d|xs dj                  j                  |xs d|xs ddg      j                         S r1   )r4   r)   r&   r5   )r6   r7   r8   r>   r:   r;   s        r   r<   z%TokenCache.__init__.<locals>.<lambda>D   sR    HH'-2#)r++44!R  !57 r   c                 ^    dj                  | xs d|xs d|xs dg      j                         S r1   )r4   r5   )r6   r7   r>   !ignored_payload_from_a_real_entrys       r   r<   z%TokenCache.__init__.<locals>.<lambda>O   s8    HH'-2#)r  !57 r   c                 6    dj                  | xs d|xs d      S )Nzappmetadata-{}-{}r3   )format)r7   r8   kwargss      r   r<   z%TokenCache.__init__.<locals>.<lambda>W   s     '..{/@b)/rR r   )NNNN)NNNNN)NNNNN)	threadingRLock_lock_cacher)   r$   r#   r&   r%   r'   
key_makersr;   s   `r   __init__zTokenCache.__init__)   s    __&
--IM#	# ,,IM+/	# ((IM"	# ''# ,,SW-r   Nc                    |xs g }t        |t              sJ d       t        |      }| j                  5  | j                  j                  |i       j                         D cg c]D  }t        |xs i |      r2|r-|t        |j                  dd      j                               k  rn	 |F c}cd d d        S c c}w # 1 sw Y   y xY w)NzInvalid parameter typer9   r3   )	
isinstancelistsetrH   rI   r   valuesr   split)r;   credential_typer9   query
target_setentrys         r   findzTokenCache.find[   s    2&$'A)AA'[
ZZ 		
 "[[___bAHHJ "e4	  3uyy2'>'D'D'F#GG	  			 					 		s   -B<"A	B7+B<7B<<Cc           
         d }t        | ||j                  di       d       ||j                  di       d            }t        j                  dt	        j
                  |dd	t        
             | j                  ||      S )z:Handle a token obtaining event, and add tokens into cache.c                 b    | j                         D ci c]  \  }}|||v rdn| c}}S c c}}w )Nz********)items)
dictionarysensitive_fieldskvs       r   make_clean_copyz'TokenCache.add.<locals>.make_clean_copyl   s@     ',,.Aq &6!6:A=  s   +data)passwordclient_secretrefresh_token	assertionresponse)r   access_tokenrc   id_tokenusername)r`   re   zevent=%s   T)indent	sort_keysdefault)now)r   r   loggerdebugjsondumpsstr_TokenCache__add)r;   eventrm   r_   clean_events        r   addzTokenCache.addj   s    	
  62!6 9  %UYYz2%> A 	
 	Z "
 	 zz%Sz))r   c                     d|v r=t        j                  t        |d               }d|v rd|v r| dj                  di |fS |r|d   }d|i|fS i dfS )z&Return client_info and home_account_idclient_infouidutidz{uid}.{utid}subNr(   )rp   loadsr   rC   )r;   re   r   rx   r{   s        r   __parse_accountzTokenCache.__parse_account   sr    H$**[-1H%IJK#+(="$9N$9$9$HK$HHH!%(C3<$$4xr   c                    d x}}d|v rt        |d         \  }}}d|v r|d   }|j                  di       }|j                  di       }|j                  d      }|j                  d      }	|j                  d      }
|j                  d      xs |
rt        |
|d	   
      ni }| j                  ||      \  }}dj	                  |j                  d      xs g       }| j
                  5  t        |t        j                         n|      }|r.|j                  d      rt        |j                  d            |z
  nd}t        |j                  d|            }t        |j                  d|            }| j                  j                  ||||j                  d	      |||j                  dd      t        |      t        ||z         t        ||z         d}|j                  d      r|j                  d      |d<   d|v r|d   }t        ||z         |d<   | j                  | j                  j                  ||       |r|j                  d      s||||j                  d|j                  d|j                  d                  t        |      xs( |j                  d      xs |j                  d      xs d|j                  d|dk(  r| j                  j                  n| j                  j                        d}t         d d!t"        j$                  d"   f}|j                  d#      |v r|d#   |d$<   | j                  | j                  j&                  ||       |
rS| j                  j(                  |
||||j                  d	      d%}| j                  | j                  j(                  ||       |	ri| j                  j*                  |	|||j                  d	      |t        |      d&}d'|v r|d'   |d(<   | j                  | j                  j*                  ||       |j                  d	      |d)}d'|v r|j                  d'      |d(<   | j                  | j                  j,                  ||       d d d        y # 1 sw Y   y xY w)*Ntoken_endpointr7   re   r`   rf   rc   rg   r   r8   )r8    scope
expires_oniX  
expires_inext_expires_in
token_typeBearer)rS   secretr6   r7   r8   r9   r>   r   	cached_atr   extended_expires_onkey_id
refresh_in
refresh_onskip_account_creation_account_idoidr{   rh   r3   authority_typeadfs)r6   r7   r>   local_account_idrh   r   authorization_codera   
GRANT_TYPE
grant_typeaccount_source)rS   r   r6   r7   r>   r8   )rS   r   r6   r7   r8   r9   last_modification_timefoci	family_id)r8   r7   )r   r   r   _TokenCache__parse_accountr4   rH   inttimer)   r#   rr   modifyr   r.   r,   r-   _GRANT_TYPE_BROKERr   DEVICE_FLOWr%   r&   r$   r'   )r;   rt   rm   r7   r>   _re   r`   rf   rc   rg   r   rx   r6   r9   default_expires_inr   r   atr   account%grant_types_that_establish_an_accountidtrtapp_metadatas                            r   __addzTokenCache.__add   sn    #"eu$$07G1H$I!A{EE!.K99Z,yy$||N3 _5<<
+",,'89 YGOOHk0BCUW 	 (,';';Ho'V$_%))G,23ZZ Y	VS[diikc:C "l3 \23c99< # !LL/ABD
!$<< *-"/ (,':':'G'G*'6#.!&;!7$""*,,|X"F!$S"%cJ&6"7+.s^/C+D 88H%#'88H#5BxL8+!),!7J'*3+;'<B|$D//<<b"E599-D#E'6#."(-		%'++E?3F3Fu3MN)P !.o > !88J/! 99Z0! &+ii(38F?**//!%!3!3!9!9';& '(<j&&|4965 99\*.SS05l0CG,-D//77'J'+':':'C'C&'6#."!&;!7 D//88#sC'+':':'H'H+'6#.!&;!7$.1#h X%&.v&6B{OD//==r2F #YY{3*L !,4LL,@[)KK++88,UsY	V Y	V Y	Vs   'NQ22Q;c                 $    | j                   |   di |}| j                  5  |r,| j                  j                  |i       }t	        |fi |||<   n,| j                  j                  |i       j                  |d        d d d        y # 1 sw Y   y xY w)Nr(   )rJ   rH   rI   
setdefaultr   pop)r;   rS   	old_entrynew_key_value_pairskeyentriess         r   r   zTokenCache.modify   s     /dooo.;;ZZ 	K"++00"E# +) + &&;??TJ	K 	K 	Ks   ABBc                     |j                  d      | j                  j                  k(  sJ | j                  | j                  j                  |      S NrS   )r   r)   r$   r   )r;   rt_items     r   	remove_rtzTokenCache.remove_rt  sC    {{,-1D1D1R1RRRR{{4..<<gFFr   c                     |j                  d      | j                  j                  k(  sJ | j                  | j                  j                  ||t	        t        t        j                                     d      S )NrS   )r   r   )r   r)   r$   r   rr   r   r   )r;   r   new_rts      r   	update_rtzTokenCache.update_rt  sc    {{,-1D1D1R1RRRR{{4..<<g&)#diik*:&;H  	r   c                     |j                  d      | j                  j                  k(  sJ | j                  | j                  j                  |      S r   )r   r)   r#   r   )r;   at_items     r   	remove_atzTokenCache.remove_at  sC    {{,-1D1D1Q1QQQQ{{4..;;WEEr   c                     |j                  d      | j                  j                  k(  sJ | j                  | j                  j                  |      S r   )r   r)   r&   r   )r;   idt_items     r   
remove_idtzTokenCache.remove_idt!  sC    ||-.$2E2E2N2NNNN{{4..77BBr   c                 Z    d|v sJ | j                  | j                  j                  |      S )Nr   )r   r)   r%   )r;   account_items     r   remove_accountzTokenCache.remove_account%  s-    <///{{4..66EEr   rE   r
   )r    r!   r"   __doc__r)   r.   rL   rW   rv   r   rs   r   r   r   r   r   r   r(   r   r   r   r      s[    % % 0d*4mV^K$GFCFr   r   c                   >     e Zd ZdZdZ fdZd fd	Zd Zd Z xZ	S )SerializableTokenCachea  This serialization can be a starting point to implement your own persistence.

    This class does NOT actually persist the cache on disk/db/etc..
    Depending on your need,
    the following simple recipe for file-based persistence may be sufficient::

        import os, atexit, msal
        cache = msal.SerializableTokenCache()
        if os.path.exists("my_cache.bin"):
            cache.deserialize(open("my_cache.bin", "r").read())
        atexit.register(lambda:
            open("my_cache.bin", "w").write(cache.serialize())
            # Hint: The following optional line persists only when state changed
            if cache.has_state_changed else None
            )
        app = msal.ClientApplication(..., token_cache=cache)
        ...

    :var bool has_state_changed:
        Indicates whether the cache state in the memory has changed since last
        :func:`~serialize` or :func:`~deserialize` call.
    Fc                 <    t        t        | 
  |fi | d| _        y NT)superr   rv   has_state_changed)r;   rt   rD   	__class__s      r   rv   zSerializableTokenCache.addC  s     $d/@@!%r   c                 >    t         t        |   |||       d| _        y r   )r   r   r   r   )r;   rS   r   r   r   s       r   r   zSerializableTokenCache.modifyG  s#    $d2Y(;	=!%r   c                     | j                   5  |rt        j                  |      ni | _        d| _        ddd       y# 1 sw Y   yxY w)zEDeserialize the cache from a state previously obtained by serialize()FN)rH   rp   r|   rI   r   )r;   states     r   deserializez"SerializableTokenCache.deserializeL  s<     ZZ 	+/4$**U+"DK%*D"	+ 	+ 	+s	   &<Ac                     | j                   5  d| _        t        j                  | j                  d      cddd       S # 1 sw Y   yxY w)z0Serialize the current cache state into a string.Fri   )rj   N)rH   r   rp   rq   rI   rK   s    r   	serializez SerializableTokenCache.serializeS  s:     ZZ 	5%*D"::dkk!4	5 	5 	5s	   (?Ar
   )
r    r!   r"   r   r   rv   r   r   r   __classcell__)r   s   @r   r   r   *  s$    , &&
+5r   r   )rp   rF   r   logging	authorityr   oauth2cli.oidcr   r   oauth2cli.oauth2r   	getLoggerr    rn   r   r   r   objectr   r   r(   r   r   <module>r      s[        # 8 $ 
		8	$ %$
QF QFh.5Z .5r   