
    'wfa                     ~   d dl Z d dlZd dlZd dlZd dlZd dlZd dl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mZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7 d d	l8m9Z9 d d
l:m;Z; d dl<m=Z= d dl>m?Z?m@Z@  ej                  eB      ZCd=dZD G d de'      ZEd ZFd ZGd ZHeHZI G d de      ZJ G d de)      ZK G d deK      ZL G d de      ZM G d deeM      ZN G d deeN      ZO G d d eN      ZP G d! d"e&      ZQ G d# d$e!      ZR G d% d&e       ZS G d' d(e$      ZT G d) d*e+      ZU G d+ d,e      ZV G d- d.e      ZW G d/ d0e      ZX G d1 d2e      ZY G d3 d4e      ZZ G d5 d6e      Z[ G d7 d8e      Z\ G d9 d:eM      Z] G d; d<e,      Z^y)>    N)deepcopy)sha1)UNSIGNED)compat_shell_split)Config)%!_DEFAULT_ADVISORY_REFRESH_TIMEOUTAssumeRoleCredentialFetcherAssumeRoleProvider!AssumeRoleWithWebIdentityProviderBaseAssumeRoleCredentialFetcherBotoProviderCachedCredentialFetcherCanonicalNameCredentialSourcerConfigNotFoundConfigProviderContainerMetadataFetcherContainerProviderCredentialResolverCredentialRetrievalErrorCredentialsEnvProviderInstanceMetadataProviderInvalidConfigErrorMetadataRetrievalErrorOriginalEC2ProviderPartialCredentialsErrorProcessProviderProfileProviderBuilderReadOnlyCredentialsRefreshableCredentialsRefreshWithMFAUnsupportedErrorSharedCredentialProviderSSOProviderSSOTokenLoaderUnauthorizedSSOTokenErrorUnknownCredentialError_get_client_creator
_local_now_parse_if_needed_serialize_if_neededparseresolve_imds_endpoint_mode)tzutc)resolve_awaitable)	AioConfig)AioSSOTokenProvider)AioContainerMetadataFetcherAioInstanceMetadataFetcherc                      j                  d      xs d} j                  d      } j                  d      } j                         j                  d      du} j                  d      t               t         j                  d      d}|i }t               }t               }	t        t        || j                         |	      
      }
t         ||      }t         fdt         |      ||t        ||	|
g      |      }||g}|j                  ||      }t               t!               |	|
g}||z   |z   }|r&|j#                  |       t$        j'                  d       t)        |      }|S )zCreate a default credential resolver.
    This creates a pre-configured credential resolver
    that includes the default lookup chain for
    credentials.
    profiledefaultmetadata_service_timeoutmetadata_service_num_attemptsNec2_metadata_service_endpointec2_metadata_v1_disabled)r8   "ec2_metadata_service_endpoint_modeec2_credential_refresh_windowr9   )timeoutnum_attempts
user_agentconfig)iam_role_fetcher)cacheregion_namec                       j                   S N)full_config)sessions   k/home/panchajanya/Development/work/volatility3/venv/lib/python3.12/site-packages/aiobotocore/credentials.py<lambda>z,create_credential_resolver.<locals>.<lambda>l   s    G//     )load_configclient_creatorrA   profile_namecredential_sourcerprofile_provider_builderrL   disable_env_varszWSkipping environment variable credential check because profile name was explicitly set.)	providers)get_config_variableinstance_variablesgetr,   r   AioEnvProviderAioContainerProviderAioInstanceMetadataProviderr2   r>   AioProfileProviderBuilderAioAssumeRoleProviderr'   !AioCanonicalNameCredentialSourcerrQ   AioOriginalEC2ProviderAioBotoProviderremoveloggerdebugAioCredentialResolver)rF   rA   rB   rL   metadata_timeoutr=   rP   imds_configenv_providercontainer_providerinstance_metadata_providerrN   assume_role_providerpre_profileprofile_providerspost_profilerQ   resolvers   `                 rG   create_credential_resolverrk   B   s    ..y9FYL223MN../NOL11377	B$N *1)D)D+*
 /I/
 *K$+$?$?&%
K }!#L-/!<3$%))+	
"  9u+  1/*7K@!<-/IJ
 ":	 	K 1::!) ; 
 	 "	L //,>I  	&8	

 %y9HOrI   c                   *    e Zd Zd Zd Zd Zd Zd Zy)rX   c                 $     t        | fd      S )Nc                  0     j                   j                  S rD   _sessionrE   selfs   rG   rH   zDAioProfileProviderBuilder._create_process_provider.<locals>.<lambda>        9 9 rI   )rL   rJ   )AioProcessProviderrr   rL   s   ` rG   _create_process_providerz2AioProfileProviderBuilder._create_process_provider   s    !%9
 	
rI   c                 R    | j                   j                  d      }t        ||      S )Ncredentials_file)rL   creds_filename)rp   rR   AioSharedCredentialProvider)rr   rL   credential_files      rG   "_create_shared_credential_providerz<AioProfileProviderBuilder._create_shared_credential_provider   s*    --;;<NO*%*
 	
rI   c                 R    | j                   j                  d      }t        ||      S )Nconfig_file)rL   config_filename)rp   rR   AioConfigProvider)rr   rL   r~   s      rG   _create_config_providerz1AioProfileProviderBuilder._create_config_provider   s)    mm77F %'
 	
rI   c                 z     t         fdt         j                   j                         j                  ||      S )Nc                  0     j                   j                  S rD   ro   rq   s   rG   rH   zIAioProfileProviderBuilder._create_web_identity_provider.<locals>.<lambda>   rs   rI   )rJ   rK   rA   rL   rP   )$AioAssumeRoleWithWebIdentityProviderr'   rp   _region_name_cache)rr   rL   rP   s   `  rG   _create_web_identity_providerz7AioProfileProviderBuilder._create_web_identity_provider   s9    39.t00 ++%-
 	
rI   c                      t         fd j                  j                  | j                   j                  t         j                   j                  |            S )Nc                  0     j                   j                  S rD   ro   rq   s   rG   rH   z@AioProfileProviderBuilder._create_sso_provider.<locals>.<lambda>   rs   rI   )rA   rL   )rJ   rK   rL   rA   token_cachetoken_provider)AioSSOProviderrp   create_clientr   _sso_token_cacher0   ru   s   ` rG   _create_sso_providerz.AioProfileProviderBuilder._create_sso_provider   sN    9==66%++--.++)
 	
rI   N)__name__
__module____qualname__rv   r|   r   r   r    rI   rG   rX   rX      s    


	

rI   rX   c                 T   K   t        |       }|j                          d {   S 7 wrD   )rk   load_credentials)rF   rj   s     rG   get_credentialsr      s%     )'2H**,,,,s   (&(c                       fd}|S )Nc                     K   4 d {   }  | j                   di  d {   }d d d       d {    d   }|d   |d   |d   t        |d         dS 7 O7 77 )# 1 d {  7  sw Y   9xY ww)Nr   AccessKeyIdSecretAccessKeySessionToken
Expiration
access_key
secret_keytokenexpiry_timer   )assume_roler*   )stsresponsecredentialsclientparamss      rG   refreshz-create_assume_role_refresher.<locals>.refresh   s      	7 	7S,S__6v66H	7 	7}- &m4%&78 0/L0IJ	
 	
	76	7 	7 	7 	7sQ   A5AA5A AA A5A&A5A A5 A2&A)'A2.A5r   )r   r   r   s   `` rG   create_assume_role_refresherr      s    
 NrI   c                 :     G d d      } ||       j                   S )Nc                       e Zd Zd Zd Zy)/create_mfa_serial_refresher.<locals>._Refresherc                      || _         d| _        y )NF)_refresh_has_been_called)rr   r   s     rG   __init__z8create_mfa_serial_refresher.<locals>._Refresher.__init__   s    #DM$)D!rI   c                 x   K   | j                   r
t               d| _         | j                          d {   S 7 wNT)r   r!   r   rq   s    rG   callz4create_mfa_serial_refresher.<locals>._Refresher.call   s4     $$ 566$(D!(((s   1:8:N)r   r   r   r   r   r   rI   rG   
_Refresherr      s    	*	)rI   r   )r   )actual_refreshr   s     rG   create_mfa_serial_refresherr      s    ) ) n%***rI   c                       e Zd Zd Zy)AioCredentialsc                 `   K   t        | j                  | j                  | j                        S wrD   )r   r   r   r   rq   s    rG   get_frozen_credentialsz%AioCredentials.get_frozen_credentials   s&     "OOT__djj
 	
s   ,.N)r   r   r   r   r   rI   rG   r   r      s    
rI   r   c                        e Zd Z fdZed        Zej                  d        Zed        Zej                  d        Zed        Zej                  d        Zd Z	d	 Z
d
 Z xZS )AioRefreshableCredentialsc                 V    t        |   |i | t        j                         | _        y rD   )superr   asyncioLock_refresh_lockrr   argskwargs	__class__s      rG   r   z"AioRefreshableCredentials.__init__  s#    $)&)$\\^rI   c                     t        d      NzAmissing call to self._refresh. Use get_frozen_credentials instead)NotImplementedError_access_keyrq   s    rG   r   z$AioRefreshableCredentials.access_key	       "1
 	
rI   c                     || _         y rD   )r   rr   values     rG   r   z$AioRefreshableCredentials.access_key  
     rI   c                     t        d      r   )r   _secret_keyrq   s    rG   r   z$AioRefreshableCredentials.secret_key  r   rI   c                     || _         y rD   )r   r   s     rG   r   z$AioRefreshableCredentials.secret_key  r   rI   c                     t        d      r   )r   _tokenrq   s    rG   r   zAioRefreshableCredentials.token#  r   rI   c                     || _         y rD   )r   r   s     rG   r   zAioRefreshableCredentials.token,  s	    rI   c                   K   | j                  | j                        sy | j                  j                         s| j                  4 d {    | j                  | j                        s	 d d d       d {    y | j                  | j                        }| j                  |       d {    	 d d d       d {    y | j                  | j                        rm| j                  4 d {    | j                  | j                        s	 d d d       d {    y | j                  d       d {    d d d       d {    y y 7 7 7 7 # 1 d {  7  sw Y   y xY w7 {7 Q7 87 *# 1 d {  7  sw Y   y xY ww)N)is_mandatoryT)refresh_needed_advisory_refresh_timeoutr   locked_mandatory_refresh_timeout_protected_refresh)rr   is_mandatory_refreshs     rG   r   z"AioRefreshableCredentials._refresh0  s    ""4#A#AB !!((*)) 	 	**4+I+IJ	 	 	 (,':':33($ --!5 .    	 	 	   !@!@A )) A A**4+J+JKA A A --4-@@@	A A A B	 		 	 	 	A A A	A A A As   AF	E
FE*F5E6F;0E+E,E1F<E=0F-E).F1E1FE+FE14E-5E19FE/FFEFE&EE&"F+F-E1/F1F7E:8F?Fc                   K   	 t        | j                                d {   }| j                  |       t        | j                  | j                  | j                        | _
        | j                         r"d}t        j	                  |       t        |      y 7 x# t        $ r$ |rdnd}t        j	                  d|d       |r Y y w xY ww)N	mandatoryadvisoryzARefreshing temporary credentials failed during %s refresh period.Texc_infozLCredentials were refreshed, but the refreshed credentials are still expired.)r.   _refresh_using	Exceptionr^   warning_set_from_datar   r   r   r   _frozen_credentials_is_expiredRuntimeError)rr   r   metadataperiod_namemsgs        rG   r   z,AioRefreshableCredentials._protected_refreshI  s     	.t/B/B/DEEH$ 	H%#6d..$
  ;  NN3s## - F 	)5+:KNN,	     !	s8   CB BB A4CB *CCCCc                 V   K   | j                          d {    | j                  S 7 wrD   )r   r   rq   s    rG   r   z0AioRefreshableCredentials.get_frozen_credentialsj  s&     mmo''' 	s   )'))r   r   r   r   propertyr   setterr   r   r   r   r   __classcell__r   s   @rG   r   r     s    ,     ! !     ! !   \\ A2$B(rI   r   c                   *     e Zd ZefdZd fd	Z xZS )!AioDeferredRefreshableCredentialsc                     || _         d | _        d | _        d | _        d | _        || _        t        j                         | _        || _	        d | _
        y rD   )r   r   r   r   _expiry_time_time_fetcherr   r   r   methodr   )rr   refresh_usingr   time_fetchers       rG   r   z*AioDeferredRefreshableCredentials.__init__p  sN    + )$\\^#' rI   c                 <    | j                   yt        | 	  |      S r   )r   r   r   )rr   
refresh_inr   s     rG   r   z0AioDeferredRefreshableCredentials.refresh_needed{  s"    ##+w%j11rI   rD   )r   r   r   r(   r   r   r   r   s   @rG   r   r   o  s    ;E 	(2 2rI   r   c                       e Zd Zd Zd Zd Zy)AioCachedCredentialFetcherc                     K   t        d      w)Nz_get_credentials())r   rq   s    rG   _get_credentialsz+AioCachedCredentialFetcher._get_credentials  s     !"677s   c                 >   K   | j                          d {   S 7 wrD   )_get_cached_credentialsrq   s    rG   fetch_credentialsz,AioCachedCredentialFetcher.fetch_credentials  s     113333   c                    K   | j                         }|*| j                          d{   }| j                  |       nt        j	                  d       |d   }t        |d   d      }|d   |d   |d	   |d
S 7 Pw)zGet up-to-date credentials.

        This will check the cache for up-to-date credentials, calling assume
        role if none are available.
        Nz*Credentials for role retrieved from cache.r   r   T)isor   r   r   r   )_load_from_cacher   _write_to_cacher^   r_   r*   )rr   r   creds
expirations       rG   r   z2AioCachedCredentialFetcher._get_cached_credentials  s      ((*!2244H  *LLEF')%*=4H
. 12>*%	
 	
 5s   &A;A9AA;N)r   r   r   r   r  r   r   rI   rG   r   r     s    84
rI   r   c                       e Zd Zy)"AioBaseAssumeRoleCredentialFetcherN)r   r   r   r   rI   rG   r
  r
    s     	rI   r
  c                       e Zd Zd Zd Zy)AioAssumeRoleCredentialFetcherc                    K   | j                         }| j                          d{   }|4 d{   } |j                  di | d{   cddd      d{    S 7 :7 17 7 # 1 d{  7  sw Y   yxY ww)'Get credentials by calling assume role.Nr   )_assume_role_kwargs_create_clientr   )rr   r   r   r   s       rG   r   z/AioAssumeRoleCredentialFetcher._get_credentials  s|     ))+**,, 	3 	3S(2622	3 	3 	3 -	32	3 	3 	3 	3sf   $A>A!
A>A#A>A)A%A)A>A'A>#A>%A)'A>)A;/A20A;7A>c                    K   | j                   j                          d{   }| j                  d|j                  |j                  |j
                        S 7 7w)z2Create an STS client using the source credentials.Nr   )aws_access_key_idaws_secret_access_keyaws_session_token)_source_credentialsr   _client_creatorr   r   r   )rr   frozen_credentialss     rG   r  z-AioAssumeRoleCredentialFetcher._create_client  s`      **AACC 	 ##0;;"4"?"?066	 $ 
 	
 Ds   AA8AN)r   r   r   r   r  r   rI   rG   r  r    s    3

rI   r  c                   2     e Zd Z	 	 	 d fd	Zd Zd Z xZS )-AioAssumeRoleWithWebIdentityCredentialFetcherc                 <    || _         t        | 	  |||||       y )N)
extra_argsrA   expiry_window_seconds)_web_identity_token_loaderr   r   )rr   rK   web_identity_token_loaderrole_arnr  rA   r  r   s          rG   r   z6AioAssumeRoleWithWebIdentityCredentialFetcher.__init__  s/     +D'!"7 	 	
rI   c                   K   | j                         }t        t              }| j                  d|      4 d{   } |j                  di | d{   cddd      d{    S 7 /7 7 	# 1 d{  7  sw Y   yxY ww)r  )signature_versionr   r?   Nr   )r  r/   r   r  assume_role_with_web_identity)rr   r   r?   r   s       rG   r   z>AioAssumeRoleWithWebIdentityCredentialFetcher._get_credentials  s     ))+ X6''f'= 	H 	H===GGG	H 	H 	HG	H 	H 	H 	HsV   8BA*BA0A,A0B$A.%B,A0.B0B6A97B>Bc                 Z    t        | j                        }| j                         }||d<   |S )zAGet the arguments for assume role based on current configuration.WebIdentityToken)r   _assume_kwargsr  )rr   assume_role_kwargsidentity_tokens      rG   r  zAAioAssumeRoleWithWebIdentityCredentialFetcher._assume_role_kwargs  s3    %d&9&9:88:1?-.!!rI   )NNN)r   r   r   r   r   r  r   r   s   @rG   r  r    s     "
&H"rI   r  c                   D     e Zd Zej                  d fd
Zd Zd Z xZS )rt   )popenc                ,    t        |   |i |d|i y )Nr*  )r   r   )rr   r*  r   r   r   s       rG   r   zAioProcessProvider.__init__  s    $6&66rI   c                 *   K    j                   y  j                         d {   }|j                  d      %t        j	                  | fd j
                        S t        |d   |d   |j                  d       j
                        S 7 hw)Nr   c                  &    j                         S rD   )_retrieve_credentials_using)credential_processrr   s   rG   rH   z)AioProcessProvider.load.<locals>.<lambda>  s    889KL rI   r   r   r   )r   r   r   r   )_credential_processr.  rT   r   create_from_metadataMETHODr   )rr   
creds_dictr/  s   ` @rG   loadzAioProcessProvider.load  s     !55%;;<NOO
>>-(4,AAL  !,/!,/..);;	
 	
 Ps   $BBA)Bc                   K   t        |      } | j                  |t        j                  t        j                  d d {   }|j	                          d {   \  }}|j
                  dk7  r&t        | j                  |j                  d            t        j                  j                  j                  |j                  d            }|j                  dd      }|dk7  rt        | j                  d| d	      	 |d
   |d   |j                  d      |j                  d      dS 7 7 # t        $ r}t        | j                  d|       d }~ww xY ww)N)stdoutstderrr   utf-8provider	error_msgVersionz<Version key not provided>   zUnsupported version 'z8' for credential process provider, supported versions: 1r   r   r   r   r   z"Missing required key in response: )r   _popen
subprocessPIPEcommunicate
returncoder   r2  decodebotocorecompatjsonloadsrT   KeyError)	rr   r/  process_listpr6  r7  parsedversiones	            rG   r.  z.AioProcessProvider._retrieve_credentials_using  sJ     **<=$++*//*//
 
  !}}.<<1*g0F  %%++FMM',BC**Y(DEa<*+G9 56 7 	$]3$%67N3%zz,7	 '
 /,  	*>qcB 	sH   >E D+ED-B&E *D/ *E-E/	E8EEE)	r   r   r   r   create_subprocess_execr   r4  r.  r   r   s   @rG   rt   rt     s    $+$B$B 7
(!rI   rt   c                       e Zd Zd Zy)rW   c                    K   | j                   }|j                          d {   }|sy t        j                  d|d          t        j                  || j                  |j                        }|S 7 Nw)Nz#Found credentials from IAM Role: %s	role_namer   r   )_role_fetcherretrieve_iam_role_credentialsr^   infor   r1  r2  )rr   fetcherr   r  s       rG   r4  z AioInstanceMetadataProvider.load!  su     $$ >>@@18K3H	
 *>>;;!?? ? 

  As    A3A1AA3Nr   r   r   r4  r   rI   rG   rW   rW      s    rI   rW   c                       e Zd Zd Zy)rU   c                 n  K   | j                   j                  | j                  d   d      }|rt        j	                  d       | j                         } |d      }|d   }|/t        |      }t        |d   |d   |d   ||| j                  	      S t        |d   |d   |d   | j                  
      S y w)Nr    z+Found credentials in environment variables.F)require_expiryr   r   r   )r   r   r   )
environrT   _mappingr^   rU  _create_credentials_fetcherr+   r   r2  r   )rr   r   rV  r   r   s        rG   r4  zAioEnvProvider.load3  s     \\%%dmmL&A2F
KKEF668G!7K%m4K&#K00--(");;  "L)L)G${{	  s   B3B5NrW  r   rI   rG   rU   rU   2  s    rI   rU   c                       e Zd Zd Zy)r[   c                 V  K   d| j                   v rt        j                  j                  | j                   d         }| j	                  |      }| j
                  |v rKt        j                  d       || j
                     }|| j                     }t        ||| j                        S y y w)NAWS_CREDENTIAL_FILEz)Found credentials in AWS_CREDENTIAL_FILE.r\  )_environospath
expanduser_parser
ACCESS_KEYr^   rU  
SECRET_KEYr   r2  )rr   	full_pathr  r   r   s        rG   r4  zAioOriginalEC2Provider.loadR  s      DMM1**34I LL+E%'GH"4??3
"4??3
%
4;;  ( s   B'B)NrW  r   rI   rG   r[   r[   Q  s    rI   r[   c                       e Zd Zd Zy)rz   c                   K   	 | j                  | j                        }| j                  |v r|| j                     }| j                  |v rtt
        j                  d| j                         | j                  || j                  | j                        \  }}| j                  |      }t        |||| j                        S y y # t        $ r Y y w xY ww)Nz0Found credentials in shared credentials file: %sr\  )_ini_parser_creds_filenamer   _profile_namerh  r^   rU  _extract_creds_from_mappingri  _get_session_tokenr   r2  )rr   available_credsr?   r   r   r   s         rG   r4  z AioSharedCredentialProvider.loade  s     	"..t/C/CDO 0$T%7%78F&(F(( *.)I)IDOOT__*&
J //7%
E$++  ) 1  		s(   CC  B!C 	C	CCCNrW  r   rI   rG   rz   rz   d  s    rI   rz   c                       e Zd Zd Zy)r   c                   K   	 | j                  | j                        }| j                  |d   v r|d   | j                     }| j                  |v rtt
        j                  d| j                         | j                  || j                  | j                        \  }}| j                  |      }t        |||| j                        S y y # t        $ r Y y w xY ww)Nprofilesz$Credentials found in config file: %sr\  )_config_parser_config_filenamer   ro  rh  r^   rU  rp  ri  rq  r   r2  )rr   rE   profile_configr   r   r   s         rG   r4  zAioConfigProvider.load{  s     	--d.C.CDK Z!88(4T5G5GHN.0:)) *.)I)I"DOOT__*&
J //?%
E$++  1 #  		s(   CC B'C	CCCCNrW  r   rI   rG   r   r   z  s    rI   r   c                       e Zd Zd Zy)r\   c                   K   | j                   | j                  v r| j                  | j                      g}n| j                  }|D ]  }	 | j                  |      }d|v s|d   }| j
                  |v s.t        j                  d|       | j                  || j
                  | j                        \  }}t        ||| j                        c S  y # t        $ r Y w xY ww)Nr   z)Found credentials in boto config file: %sr\  )BOTO_CONFIG_ENVrc  DEFAULT_CONFIG_FILENAMESrm  r   rh  r^   rU  rp  ri  r   r2  )rr   potential_locationsfilenamer?   r   r   r   s          rG   r4  zAioBotoProvider.load  s     4==0#'==1E1E#F"G"&"?"?+ 	H))(3 &$]3??k1KKCX .2-M-M#T__doo.*J
 *"Jt{{ 	 " s7   ACCCC2AC	CCCCNrW  r   rI   rG   r\   r\     s    rI   r\   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)rY   c                   K   | j                         | _        | j                  j                  di       }|j                  | j                  i       }| j	                  |      r#| j                  | j                         d {   S y 7 w)Nru  )_load_config_loaded_configrT   ro  _has_assume_role_config_vars_load_creds_via_assume_role)rr   ru  r4   s      rG   r4  zAioAssumeRoleProvider.load  su     "//1&&**:r:,,t1126,,W599$:L:LMMM 6Ms   A=B?B Bc                   K   | j                  |      }| j                  ||       d {   }i }|j                  d      }|||d<   |j                  d      }|||d<   |j                  d      }|||d<   |j                  d      }|||d<   t        | j                  ||d	   || j
                  | j                  
      }	|	j                  }
|t        |
      }
t        | j                  |
t              S 7 ͭw)Nrole_session_nameRoleSessionNameexternal_id
ExternalId
mfa_serialSerialNumberduration_secondsDurationSecondsr  )rK   source_credentialsr  r  mfa_prompterrA   )r   r   r   )_get_role_config_resolve_source_credentialsrT   r  r  	_prompterrA   r  r   r   r2  r(   )rr   rL   role_configr  r  r  r  r  r  rV  	refreshers              rG   r  z1AioAssumeRoleProvider._load_creds_via_assume_role  s$    ++L9#'#C#C$
 
 
'OO,?@(,=J()!oom4"'2J|$ __\2
!)3J~&&??+=>',<J()0//1 ,!**
 --	!3I>I
 1;;##
 	
I
s   'C9C7CC9c                    K   |j                  d      }|| j                  ||       d {   S |d   }| j                  j                  |       | j	                  |       d {   S 7 =7 w)Ncredential_sourcesource_profile)rT    _resolve_credentials_from_source_visited_profilesappend!_resolve_credentials_from_profile)rr   r  rL   r  r  s        rG   r  z1AioAssumeRoleProvider._resolve_source_credentials  sz     'OO,?@(>>!<   %%56%%n5;;NKKK Ls!   )A-A)8A-$A+%A-+A-c                   K   | j                   j                  di       }||   }| j                  |      r| j                  s| j	                  |      S | j                  |      s| j                  |      sU| j                  j                  |d      }t        |      }|j                          d {   }|d}t        ||z        |S | j                  |       d {   S 7 27 w)Nru  TrO   z.The source profile "%s" must have credentials.r;  )r  rT   _has_static_credentials_profile_provider_builder(_resolve_static_credentials_from_profiler  rQ   r`   r   r   r  )rr   rL   ru  r4   rh   profile_chainr   error_messages           rG   r  z7AioAssumeRoleProvider._resolve_credentials_from_profile  s     &&**:r:<( ((122@@II))
227; $ > > H H)!% !I ! 22CDM - > > @@K"D  )+l:  55lCCC A Ds$   B-C&/C"0-C&C$C&$C&c                     	 t        |d   |d   |j                  d            S # t        $ r%}t        | j                  t        |            d }~ww xY w)Nr  r  r  )r   r   r   )r:  cred_var)r   rT   rH  r   r2  str)rr   r4   rM  s      rG   r  z>AioAssumeRoleProvider._resolve_static_credentials_from_profile  s_    		!"#67"#:;kk"56 
  	)s1v 	s   "% 	A AAc                 |   K   | j                   j                  |       d {   }|t        |d|z        |S 7 w)NzBNo credentials found in credential_source referenced in profile %sr9  )_credential_sourcerr  r   )rr   r  rL   r   s       rG   r  z6AioAssumeRoleProvider._resolve_credentials_from_source  sX      !44GG
 
 **$&23  
s   <:<N)	r   r   r   r4  r  r  r  r  r  r   rI   rG   rY   rY     s$    N*
X	LD:
rI   rY   c                       e Zd Zd Zd Zy)r   c                 >   K   | j                          d {   S 7 wrD   )_assume_role_with_web_identityrq   s    rG   r4  z)AioAssumeRoleWithWebIdentityProvider.load&  s     88::::r  c                 T  K   | j                  d      }|sy | j                  |      }| j                  d      }|sd}t        |      i }| j                  d      }|||d<   t        | j                  |||| j
                        }t        | j                  |j                        S w)	Nweb_identity_token_filer  zThe provided profile or the current environment is configured to assume role with web identity but has no role ARN configured. Ensure that the profile has the role_arnconfiguration set or the AWS_ROLE_ARN env var is set.r  r  r  )rK   r  r  r  rA   rR  )	_get_config_token_loader_clsr   r  r  rA   r   r2  r  )rr   
token_pathtoken_loaderr  r;  r  r  rV  s           rG   r  zCAioAssumeRoleWithWebIdentityProvider._assume_role_with_web_identity)  s     %%&?@
--j9##J/H  %y99
 ,,-@A(,=J()?//&2!**
 1;;!33
 	
s   B&B(N)r   r   r   r4  r  r   rI   rG   r   r   %  s    ;"
rI   r   c                       e Zd Zd Zd Zy)rZ   c                    K   | j                  |      }t        |t              r|j                          d{   S |j	                          d{   S 7 7 w)a  Loads source credentials based on the provided configuration.

        :type source_name: str
        :param source_name: The value of credential_source in the config
            file. This is the canonical name of the credential provider.

        :rtype: Credentials
        N)_get_provider
isinstancer`   r   r4  )rr   source_namesources      rG   r  z4AioCanonicalNameCredentialSourcer.source_credentialsO  sM      ##K0f3400222[[]"" 3"s!   5AAAAAAc                     | j                  |      }|j                         dv r$| j                  d      }|||S t        ||g      S |t	        |      |S )a#  Return a credential provider by its canonical name.

        :type canonical_name: str
        :param canonical_name: The canonical name of the provider.

        :raises UnknownCredentialError: Raised if no
            credential provider by the provided name
            is found.
        )sharedconfigsharedcredentialszassume-role)name)_get_provider_by_canonical_namelower_get_provider_by_methodr`   r&   )rr   canonical_namer:  rf   s       rG   r  z/AioCanonicalNameCredentialSourcer._get_provider]  sv     77G !%JJ#'#?#?#N #/
 #//
 -.BH-MNN(n==rI   N)r   r   r   r  r  r   rI   rG   rZ   rZ   N  s    #$rI   rZ   c                   0     e Zd Z fdZd Zd Zd Z xZS )rV   c                 x    t        |   |i | t        | j                  t              rt               | _        y y rD   )r   r   r  _fetcherr   r1   r   s      rG   r   zAioContainerProvider.__init__  s5    $)&) dmm%=>79DM ?rI   c                    K   | j                   | j                  v s| j                  | j                  v r| j                          d {   S y 7 wrD   )ENV_VARrc  ENV_VAR_FULL_retrieve_or_failrq   s    rG   r4  zAioContainerProvider.load  sB     <<4==(D,=,=,N//111 -O1s   AAAAc           
      f  K   | j                         r3| j                  j                  | j                  | j                           }n| j                  | j
                     }| j                  |      } |        d {   }t        |d   |d   |d   | j                  t        |d         |      S 7 4w)Nr   r   r   r   )r   r   r   r   r   r   )
_provided_relative_urir  full_urlrc  r  r  _create_fetcherr   r2  r)   )rr   full_urirV  r  s       rG   r  z&AioContainerProvider._retrieve_or_fail  s     &&(}}--dmmDLL.IJH}}T%6%67H&&x0i(\*\*.;;(})=>!
 	
  s   A8B1:B/;5B1c                       fd}|S )Nc                  4  K   	 j                         } j                  j                  |        d {   }|d   |d   |d   |d	   d
S 7 # t        $ r=}t        j                  d|d       t        j                  t        |            d }~ww xY ww)N)headersz'Error retrieving container metadata: %sTr   r9  r   r   Tokenr   r   )	_build_headersr  retrieve_full_urir   r^   r_   r   r2  r  )r  r   rM  r  rr   s      rG   fetch_credsz9AioContainerProvider._create_fetcher.<locals>.fetch_creds  s     --/!%!@!@g "A "  '}5&'89!'*'5	  * =q4   /![[CF 	s7   B0A AA BA 	B8BBBr   )rr   r  r   r   r  s   ``   rG   r  z$AioContainerProvider._create_fetcher  s    	( rI   )r   r   r   r   r4  r  r  r   r   s   @rG   rV   rV     s    :2
 rI   rV   c                       e Zd Zd Zy)r`   c                    K   | j                   D ]@  }t        j                  d|j                         |j	                          d{   }|>|c S  y7 w)zw
        Goes through the credentials chain, returning the first ``Credentials``
        that could be loaded.
        zLooking for credentials via: %sN)rQ   r^   r_   r2  r4  )rr   r:  r  s      rG   r   z&AioCredentialResolver.load_credentials  sQ       	HLL:HOOL"--/)E 		  *s   AAAAAN)r   r   r   r   r   rI   rG   r`   r`     s    rI   r`   c                   @     e Zd ZdZ	 	 	 	 	 d fd	Zd Zd Zd Z xZS )AioSSOCredentialFetcherz%Y-%m-%dT%H:%M:%SZc                     || _         || _        || _        || _        || _        || _        |	| _        |
| _        t        | %  ||       y rD   )
r  _sso_region
_role_name_account_id
_start_url_token_loader_token_provider_sso_session_namer   r   )rr   	start_url
sso_regionrQ  
account_idrK   r  rA   r  r   sso_session_namer   s              rG   r   z AioSSOCredentialFetcher.__init__  sS      .%#%#)-!1 56rI   c                 ,   | j                   | j                  d}| j                  r| j                  |d<   n| j                  |d<   t	        j
                  |dd      }t        |j                  d            j                         }| j                  |      S )N)roleName	accountIdsessionNamestartUrlT),:)	sort_keys
separatorsr8  )
r  r  r  r  rF  dumpsr   encode	hexdigest_make_file_safe)rr   r   argument_hashs      rG   _create_cache_keyz)AioSSOCredentialFetcher._create_cache_key  s    ))
 !!"&"8"8D#Dzz$$:FT[[12<<>##M22rI   c                     |dz  }t         j                   j                  |t                     }|j                  | j                        S )Ng     @@)datetimefromtimestampr-   strftime_UTC_DATE_FORMAT)rr   timestamp_mstimestamp_seconds	timestamps       rG   _parse_timestampz(AioSSOCredentialFetcher._parse_timestamp  s?    (61%%334EuwO	!!$"7"788rI   c           	        K   t        t        | j                        }| j                  d|      4 d{   }| j                  r=| j                  j                         }|j                          d{   j                  }n| j                  | j                        d   }| j                  | j                  |d}	  |j                  di | d{   }|d   }d|d   |d	   |d
   | j!                  |d         dd}|cddd      d{    S 7 7 7 E# |j                  j                  $ r t               w xY w7 2# 1 d{  7  sw Y   yxY ww)z4Get credentials by calling SSO get role credentials.)r!  rB   ssor"  NaccessToken)r  r  r  roleCredentialsaccessKeyIdsecretAccessKeysessionTokenr  )r   r   r   r   )ProviderTyper   r   )r   r   r  r  r  
load_tokenget_frozen_tokenr   r  r  r  r  get_role_credentials
exceptionsUnauthorizedExceptionr%   r  )rr   r?   r   initial_token_datar   r   r   r   s           rG   r   z(AioSSOCredentialFetcher._get_credentials  sl    &((
 ''f'= 	 	##%)%9%9%D%D%F"1BBDDKK**4??;MJ !OO!--$F
2!<!<!<!Fv!FF ##45K !&#.}#='23D'E$/$?"&"7"7#L1#	 
K ;	 	 	 E G$$:: 2/112	 	 	 	s   3EDE:E3D4AE<DDD+EEE EED$D==E EEE	EE)NNNNN)	r   r   r   r  r   r  r  r   r   r   s   @rG   r  r    s.    + "7.39#rI   r  c                       e Zd Zd Zy)r   c                 :  K   | j                         }|sy |d   |d   |d   |d   | j                  t        | j                        | j                  d}d|v r|d   |d<   | j
                  |d	<   t        di |}t        | j                  |j                  
      S w)Nsso_start_urlr  sso_role_namesso_account_id)rA   )r  r  rQ  r  rK   r  rA   sso_sessionr  r   rR  r   )
_load_sso_configr  r$   _token_cacherA   r  r  r   r2  r  )rr   
sso_configfetcher_kwargssso_fetchers       rG   r4  zAioSSOProvider.load#  s     **,
 $O4$\2#O4$%56"22*1B1BCZZ
 J&1;M1JN-./3/C/CN+,-??0;;%77
 	
s   BBNrW  r   rI   rG   r   r   "  s    
rI   r   )NN)_r   r  rF  loggingrd  r?  copyr   hashlibr   botocore.compatrD  r   r   botocore.configr   botocore.credentialsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   dateutil.tzr-   aiobotocore._helpersr.   aiobotocore.configr/   aiobotocore.tokensr0   aiobotocore.utilsr1   r2   	getLoggerr   r^   rk   rX   r   r   r   create_aio_mfa_serial_refresherr   r   r   r   r
  r  r  rt   rW   rU   r[   rz   r   r\   rY   r   rZ   rV   r`   r  r   r   rI   rG   <module>r      s       	      . "& & & & & & & & & &N  2 ( 2
 
		8	$[|,
 6 ,
^-
"+& #> 
[ 
j( 6 j(Z2(A 2$
!8 
<	#%?	
!C
.%"&%"P9 9x": $[ >0 &": , 0l 4v. vr&
+L &
R3(F 3l1, 1h. ,Q8 Qh
[ 
rI   