
    tni-                     j   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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Optional)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        L/var/www/html/gpu-tools/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                   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-   @   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)selfr<   refresh_usingtime_fetchers       r   __init__z!DeferredRefreshableToken.__init__N   sA    )+ '^--!!r   c                 8    |                                   | j        S r   )_refreshr@   rB   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)rB   refresh_typeblock_for_refreshs      r   rG   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_inforK   z$Token has expired and refresh failed)provider	error_msg)rL   r:   r   _attempt_timeoutrA   r;   r@   	Exceptionloggerwarning_is_expiredr   r<   )rB   rP   r   s      r   rN   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	   r:   )rB   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 )NrK   advisory)r@   r/   r:   rA   r	   _mandatory_refresh_timeout_advisory_refresh_timeout)rB   r/   r   r_   s       r   rL   z(DeferredRefreshableToken._should_refresh   s    %;'2
4  ""###4!*s"233	t666;777:tr   N)r0   r1   r2   rc   rb   rY   r   rE   rI   rG   rN   r]   rL   r   r   r   r6   r6   E   s         !(!(;C " " " "" " "- - -  8      r   r6   c                       e Zd ZddZd ZdS )r   Nc                     |g }|| _         d S r   )
_providers)rB   r   s     r   rE   zTokenProviderChain.__init__   s    I#r   c                 @    | j         D ]} |j        di |}||c S d S )Nr   )rf   
load_token)rB   kwargsrW   r.   s       r   rh   zTokenProviderChain.load_token   sD     	 	H'H'11&11E  !tr   r   )r0   r1   r2   rE   rh   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   ssor7   ~z.awscachesso_start_url
sso_regionrefresh_tokenNc                     || _         |!|                     | j        t                    }|| _        || _        t          | j                  | _        |p| j                             d          pd| _	        d S )N)
dumps_func)rm   profiler(   )
_sessionDEFAULT_CACHE_CLS_SSO_TOKEN_CACHE_DIRr+   _now_cacher   _token_loaderget_config_variable_profile_name)rB   r   rm   rD   profile_names        r   rE   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.)rX   zZ" is configured to use the SSO token provider but is missing the following configuration: .ro   rn   )session_namero   rn   )rt   full_configgetr{   r   _SSO_CONFIG_VARSappend)
rB   loaded_configr~   r   profile_configsso_session_name
sso_configrX   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   rH   s    r   _sso_configzSSOTokenProvider._sso_config   s    $$&&&r   c                 r    t          | j        d         t                    }t          | j        d|          S )Nro   )region_namesignature_versionzsso-oidc)config)r
   r   r   r   rt   )rB   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   	expiresInrS   rn   ro   accessTokenregistrationExpiresAt)startUrlregionr   	expiresAtr   r   r   zSSO Token refresh succeeded)r   create_token_GRANT_TYPEr   r   rw   r[   info)rB   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 failedTrU   )
r[   r   dateutilparserparser	   rw   r   r   r\   )rB   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 )	Nrn   r   zLoading cached SSO token for %s)r   r   zCached SSO token expires at %sr   )r/   )r   r[   r   ry   r   r   r   debugr	   rw   _REFRESH_WINDOWr   
save_tokenr-   )rB   	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)rD   )r   r6   METHODr   rw   )rB   ri   s     r   rh   zSSOTokenProvider.load_tokenK  s4    #4'Kty
 
 
 	
r   )r0   r1   r2   r   r   ospath
expanduserjoinrv   r   r   r   ru   r   rE   r   r   r   r   r   r   r   rh   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   )rt   r   environ)rB   r   r   s      r   rE   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   r[   r   r-   )rB   ri   r   r.   s       r   rh   z!ScopedEnvTokenProvider.load_tokenb  s^    zz.114*<FFKK?@@@"5))) r   r   )r0   r1   r2   __doc__r   rE   rh   r   r   r   r   r   T  sH         
 F   	* 	* 	* 	* 	*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   r   r   	getLoggerr0   r[   r   r    r&   r+   r-   r6   r   r   r   r   r   r   <module>r      s`     				     ( ( ( ( ( ( ( ( ' ' ' ' ' ' ' '                 ) ) ) ) ) ) " " " " " "         
              
	8	$	$! ! !3 3 3  = = =* * * * *j * * *
^ ^ ^ ^ ^ ^ ^ ^B       ]
 ]
 ]
 ]
 ]
 ]
 ]
 ]
@* * * * * * * * * *r   