o
    i-                     @   s  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mZmZ eeZd
d Z dd Z!dd Z"dd Z#G dd deZ$G dd dZ%G dd dZ&G dd dZ'G dd dZ(dS )    N)datetime	timedelta)
NamedTupleOptional)tzutc)UNSIGNED)total_seconds)Config)ClientErrorInvalidConfigErrorTokenRetrievalError)CachedPropertyJSONFileCacheSSOTokenLoadercreate_nested_clientget_token_from_environmentc                   C   s   t t S N)r   nowr    r   r   F/home/app/Keep/.python/lib/python3.10/site-packages/botocore/tokens.py_utc_now*   s   r   c                 C   s   t | t| g}t|dS )N)	providers)ScopedEnvTokenProviderSSOTokenProviderTokenProviderChain)sessionr   r   r   r   create_token_resolver.   s   
r   c                 C   s   t | tr
| dS | S )Nz%Y-%m-%dT%H:%M:%SZ)
isinstancer   strftimeobjr   r   r   _serialize_utc_timestamp6   s   

r!   c                 C   s   t j| tdS )N)default)jsondumpsr!   r   r   r   r   _sso_json_dumps<   s   r%   c                   @   s&   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&   @   s   
 r&   c                   @   sL   e Zd ZdZdZdZefddZdd Zdd	 Z	d
d Z
dd Zdd ZdS )DeferredRefreshableToken  iX  <   c                 C   s,   || _ || _|| _t | _d | _d | _d S r   )_time_fetcher_refresh_usingmethod	threadingLock_refresh_lock_frozen_token_next_refresh)selfr3   Zrefresh_usingtime_fetcherr   r   r   __init__N   s   

z!DeferredRefreshableToken.__init__c                 C   s   |    | jS r   )_refreshr7   r9   r   r   r   get_frozen_tokenX   s   z)DeferredRefreshableToken.get_frozen_tokenc                 C   sN   |   }|sd S |dk}| j|r%z|   W | j  d S | j  w d S )N	mandatory)_should_refreshr6   acquire_protected_refreshrelease)r9   refresh_typeZblock_for_refreshr   r   r   r<   \   s   
z!DeferredRefreshableToken._refreshc                 C   s   |   }|sd S z|  }|t| jd | _|  | _W n ty2   tj	d|dd |dkr0 Y nw | 
 r>t| jddd S )Nsecondsz5Refreshing token failed during the %s refresh period.Texc_infor?   z$Token has expired and refresh failed)provider	error_msg)r@   r1   r   _attempt_timeoutr8   r2   r7   	Exceptionloggerwarning_is_expiredr   r3   )r9   rD   r   r   r   r   rB   j   s.   
z+DeferredRefreshableToken._protected_refreshc                 C   s.   | j d u rdS | j j}t||   }|dkS )NFr   )r7   r(   r   r1   )r9   r(   	remainingr   r   r   rO      s
   
z$DeferredRefreshableToken._is_expiredc                 C   sd   | j d u rdS | j j}|d u rd S |  }|| jk rd S t|| }|| jk r)dS || jk r0dS d S )Nr?   Zadvisory)r7   r(   r1   r8   r   _mandatory_refresh_timeout_advisory_refresh_timeout)r9   r(   r   rP   r   r   r   r@      s   



z(DeferredRefreshableToken._should_refreshN)r)   r*   r+   rR   rQ   rK   r   r;   r>   r<   rB   rO   r@   r   r   r   r   r.   E   s    
r.   c                   @   s   e Zd ZdddZdd ZdS )r   Nc                 C   s   |d u rg }|| _ d S r   )
_providers)r9   r   r   r   r   r;      s   
zTokenProviderChain.__init__c                 K   s0   | j D ]}|jdi |}|d ur|  S qd S )Nr   )rS   
load_token)r9   kwargsrI   r'   r   r   r   rT      s   
zTokenProviderChain.load_tokenr   )r)   r*   r+   r;   rT   r   r   r   r   r      s    
r   c                   @   s   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
dZdd Zedd Zedd Zdd Zdd Zdd Zdd Zd	S )r   Zssor/   ~z.awscachesso_start_url
sso_regionZrefresh_tokenNc                 C   sR   || _ |d u r| j| jtd}|| _|| _t| jd| _|p%| j dp%d| _	d S )N)Z
dumps_func)rW   Zprofiler"   )
_sessionDEFAULT_CACHE_CLS_SSO_TOKEN_CACHE_DIRr%   _now_cacher   _token_loaderZget_config_variable_profile_name)r9   r   rW   r:   Zprofile_namer   r   r   r;      s   
zSSOTokenProvider.__init__c           
      C   s   | j j}|di }|di }|| ji }d|vrd S |d }||d }|s8d| j d| d}t|dg }| jD ]}	|	|vrH||	 q=|rZd| j d| d	}t|d||d
 |d dS )Nprofilessso_sessionsZsso_sessionzThe profile "z7" is configured to use the SSO token provider but the "z+" sso_session configuration does not exist.)rJ   zZ" is configured to use the SSO token provider but is missing the following configuration: .rY   rX   )session_namerY   rX   )rZ   Zfull_configgetr`   r   _SSO_CONFIG_VARSappend)
r9   Zloaded_configra   rb   Zprofile_configZsso_session_nameZ
sso_configrJ   Zmissing_configsvarr   r   r   _load_sso_config   s:   





z!SSOTokenProvider._load_sso_configc                 C   s   |   S r   )ri   r=   r   r   r   _sso_config   s   zSSOTokenProvider._sso_configc                 C   s"   t | jd td}t| jd|dS )NrY   )Zregion_nameZsignature_versionzsso-oidc)config)r	   rj   r   r   rZ   )r9   rk   r   r   r   _client   s
   zSSOTokenProvider._clientc                 C   s   | j j| j|d |d |d d}t|d d}| jd | jd |d	 |  | |d |d |d
 d}d|v r>|d |d< td |S )NclientIdclientSecretrefreshToken)Z	grantTyperm   rn   ro   Z	expiresInrE   rX   rY   accessTokenregistrationExpiresAt)ZstartUrlregionrp   	expiresAtrm   rn   rq   zSSO Token refresh succeeded)rl   Zcreate_token_GRANT_TYPEr   rj   r]   rM   info)r9   r'   responseZ
expires_inZ	new_tokenr   r   r   _attempt_create_token  s&   


z&SSOTokenProvider._attempt_create_tokenc                    s   d} fdd|D }|rd| }t | d S tj d }t||   dkr3t d| d S z|  W S  tyJ   t j	dd	d
 Y d S w )N)ro   rm   rn   rq   c                    s   g | ]}| vr|qS r   r   ).0kr'   r   r   
<listcomp>$  s    z:SSOTokenProvider._refresh_access_token.<locals>.<listcomp>z+Unable to refresh SSO token: missing keys: rq   r   z$SSO token registration expired at %sz SSO token refresh attempt failedTrG   )
rM   ru   dateutilparserparser   r]   rw   r
   rN   )r9   r'   keysZmissing_keysmsgZexpiryr   rz   r   _refresh_access_token  s    

z&SSOTokenProvider._refresh_access_tokenc                 C   s   | j d }| j d }td| | j||d}tj|d }td| t|| 	  }|| j
k rJ| |}|d urJ|}|d }| jj|||d t|d |dS )	NrX   rd   zLoading cached SSO token for %s)rd   rs   zCached SSO token expires at %srp   )r(   )rj   rM   ru   r_   r|   r}   r~   debugr   r]   _REFRESH_WINDOWr   Z
save_tokenr&   )r9   Z	start_urlrd   Z
token_dictr(   rP   Znew_token_dictr   r   r   
_refresher5  s$   



zSSOTokenProvider._refresherc                 K   s"   | j d u rd S t| j| j| jdS )N)r:   )rj   r.   METHODr   r]   )r9   rU   r   r   r   rT   K  s
   
zSSOTokenProvider.load_token)r)   r*   r+   r   r   ospath
expanduserjoinr\   rf   rt   r   r[   r   r;   ri   r   rj   rl   rw   r   r   rT   r   r   r   r   r      s,    
'

r   c                   @   s&   e Zd ZdZdZdddZdd ZdS )	r   zn
    Token provider that loads tokens from environment variables scoped to
    a specific `signing_name`.
    envNc                 C   s   || _ |d u r
tj}|| _d S r   )rZ   r   environ)r9   r   r   r   r   r   r;   \  s   
zScopedEnvTokenProvider.__init__c                 K   s@   | d}|d u rd S t|| j}|d urtd t|S d S )Nsigning_namez%Found token in environment variables.)re   r   r   rM   ru   r&   )r9   rU   r   r'   r   r   r   rT   b  s   

z!ScopedEnvTokenProvider.load_tokenr   )r)   r*   r+   __doc__r   r;   rT   r   r   r   r   r   T  s
    
r   ))r#   loggingr   r4   r   r   typingr   r   Zdateutil.parserr|   Zdateutil.tzr   Zbotocorer   Zbotocore.compatr   Zbotocore.configr	   Zbotocore.exceptionsr
   r   r   Zbotocore.utilsr   r   r   r   r   	getLoggerr)   rM   r   r   r!   r%   r&   r.   r   r   r   r   r   r   r   <module>   s0   
a !