
    i-                     f   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 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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& G d d          Z'dS )    N)datetime	timedelta)
NamedTuple)tzutc)UNSIGNED)total_seconds)Config)ClientErrorInvalidConfigErrorTokenRetrievalError)CachedPropertyJSONFileCacheSSOTokenLoadercreate_nested_clientget_token_from_environmentc                  B    t          j        t                                S N)r   nowr        V/home/piyush/.hermes/hermes-agent/venv/lib/python3.11/site-packages/botocore/tokens.py_utc_nowr   *   s    <   r   c                 ^    t          |           t          |           g}t          |          S )N)	providers)ScopedEnvTokenProviderSSOTokenProviderTokenProviderChain)sessionr   s     r   create_token_resolverr   .   s2    w''!!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%   6   s,    #x   2||0111Jr   c                 8    t          j        | t                    S )N)default)jsondumpsr%   r#   s    r   _sso_json_dumpsr*   <   s    :c#;<<<<r   c                   .    e Zd ZU eed<   dZedz  ed<   dS )FrozenAuthTokentokenN
expiration)__name__
__module____qualname__str__annotations__r.   r   r   r   r   r,   r,   @   s/         JJJ"&J4&&&&&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)selfr;   refresh_usingtime_fetchers       r   __init__z!DeferredRefreshableToken.__init__N   sA    )+ '^--!!r   c                 8    |                                   | j        S r   )_refreshr?   rA   s    r   get_frozen_tokenz)DeferredRefreshableToken.get_frozen_tokenX   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)rA   refresh_typeblock_for_refreshs      r   rF   z!DeferredRefreshableToken._refresh\   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_inforJ   z$Token has expired and refresh failed)provider	error_msg)rK   r9   r   _attempt_timeoutr@   r:   r?   	Exceptionloggerwarning_is_expiredr   r;   )rA   rO   r   s      r   rM   z+DeferredRefreshableToken._protected_refreshj   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   r9   )rA   r.   	remainings      r   r\   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 )NrJ   advisory)r?   r.   r9   r@   r   _mandatory_refresh_timeout_advisory_refresh_timeout)rA   r.   r   r^   s       r   rK   z(DeferredRefreshableToken._should_refresh   s    %;'2
4  ""###4!*s"233	t666;777:tr   N)r/   r0   r1   rb   ra   rX   r   rD   rH   rF   rM   r\   rK   r   r   r   r5   r5   E   s         !(!(;C " " " "" " "- - -  8      r   r5   c                       e Zd ZddZd ZdS )r   Nc                     |g }|| _         d S r   )
_providers)rA   r   s     r   rD   zTokenProviderChain.__init__   s    I#r   c                 @    | j         D ]} |j        di |}||c S d S )Nr   )re   
load_token)rA   kwargsrV   r-   s       r   rg   zTokenProviderChain.load_token   sD     	 	H'H'11&11E  !tr   r   )r/   r0   r1   rD   rg   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   ssor6   ~z.awscachesso_start_url
sso_regionrefresh_tokenNc                     || _         |!|                     | j        t                    }|| _        || _        t          | j                  | _        |p| j                             d          pd| _	        d S )N)
dumps_func)rl   profiler'   )
_sessionDEFAULT_CACHE_CLS_SSO_TOKEN_CACHE_DIRr*   _now_cacher   _token_loaderget_config_variable_profile_name)rA   r   rl   rC   profile_names        r   rD   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.)rW   zZ" is configured to use the SSO token provider but is missing the following configuration: .rn   rm   )session_namern   rm   )rs   full_configgetrz   r   _SSO_CONFIG_VARSappend)
rA   loaded_configr}   r~   profile_configsso_session_name
sso_configrW   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   rG   s    r   _sso_configzSSOTokenProvider._sso_config   s    $$&&&r   c                 r    t          | j        d         t                    }t          | j        d|          S )Nrn   )region_namesignature_versionzsso-oidc)config)r	   r   r   r   rs   )rA   r   s     r   _clientzSSOTokenProvider._client   s=    (6&
 
 
 $DM:fMMMMr   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   	expiresInrR   rm   rn   accessTokenregistrationExpiresAt)startUrlregionr   	expiresAtr   r   r   zSSO Token refresh succeeded)r   create_token_GRANT_TYPEr   r   rv   rZ   info)rA   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 %sz SSO token refresh attempt failedTrT   )
rZ   r   dateutilparserparser   rv   r   r
   r[   )rA   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>GGG4	--e444 	 	 	NN=NMMM44	s    B5 5&CCc                 "   | j         d         }| j         d         }t                              d|           |                     ||          }t          j                            |d                   }t                              d|           t          || 	                                z
            }|| j
        k     r>|                     |          }|'|}|d         }| j                            |||           t          |d         |          S )	Nrm   r   zLoading cached SSO token for %s)r   r   zCached SSO token expires at %sr   )r.   )r   rZ   r   rx   r   r   r   debugr   rv   _REFRESH_WINDOWr   
save_tokenr,   )rA   	start_urlr   
token_dictr.   r^   new_token_dicts          r   
_refresherzSSOTokenProvider._refresher5  s   $_5	'75|DDD''	'MM
_**:k+BCC
5zBBB!*tyy{{":;;	t+++!77
CCN)+
'4
"--z .    }%*
 
 
 	
r   c                 V    | j         d S t          | j        | j        | j                  S )N)rC   )r   r5   METHODr   rv   )rA   rh   s     r   rg   zSSOTokenProvider.load_tokenK  s4    #4'Kty
 
 
 	
r   )r/   r0   r1   r   r   ospath
expanduserjoinru   r   r   r   rt   r   rD   r   r   r   r   r   r   r   rg   r   r   r   r   r      s       FO7--
S&%11  	 "K% "t
 
 
 
$%
 %
 %
N ' ' ^' N N ^N  .  0
 
 
,
 
 
 
 
r   r   c                   $    e Zd ZdZdZddZd ZdS )r   zn
    Token provider that loads tokens from environment variables scoped to
    a specific `signing_name`.
    envNc                 >    || _         |t          j        }|| _        d S r   )rs   r   environ)rA   r   r   s      r   rD   zScopedEnvTokenProvider.__init__\  s     ?jGr   c                     |                     d          }|d S t          || j                  }|)t                              d           t          |          S d S )Nsigning_namez%Found token in environment variables.)r   r   r   rZ   r   r,   )rA   rh   r   r-   s       r   rg   z!ScopedEnvTokenProvider.load_tokenb  s^    zz.114*<FFKK?@@@"5))) r   r   )r/   r0   r1   __doc__r   rD   rg   r   r   r   r   r   T  sH         
 F   	* 	* 	* 	* 	*r   r   )(r(   loggingr   r<   r   r   typingr   dateutil.parserr   dateutil.tzr   botocorer   botocore.compatr   botocore.configr	   botocore.exceptionsr
   r   r   botocore.utilsr   r   r   r   r   	getLoggerr/   rZ   r   r   r%   r*   r,   r5   r   r   r   r   r   r   <module>r      sZ     				     ( ( ( ( ( ( ( (                       ) ) ) ) ) ) " " " " " "         
              
	8	$	$! ! !3 3 3  = = =' ' ' ' 'j ' ' '
^ ^ ^ ^ ^ ^ ^ ^B       ]
 ]
 ]
 ]
 ]
 ]
 ]
 ]
@* * * * * * * * * *r   