
    /Jf*                     H   d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZmZ d dl	Z
d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZmZmZ  ej        e          Zd
 Zd Zd Z d Z! G d de          Z" G d d          Z# G d d          Z$ G d d          Z%dS )    N)datetime	timedelta)
NamedTupleOptional)tzutc)UNSIGNED)total_seconds)Config)ClientErrorInvalidConfigErrorTokenRetrievalError)CachedPropertyJSONFileCacheSSOTokenLoaderc                  B    t          j        t                                S N)r   nowr        R/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/botocore/tokens.py_utc_nowr   $   s    <   r   c                 B    t          |           g}t          |          S )N)	providers)SSOTokenProviderTokenProviderChain)sessionr   s     r   create_token_resolverr   (   s'    !!I 	2222r   c                 Z    t          | t                    r|                     d          S | S )Nz%Y-%m-%dT%H:%M:%SZ)
isinstancer   strftimeobjs    r   _serialize_utc_timestampr#   /   s,    #x   2||0111Jr   c                 8    t          j        | t                    S )N)default)jsondumpsr#   r!   s    r   _sso_json_dumpsr(   5   s    :c#;<<<<r   c                   4    e Zd ZU eed<   dZee         ed<   dS )FrozenAuthTokentokenN
expiration)__name__
__module____qualname__str__annotations__r,   r   r   r   r   r   r*   r*   9   s0         JJJ%)J")))))r   r*   c                   B    e Zd ZdZdZdZefdZd Zd Z	d Z
d Zd	 Zd
S )DeferredRefreshableToken  iX  <   c                 |    || _         || _        || _        t          j                    | _        d | _        d | _        d S r   )_time_fetcher_refresh_usingmethod	threadingLock_refresh_lock_frozen_token_next_refresh)selfr9   refresh_usingtime_fetchers       r   __init__z!DeferredRefreshableToken.__init__G   sA    )+ '^--!!r   c                 8    |                                   | j        S r   )_refreshr=   r?   s    r   get_frozen_tokenz)DeferredRefreshableToken.get_frozen_tokenQ   s    !!r   c                    |                                  }|sd S |dk    }| j                            |          rN	 |                                  | j                                         d S # | j                                         w xY wd S )N	mandatory)_should_refreshr<   acquire_protected_refreshrelease)r?   refresh_typeblock_for_refreshs      r   rD   z!DeferredRefreshableToken._refreshU   s    ++-- 	4 )K7%%&788 	--'')))"**,,,,,"**,,,,		- 	-s   A) )Bc                    |                                  }|sd S 	 |                                 }|t          | j                  z   | _        |                                 | _        n4# t          $ r' t          	                    d|d           |dk    r Y nw xY w| 
                                rt          | j        d          d S )Nsecondsz5Refreshing token failed during the %s refresh period.Texc_inforH   z$Token has expired and refresh failed)provider	error_msg)rI   r7   r   _attempt_timeoutr>   r8   r=   	Exceptionloggerwarning_is_expiredr   r9   )r?   rM   r   s      r   rK   z+DeferredRefreshableToken._protected_refreshc   s     ++-- 	4	$$&&C!$y9N'O'O'O!OD!%!4!4!6!6D 	 	 	NNG    
 {** +*	  	%@   	 	s   A
A% %.BBc                     | j         dS | j         j        }t          ||                                 z
            }|dk    S )NFr   )r=   r,   r	   r7   )r?   r,   	remainings      r   rZ   z$DeferredRefreshableToken._is_expired   sC    %5'2
!*t/A/A/C/C"CDD	A~r   c                     | j         dS | j         j        }|d S |                                 }|| j        k     rd S t	          ||z
            }|| j        k     rdS || j        k     rdS d S )NrH   advisory)r=   r,   r7   r>   r	   _mandatory_refresh_timeout_advisory_refresh_timeout)r?   r,   r   r\   s       r   rI   z(DeferredRefreshableToken._should_refresh   s    %;'2
4  ""###4!*s"233	t666;777:tr   N)r-   r.   r/   r`   r_   rV   r   rB   rF   rD   rK   rZ   rI   r   r   r   r3   r3   >   s         !(!(;C " " " "" " "- - -  8      r   r3   c                       e Zd ZddZd ZdS )r   Nc                     |g }|| _         d S r   )
_providers)r?   r   s     r   rB   zTokenProviderChain.__init__   s    I#r   c                 N    | j         D ]}|                                }||c S d S r   )rc   
load_token)r?   rT   r+   s      r   re   zTokenProviderChain.load_token   s=     	 	H''))E  !tr   r   )r-   r.   r/   rB   re   r   r   r   r   r      s7        $ $ $ $
    r   r   c                       e Zd ZdZdZej                            ej                            dddd                    Z	ddgZ
dZeZd	ed	fd
Zd Zed             Zed             Zd Zd Zd Zd Zd	S )r   ssor4   ~z.awscachesso_start_url
sso_regionrefresh_tokenNc                     || _         |!|                     | j        t                    }|| _        || _        t          | j                  | _        |p| j                             d          pd| _	        d S )N)
dumps_func)ri   profiler%   )
_sessionDEFAULT_CACHE_CLS_SSO_TOKEN_CACHE_DIRr(   _now_cacher   _token_loaderget_config_variable_profile_name)r?   r   ri   rA   profile_names        r   rB   zSSOTokenProvider.__init__   s      =**)* +  E !	+$+>>> }00;; 	r   c                    | j         j        }|                    di           }|                    di           }|                    | j        i           }d|vrd S |d         }|                    |d           }|sd| j         d| d}t	          |          g }| j        D ]}	|	|vr|                    |	           |rd| j         d| d	}t	          |          ||d
         |d         dS )Nprofilessso_sessionssso_sessionzThe profile "z7" is configured to use the SSO token provider but the "z+" sso_session configuration does not exist.)rU   zZ" is configured to use the SSO token provider but is missing the following configuration: .rk   rj   )session_namerk   rj   )rp   full_configgetrw   r   _SSO_CONFIG_VARSappend)
r?   loaded_configrz   r{   profile_configsso_session_name
sso_configrU   missing_configsvars
             r   _load_sso_configz!SSOTokenProvider._load_sso_config   sd   1 $$Z44$((<<!d&8"==..F)-8!%%&6==
 	:1 2 1 1+;1 1 1 
 %y9999( 	, 	,C*$$&&s+++ 	:& 2 & &"& & & 
 %y9999 -$\2'8
 
 	
r   c                 *    |                                  S r   )r   rE   s    r   _sso_configzSSOTokenProvider._sso_config   s    $$&&&r   c                 |    t          | j        d         t                    }| j                            d|          S )Nrk   )region_namesignature_versionzsso-oidc)config)r
   r   r   rp   create_client)r?   r   s     r   _clientzSSOTokenProvider._client   sA    (6&
 
 
 }**:f*EEEr   c                    | j                             | j        |d         |d         |d                   }t          |d                   }| j        d         | j        d         |d	         |                                 |z   |d         |d         |d
         d}d|v r|d         |d<   t                              d           |S )NclientIdclientSecretrefreshToken)	grantTyper   r   r   	expiresInrP   rj   rk   accessTokenregistrationExpiresAt)startUrlregionr   	expiresAtr   r   r   zSSO Token refresh succeeded)r   create_token_GRANT_TYPEr   r   rs   rX   info)r?   r+   response
expires_in	new_tokens        r   _attempt_create_tokenz&SSOTokenProvider._attempt_create_token   s    <,,&:&~.~.	 - 
 
 x'<===
(9&|4#M2z1j)!.1%*+B%C	
 	
	 X%%(0(@In%1222r   c                    d}fd|D             }|r!d| }t                               |           d S t          j                            d                   }t          ||                                 z
            dk    rt                               d|            d S 	 |                               S # t          $ r  t           	                    dd	           Y d S w xY w)
N)r   r   r   r   c                     g | ]}|v|	S r   r   ).0kr+   s     r   
<listcomp>z:SSOTokenProvider._refresh_access_token.<locals>.<listcomp>  s    :::a1E>>>>>r   z+Unable to refresh SSO token: missing keys: r   r   z"SSO token registration expired at z SSO token refresh attempt failedTrR   )
rX   r   dateutilparserparser	   rs   r   r   rY   )r?   r+   keysmissing_keysmsgexpirys    `    r   _refresh_access_tokenz&SSOTokenProvider._refresh_access_token  s    
 ;:::4::: 	NNNCKK4&&u-D'EFF$))++-..!33KKEVEEFFF4	--e444 	 	 	NN=NMMM44	s   "B7 7&C! C!c                 *   | j         d         }| j         d         }t                              d|            |                     ||          }t          j                            |d                   }t                              d|            t          || 	                                z
            }|| j
        k     r>|                     |          }|'|}|d         }| j                            |||           t          |d         |          S )	Nrj   r~   zLoading cached SSO token for )r~   r   zCached SSO token expires at r   )r,   )r   rX   r   ru   r   r   r   debugr	   rs   _REFRESH_WINDOWr   
save_tokenr*   )r?   	start_urlr~   
token_dictr,   r\   new_token_dicts          r   
_refresherzSSOTokenProvider._refresher.  s   $_5	'7BLBBCCC''	'MM
_**:k+BCC
@J@@AAA!*tyy{{":;;	t+++!77
CCN)+
'4
"--z .    }%*
 
 
 	
r   c                 V    | j         d S t          | j        | j        | j                  S )N)rA   )r   r3   METHODr   rs   rE   s    r   re   zSSOTokenProvider.load_tokenD  s4    #4'Kty
 
 
 	
r   )r-   r.   r/   r   r   ospath
expanduserjoinrr   r   r   r   rq   r   rB   r   r   r   r   r   r   r   re   r   r   r   r   r      s       FO7--
S&%11  	 "K% "t
 
 
 
$%
 %
 %
N ' ' ^' F F ^F  .  0
 
 
,
 
 
 
 
r   r   )&r&   loggingr   r:   r   r   typingr   r   dateutil.parserr   dateutil.tzr   botocorer   botocore.compatr	   botocore.configr
   botocore.exceptionsr   r   r   botocore.utilsr   r   r   	getLoggerr-   rX   r   r   r#   r(   r*   r3   r   r   r   r   r   <module>r      s     				     ( ( ( ( ( ( ( ( ' ' ' ' ' ' ' '                 ) ) ) ) ) ) " " " " " "         
 I H H H H H H H H H		8	$	$! ! !3 3 3  = = =* * * * *j * * *
^ ^ ^ ^ ^ ^ ^ ^B       ]
 ]
 ]
 ]
 ]
 ]
 ]
 ]
 ]
 ]
r   