Ë
    £ªðiô-  ã                   óN  — 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(y)é    N)ÚdatetimeÚ	timedelta)Ú
NamedTupleÚOptional)Útzutc)ÚUNSIGNED)Útotal_seconds)ÚConfig)ÚClientErrorÚInvalidConfigErrorÚTokenRetrievalError)ÚCachedPropertyÚJSONFileCacheÚSSOTokenLoaderÚcreate_nested_clientÚget_token_from_environmentc                  ó<   — t        j                  t        «       «      S ©N)r   Únowr   © ó    úf/var/www/acinvestment.org/public_html/aci/backend/venv/lib/python3.12/site-packages/botocore/tokens.pyÚ_utc_nowr   *   s   € Ü�<‰<œ›Ó Ð r   c                 óF   — t        | «      t        | «      g}t        |¬«      S )N)Ú	providers)ÚScopedEnvTokenProviderÚSSOTokenProviderÚTokenProviderChain)Úsessionr   s     r   Úcreate_token_resolverr    .   s&   € ä˜wÓ'Ü˜Ó!ð€Iô ¨	Ô2Ð2r   c                 óH   — t        | t        «      r| j                  d«      S | S )Nz%Y-%m-%dT%H:%M:%SZ)Ú
isinstancer   Ústrftime©Úobjs    r   Ú_serialize_utc_timestampr&   6   s!   € Ü�#”xÔ Ø�|‰|Ð0Ó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e   ed<   y)ÚFrozenAuthTokenÚtokenNÚ
expiration)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r/   r   r   r   r   r   r-   r-   @   s   … ØƒJØ%)€J�˜Ñ"Ô)r   r-   c                   ó@   — e Zd ZdZdZdZefd„Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zy
)ÚDeferredRefreshableTokené„  iX  é<   c                 ó|   — || _         || _        || _        t        j                  «       | _        d | _        d | _        y 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   s:   € Ø)ˆÔØ+ˆÔØˆŒô 'Ÿ^™^Ó-ˆÔØ!ˆÔØ!ˆÕr   c                 ó:   — | j                  «        | j                  S r   )Ú_refreshr@   ©rB   s    r   Úget_frozen_tokenz)DeferredRefreshableToken.get_frozen_tokenX   s   € Ø�‰ŒØ×!Ñ!Ð!r   c                 ó   — | j                  «       }|sy |dk(  }| j                  j                  |«      r,	 | j                  «        | j                  j	                  «        y y # | j                  j	                  «        w xY w)NÚ	mandatory)Ú_should_refreshr?   ÚacquireÚ_protected_refreshÚrelease)rB   Úrefresh_typeÚblock_for_refreshs      r   rG   z!DeferredRefreshableToken._refresh\   sv   € à×+Ñ+Ó-ˆÙØð )¨KÑ7ÐØ×Ñ×%Ñ%Ð&7Ô8ð-Ø×'Ñ'Ô)à×"Ñ"×*Ñ*Õ,ð	 9øð ×"Ñ"×*Ñ*Õ,ús   µA! Á!A=c                 óZ  — | j                  «       }|sy 	 | j                  «       }|t        | j                  ¬«      z   | _        | j                  «       | _        | j                  «       rt        | j                  d¬«      ‚y # t        $ r! t        j                  d|d¬«       |dk(  r‚ Y ŒQw xY w)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»   € ð ×+Ñ+Ó-ˆÙØð	Ø×$Ñ$Ó&ˆCØ!$¤y¸×9NÑ9NÔ'OÑ!OˆDÔØ!%×!4Ñ!4Ó!6ˆDÔð ×ÑÔä%ØŸ™Ø@ôð ð øô ò 	Ü�N‰NØGØØð ô ð
 ˜{Ò*àñ +ð	ús   •AB  Â 'B*Â)B*c                 óŠ   — | j                   €y| j                   j                  }t        || j                  «       z
  «      }|dk  S )NFr   )r@   r/   r	   r:   )rB   r/   Ú	remainings      r   r]   z$DeferredRefreshableToken._is_expired†   sD   € Ø×ÑÐ%Øà×'Ñ'×2Ñ2ˆ
Ü! *¨t×/AÑ/AÓ/CÑ"CÓDˆ	Ø˜A‰~Ðr   c                 óì   — | j                   €y| j                   j                  }|€y | j                  «       }|| j                  k  ry t	        ||z
  «      }|| j
                  k  ry|| j                  k  ryy )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Ñ2ˆ
ØÐàà× Ñ Ó"ˆØ�×#Ñ#Ò#Øä! *¨sÑ"2Ó3ˆ	à�t×6Ñ6Ò6ØØ˜×7Ñ7Ò7Øàr   N)r0   r1   r2   rc   rb   rY   r   rE   rI   rG   rN   r]   rL   r   r   r   r6   r6   E   s7   „ ð !(Ðà!(ÐàÐà;Có "ò"ò-òò8ór   r6   c                   ó   — e Zd Zdd„Zd„ Zy)r   Nc                 ó   — |€g }|| _         y r   )Ú
_providers)rB   r   s     r   rE   zTokenProviderChain.__init__§   s   € ØÐØˆIØ#ˆ�r   c                 óV   — | j                   D ]  } |j                  di |¤Ž}|€Œ|c S  y )Nr   )rf   Ú
load_token)rB   ÚkwargsrW   r.   s       r   rh   zTokenProviderChain.load_token¬   s:   € ØŸ™ò 	ˆHØ'�H×'Ñ'Ñ1¨&Ñ1ˆEØÑ Ø’ð	ð r   r   )r0   r1   r2   rE   rh   r   r   r   r   r   ¦   s   „ ó$ó
r   r   c                   óÞ   — e Zd ZdZdZej                  j                  ej                  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y	)r   Ússor7   ú~z.awsÚcacheÚsso_start_urlÚ
sso_regionÚrefresh_tokenNc                 óú   — || _         |€!| j                  | j                  t        ¬«      }|| _        || _        t        | j
                  ¬«      | _        |xs | j                   j                  d«      xs d| _	        y )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                  }|j                  di «      }|j                  di «      }|j                  | j                  i «      }d|vry |d   }|j                  |d «      }|sd| j                  › d|› d�}t	        |¬«      ‚g }| j
                  D ]  }	|	|vsŒ|j                  |	«       Œ |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Ó   s3  € ØŸ™×1Ñ1ˆØ ×$Ñ$ Z°Ó4ˆØ$×(Ñ(¨¸Ó<ˆØ!Ÿ™ d×&8Ñ&8¸"Ó=ˆà Ñ.Øà)¨-Ñ8ÐØ!×%Ñ%Ð&6¸Ó=ˆ
áà × 2Ñ 2Ð3ð 4+Ø+;Ð*<ð =0ð1ð ô
 %¨yÔ9Ð9àˆØ×(Ñ(ò 	,ˆCØ˜*Ò$Ø×&Ñ& sÕ+ð	,ñ à × 2Ñ 2Ð3ð 4Nà"Ð# 1ð&ð ô
 %¨yÔ9Ð9ð -Ø$ \Ñ2Ø'¨Ñ8ñ
ð 	
r   c                 ó"   — | j                  «       S r   )r�   rH   s    r   Ú_sso_configzSSOTokenProvider._sso_configú   s   € à×$Ñ$Ó&Ð&r   c                 ón   — 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þ   s2   € äØ×(Ñ(¨Ñ6Ü&ô
ˆô $ D§M¡M°:ÀfÔMÐMr   c                 óL  — | j                   j                  | j                  |d   |d   |d   ¬«      }t        |d   ¬«      }| j                  d   | j                  d   |d	   | j                  «       |z   |d   |d   |d
   dœ}d|v r|d   |d<   t        j                  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°Ñ(@ˆI�nÑ%Ü�‰Ð1Ô2ØÐr   c                 ó’  — d}|D �cg c]	  }||vsŒ|‘Œ }}|rd|› �}t         j                  |«       y t        j                  j	                  |d   «      }t        || j                  «       z
  «      dk  rt         j                  d|«       y 	 | j                  |«      S c c}w # t        $ r t         j                  dd¬«       Y y w xY w)	N)r˜   r–   r—   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ÚkÚmissing_keysÚmsgÚexpirys          r   Ú_refresh_access_tokenz&SSOTokenProvider._refresh_access_token  sÆ   € ð
ˆð $(Ö:˜a¨1°Eª>šÐ:ˆÐ:ÙØ?À¸~ÐNˆCÜ�K‰K˜ÔØä—‘×&Ñ& uÐ-DÑ'EÓFˆÜ˜ $§)¡)£+Ñ-Ó.°!Ò3Ü�K‰KÐ>ÀÔGØð	Ø×-Ñ-¨eÓ4Ð4ùò ;øô ò 	Ü�N‰NÐ=ÈˆNÔMÙð	ús   ‡	B‘BÂB# Â# CÃCc                 óæ  — | j                   d   }| j                   d   }t        j                  d|«       | j                  ||¬«      }t        j
                  j                  |d   «      }t        j                  d|«       t        || j                  «       z
  «      }|| j                  k  r8| j                  |«      }|�%|}|d   }| j                  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Ø×'Ñ'¨	ÀÐ'ÓMˆ
Ü—_‘_×*Ñ*¨:°kÑ+BÓCˆ
Ü�‰Ð5°zÔBä! *¨t¯y©y«{Ñ":Ó;ˆ	Ø�t×+Ñ+Ò+Ø!×7Ñ7¸
ÓCˆNØÐ)Ø+�
Ø'¨Ñ4�
Ø×"Ñ"×-Ñ-Ø˜z¸ð .ô ô Ø�}Ñ%°*ô
ð 	
r   c                 ót   — | j                   €y t        | j                  | j                  | j                  ¬«      S )N)rD   )r�   r6   ÚMETHODr¸   rw   )rB   ri   s     r   rh   zSSOTokenProvider.load_tokenK  s1   € Ø×ÑÐ#Øä'Ø�K‰K˜Ÿ™°t·y±yô
ð 	
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™7×-Ñ-Ø
�‰�‰�S˜& %¨Ó1óÐð 	ØðÐð "€KØ%Ðð "°Àtó
ò$%
ðN ñ'ó ð'ð ñNó ðNòò.ò0
ó,
r   r   c                   ó"   — e Zd ZdZdZdd„Zd„ Zy)r   zn
    Token provider that loads tokens from environment variables scoped to
    a specific `signing_name`.
    ÚenvNc                 óD   — || _         |€t        j                  }|| _        y r   )rt   r»   Úenviron)rB   r   rÂ   s      r   rE   zScopedEnvTokenProvider.__init__\  s   € ØˆŒØˆ?Ü—j‘jˆGØˆ�r   c                 óœ   — |j                  d«      }|€y t        || j                  «      }|� t        j	                  d«       t        |«      S y )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  sL   € Ø—z‘z .Ó1ˆØÐØä*¨<¸¿¹ÓFˆàÐÜ�K‰KÐ?Ô@Ü" 5Ó)Ð)ð r   r   )r0   r1   r2   Ú__doc__rº   rE   rh   r   r   r   r   r   T  s   „ ñð
 €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òò=ô*�jô *÷
^ñ ^÷Bñ ÷]
ñ ]
÷@*ò *r   