U
    ÒZjK*  ã                   @   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 d d	lmZmZmZ d d
l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&dS )é    N)ÚdatetimeÚ	timedelta)Ú
NamedTupleÚOptional)Útzutc)ÚUNSIGNED)Útotal_seconds)ÚConfig)ÚJSONFileCache)ÚClientErrorÚInvalidConfigErrorÚTokenRetrievalError)ÚCachedPropertyÚSSOTokenLoaderc                   C   s   t  tƒ ¡S ©N)r   Únowr   © r   r   úR/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/botocore/tokens.pyÚ_utc_now%   s    r   c                 C   s   t | ƒg}t|d�S )N)Ú	providers)Ú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_timestamp0   s    

r   c                 C   s   t j| td�S )N)Údefault)ÚjsonÚdumpsr   r   r   r   r   Ú_sso_json_dumps6   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)Úselfr0   Zrefresh_usingÚtime_fetcherr   r   r   Ú__init__H   s    
z!DeferredRefreshableToken.__init__c                 C   s   |   ¡  | jS r   )Ú_refreshr4   ©r6   r   r   r   Úget_frozen_tokenR   s    z)DeferredRefreshableToken.get_frozen_tokenc                 C   sB   |   ¡ }|sd S |dk}| j |¡r>z|  ¡  W 5 | j ¡  X d S )NÚ	mandatory)Ú_should_refreshr3   ÚacquireÚreleaseÚ_protected_refresh)r6   Úrefresh_typeZblock_for_refreshr   r   r   r9   V   s    z!DeferredRefreshableToken._refreshc                 C   s‚   |   ¡ }|sd S z(|  ¡ }|t| jd� | _|  ¡ | _W n. tk
rf   tj	d|dd� |dkrb‚ Y nX |  
¡ 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=   r.   r   Ú_attempt_timeoutr5   r/   r4   Ú	ExceptionÚloggerÚwarningÚ_is_expiredr   r0   )r6   rA   r   r   r   r   r@   d   s(    ýþz+DeferredRefreshableToken._protected_refreshc                 C   s.   | j d krdS | j j}t||  ¡  ƒ}|dkS )NFr   )r4   r%   r   r.   )r6   r%   Ú	remainingr   r   r   rL   €   s
    
z$DeferredRefreshableToken._is_expiredc                 C   sd   | j d krdS | j j}|d kr"d S |  ¡ }|| jk r8d S t|| ƒ}|| jk rRdS || jk r`dS d S )Nr<   Zadvisory)r4   r%   r.   r5   r   Ú_mandatory_refresh_timeoutÚ_advisory_refresh_timeout)r6   r%   r   rM   r   r   r   r=   ˆ   s    



z(DeferredRefreshableToken._should_refreshN)r&   r'   r(   rO   rN   rH   r   r8   r;   r9   r@   rL   r=   r   r   r   r   r+   ?   s   
r+   c                   @   s   e Zd Zddd„Zdd„ ZdS )r   Nc                 C   s   |d krg }|| _ d S r   )Ú
_providers)r6   r   r   r   r   r8   ¡   s    zTokenProviderChain.__init__c                 C   s(   | j D ]}| ¡ }|d k	r|  S qd S r   )rP   Ú
load_token)r6   rF   r$   r   r   r   rQ   ¦   s
    

zTokenProviderChain.load_token)N)r&   r'   r(   r8   rQ   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d	e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   s:   || _ |d krt| jtd�}|| _|| _t| jd�| _d S )N)Z
dumps_func)rS   )Ú_sessionr
   Ú_SSO_TOKEN_CACHE_DIRr"   Ú_nowÚ_cacher   Ú_token_loader)r6   r   rS   r7   r   r   r   r8   º   s    þzSSOTokenProvider.__init__c                 C   sÖ   | j j}| di ¡}| di ¡}| j  d¡}|s4d}| |i ¡}d|krLd S |d }| |d ¡}|s€d|› d|› d�}t|d	�‚g }	| jD ]}
|
|krŠ|	 |
¡ qŠ|	rÂd|› d
|	› d�}t|d	�‚||d |d dœS )NÚprofilesÚsso_sessionsZprofiler   Zsso_sessionzThe profile "z7" is configured to use the SSO token provider but the "z+" sso_session configuration does not exist.)rG   zZ" is configured to use the SSO token provider but is missing the following configuration: Ú.rU   rT   )Úsession_namerU   rT   )rV   Zfull_configÚgetZget_config_variabler   Ú_SSO_CONFIG_VARSÚappend)r6   Zloaded_configr[   r\   Zprofile_nameZprofile_configZsso_session_nameZ
sso_configrG   Zmissing_configsÚvarr   r   r   Ú_load_sso_configÅ   s6    ÿ

ÿ
ýz!SSOTokenProvider._load_sso_configc                 C   s   |   ¡ S r   )rc   r:   r   r   r   Ú_sso_configï   s    zSSOTokenProvider._sso_configc                 C   s"   t | jd td�}| jjd|d�S )NrU   )Zregion_nameZsignature_versionzsso-oidc)Úconfig)r	   rd   r   rV   Zcreate_client)r6   re   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|kr||d |d< t d¡ |S )NÚclientIdÚclientSecretÚrefreshToken)Z	grantTyperg   rh   ri   Z	expiresInrB   rT   rU   ÚaccessTokenÚregistrationExpiresAt)ZstartUrlÚregionrj   Ú	expiresAtrg   rh   rk   zSSO Token refresh succeeded)rf   Zcreate_tokenÚ_GRANT_TYPEr   rd   rX   rJ   Úinfo)r6   r$   ÚresponseZ
expires_inZ	new_tokenr   r   r   Ú_attempt_create_tokenû   s&    ü
ø

z&SSOTokenProvider._attempt_create_tokenc                    s    d}‡ fdd„|D ƒ}|r2d|› �}t  |¡ d S tj ˆ d ¡}t||  ¡  ƒdkrjt  d|› �¡ d S z|  ˆ ¡W S  tk
rš   t j	dd	d
� Y d S X d S )N)ri   rg   rh   rk   c                    s   g | ]}|ˆ k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: rk   r   z"SSO token registration expired at z SSO token refresh attempt failedTrD   )
rJ   ro   ÚdateutilÚparserÚparser   rX   rq   r   rK   )r6   r$   ÚkeysZmissing_keysÚmsgZexpiryr   rt   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 rœ|  |¡}|d k	rœ|}|d }| jj|||d� t|d |d�S )	NrT   r^   zLoading cached SSO token for )r^   rm   zCached SSO token expires at rj   )r%   )rd   rJ   ro   rZ   rv   rw   rx   Údebugr   rX   Ú_REFRESH_WINDOWr{   Z
save_tokenr#   )r6   Z	start_urlr^   Z
token_dictr%   rM   Znew_token_dictr   r   r   Ú
_refresher*  s*    



  ÿ ÿzSSOTokenProvider._refresherc                 C   s"   | j d krd S t| j| j| jd�S )N)r7   )rd   r+   ÚMETHODr~   rX   r:   r   r   r   rQ   @  s    
  ÿzSSOTokenProvider.load_token)r&   r'   r(   r   r}   ÚosÚpathÚ
expanduserÚjoinrW   r`   rn   r   r8   rc   r   rd   rf   rq   r{   r~   rQ   r   r   r   r   r   ®   s&   ÿþ*

r   )'r    Úloggingr€   r1   r   r   Útypingr   r   Zdateutil.parserrv   Zdateutil.tzr   Zbotocorer   Zbotocore.compatr   Zbotocore.configr	   Zbotocore.credentialsr
   Zbotocore.exceptionsr   r   r   Zbotocore.utilsr   r   Ú	getLoggerr&   rJ   r   r   r   r"   r#   r+   r   r   r   r   r   r   Ú<module>   s,   
a