o
    di6                     @   s   d dl Z d dlZd dlmZ d dl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mZmZmZmZ d dlmZ d dlmZ eeZd	d
 ZG dd deZG dd deZdS )    N)	timedelta)UNSIGNED)total_seconds)ClientErrorTokenRetrievalError)DeferredRefreshableTokenFrozenAuthTokenScopedEnvTokenProviderSSOTokenProviderTokenProviderChain_utc_now)	AioConfig)create_nested_clientc                 C   s   t | t| g}t|dS )N)	providers)r	   AioSSOTokenProviderr   )sessionr    r   F/home/ubuntu/.local/lib/python3.10/site-packages/aiobotocore/tokens.pycreate_token_resolver   s   
r   c                   @   s0   e Zd ZefddZdd Zdd Zdd Zd	S )
AioDeferredRefreshableTokenc                 C   s,   || _ || _|| _t | _d | _d | _d S N)_time_fetcher_refresh_usingmethodasyncioLock_refresh_lock_frozen_token_next_refresh)selfr   refresh_usingtime_fetcherr   r   r   __init__!   s   

z$AioDeferredRefreshableToken.__init__c                    s   |   I d H  | jS r   )_refreshr   )r   r   r   r   get_frozen_token+   s   z,AioDeferredRefreshableToken.get_frozen_tokenc              	      sz   |   }|s	d S |dk}|s| j s;| j4 I d H  |  I d H  W d   I d H  d S 1 I d H s4w   Y  d S d S )N	mandatory)_should_refreshr   locked_protected_refresh)r   refresh_typeblock_for_refreshr   r   r   r#   /   s   .z$AioDeferredRefreshableToken._refreshc                    s   |   }|s	d S z|  }|t| jd | _|  I d H | _W n ty6   tj	d|dd |dkr4 Y nw | 
 rBt| 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&   r   r   _attempt_timeoutr   r   r   	Exceptionloggerwarning_is_expiredr   r   )r   r)   nowr   r   r   r(   ;   s0   
z.AioDeferredRefreshableToken._protected_refreshN)__name__
__module____qualname__r   r"   r$   r#   r(   r   r   r   r   r       s
    
r   c                   @   s8   e Zd Zdd Zdd Zdd Zedd Zd	d
 ZdS )r   c              	      s   | j 4 I d H }|j| j|d |d |d dI d H }W d   I d H  n1 I d H s,w   Y  t|d d}| jd | jd |d	 |  | |d |d |d
 d}d|v r^|d |d< td |S )NclientIdclientSecretrefreshToken)	grantTyper:   r;   r<   	expiresInr+   sso_start_url
sso_regionaccessTokenregistrationExpiresAt)startUrlregionrA   	expiresAtr:   r;   rB   zSSO Token refresh succeeded)_clientcreate_token_GRANT_TYPEr   _sso_config_nowr3   info)r   tokenclientresponse
expires_in	new_tokenr   r   r   _attempt_create_tokenY   s,   (


z)AioSSOTokenProvider._attempt_create_tokenc                    s   d} fdd|D }|rd| }t | d S tj d }t||   dkr4t d| d S z	|  I d H W S  tyN   t j	dd	d
 Y d S w )N)r<   r:   r;   rB   c                    s   g | ]}| vr|qS r   r   ).0krL   r   r   
<listcomp>x   s    z=AioSSOTokenProvider._refresh_access_token.<locals>.<listcomp>z+Unable to refresh SSO token: missing keys: rB   r   z$SSO token registration expired at %sz SSO token refresh attempt failedTr-   )
r3   rK   dateutilparserparser   rJ   rQ   r   r4   )r   rL   keysmissing_keysmsgexpiryr   rT   r   _refresh_access_tokenq   s"   

z)AioSSOTokenProvider._refresh_access_tokenc                    s   | j d }| j d }td| | j||d}tj|d }td| t|| 	  }|| j
k rN| |I d H }|d urN|}|d }| jj|||d t|d |dS )	Nr?   session_namezLoading cached SSO token for %s)r^   rE   zCached SSO token expires at %srA   )
expiration)rI   r3   rK   _token_loaderrV   rW   rX   debugr   rJ   _REFRESH_WINDOWr]   
save_tokenr   )r   	start_urlr^   
token_dictr_   	remainingnew_token_dictr   r   r   
_refresher   s&   


zAioSSOTokenProvider._refresherc                 C   s"   t | jd td}t| jd|dS )Nr@   )region_namesignature_versionzsso-oidc)config)r   rI   r   r   _session)r   rk   r   r   r   rF      s
   zAioSSOTokenProvider._clientc                 K   s"   | j d u rd S t| j| j| jdS )N)r!   )rI   r   METHODrh   rJ   )r   kwargsr   r   r   
load_token   s
   
zAioSSOTokenProvider.load_tokenN)	r7   r8   r9   rQ   r]   rh   propertyrF   ro   r   r   r   r   r   X   s    
r   )r   loggingdatetimer   dateutil.parserrV   botocorer   botocore.compatr   botocore.exceptionsr   r   botocore.tokensr   r   r	   r
   r   r   aiobotocore.configr   aiobotocore.utilsr   	getLoggerr7   r3   r   r   r   r   r   r   r   <module>   s     	
8