o
    ȷeW                     @   s  d 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 dd	lmZ dd
lmZ dd
lmZ ddlmZ dZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&d Z'd!Z(d"Z)d#Z*e+ Z,G d$d% d%e-Z.G d&d' d'e+Z/d(d) Z0dS )*zC
This class encapsulates the provider-specific header differences.
    N)six)datetime)config)
expanduser)Config)InvalidInstanceMetadataError)ACL)CannedACLStrings)Policyheader_prefixmetadata_prefixzx-amz-zx-goog-z
acl-headerzauth-headerzcopy-source-headerzcopy-source-version-id-headerzcopy-source-range-headerzdelete-marker-headerzdate-headerzmetadata-directive-headerzresumable-upload-headerzsecurity-token-headerstorage-classz
mfa-headerzserver-side-encryption-headerzversion-id-headerzrestore-headerStorageCopyErrorStorageCreateErrorStorageDataErrorStoragePermissionsErrorStorageResponseErrorc                   @   s   e Zd ZdS )ProfileNotFoundErrorN)__name__
__module____qualname__ r   r   D/var/www/ideatree/venv/lib/python3.10/site-packages/boto/provider.pyr   J   s    r   c                   @   s  e Zd ZdddZeedZeedZ	dddZ
dddZdddZi eeeed eed	 ed
eed eed eed eed eed eed edeed eed eed eed eed eed i eeeed eed	 edeed eed edeed eed eed eed eed edeed eed ededdZ e!e"j#j$e%e"j#j&e'e"j#j(e)e"j#j*e+e"j#j,ie!e"j#j-e%e"j#j.e'e"j#j/e)e"j#j0e+e"j#j1idZ2		d:ddZ3dd Z4dd Z5e6e4e5Z7d d! Z8d"d# Z9e6e8e9Z:d$d% Z;d&d' Z<e6e;e<Z=d(d) Z>		d:d*d+Z?d,d- Z@d.d/ ZAd0d1 ZBd2d3 ZCd4d5 ZDd6d7 ZEd8d9 ZFdS );Provider)aws_access_key_idaws_secret_access_keyaws_security_tokenaws_profile)gs_access_key_idgs_secret_access_keyNN)awsgoogles3gsFTzmeta-aclAWSzcopy-sourcezcopy-source-version-idzcopy-source-rangedatezdelete-markerzmetadata-directiveNzsecurity-tokenzserver-side-encryptionz
version-idr   mfarestoreGOOG1	resumablec           
      C   s4  d | _ d | _d | _|| _|| _|| _|| _|| _| j| j | _	| j
| j | _d | _tjtdd| d}tdd| _tj|rG| j| | |||| |   |   d| j| j  }td|rltd|| _ d| j| j  }td|rtd|| _d	| j| j  }	td|	rtd|	| _d S d S )
N~.credentialsF)do_loadz%s_hostCredentialsz%s_portz%s_host_header)hostporthost_header
access_key
secret_keysecurity_tokenprofile_namenameAclClassMap	acl_classCannedAclsMapcanned_acls_credential_expiry_timeospathjoinr   r   shared_credentialsisfileload_from_pathget_credentialsconfigure_headersconfigure_errors
HostKeyMapr   
has_optiongetgetint)
selfr7   r3   r4   r5   r6   shared_pathhost_opt_nameport_opt_namehost_header_opt_namer   r   r   __init__   s8   zProvider.__init__c                 C      |   r|   | jS N)_credentials_need_refresh#_populate_keys_from_metadata_server_access_keyrJ   r   r   r   get_access_key      zProvider.get_access_keyc                 C   
   || _ d S rQ   )rT   rJ   valuer   r   r   set_access_key      
zProvider.set_access_keyc                 C   rP   rQ   )rR   rS   _secret_keyrU   r   r   r   get_secret_key   rW   zProvider.get_secret_keyc                 C   rX   rQ   )r]   rY   r   r   r   set_secret_key   r\   zProvider.set_secret_keyc                 C   rP   rQ   )rR   rS   _security_tokenrU   r   r   r   get_security_token   rW   zProvider.get_security_tokenc                 C   rX   rQ   )r`   rY   r   r   r   set_security_token   r\   zProvider.set_security_tokenc                 C   sZ   | j d u rdS | j t  }|j|j|jd d  d  d }|dk r+tjd dS dS )NF   i  i@B i,  z!Credentials need to be refreshed.T)	r<   r   utcnowmicrosecondssecondsdaysbotologdebug)rJ   deltaseconds_leftr   r   r   rR      s   
z"Provider._credentials_need_refreshc                 C   s  | j | j \}}}}|d u r |d ur | tjv r tj|  }| j}	|d ur1|| _tj	d nw| tjv rGtj|  | _tj	d na|d ur|	
||ra|	||| _tj	d|  nGt
d| |r{td| || _tj	d|  n-td| |	
d|r|	d|| _tj	d nt
d	|rtd	|| _tj	d
 |d ur|| _tj	d n| tjv rtj|  | _tj	d n|d ur|	
||r|	||| _tj	d|  n|t
d| |rtd| || _tj	d|  natd| |	
d|r|	d|| _tj	d nFt
d	|r2td	|| _tj	d n1t
d	drctd	d}
zdd l}W n tyT   tjd  w ||
| j| _tj	d |d urr|| _tj	d n{|d ur|d u r|d u r| tjv rtj|  | _tj	d nU|	
|pd|r|	|pd|| _tj	d n:|d urt
d| |rtj	d td| || _tj	d|  nt
d	|rtd	|| _tj	d | jd u s| jd u r| j| j r|   | | j| _d S )Nz$Using access key provided by client.z/Using access key found in environment variable.z@Using access key found in shared credential file for profile %s.z
profile %sz2Using access key found in config file: profile %s.zProfile "%s" not found!defaultz1Using access key found in shared credential file.r/   z&Using access key found in config file.z$Using secret key provided by client.z/Using secret key found in environment variable.z@Using secret key found in shared credential file for profile %s.z2Using secret key found in config file: profile %s.z1Using secret key found in shared credential file.z&Using secret key found in config file.keyringr   zZThe keyring module could not be imported. For keyring support, install the keyring module.z"Using secret key found in keyring.z(Using security token provided by client.z3Using security token found in environment variable.z5Using security token found in shared credential file.zconfig has optionz6Using security token found in config file: profile %s.z*Using security token found in config file.)CredentialMapr7   upperr=   environr@   r3   rh   ri   rj   rG   rH   r   r   r4   rn   ImportErrorerrorget_passwordr5   rT   r]   MetadataServiceSupportrS   _convert_key_to_str)rJ   r3   r4   r5   r6   access_key_namesecret_key_namesecurity_token_nameprofile_name_namesharedkeyring_namern   r   r   r   rC   	  s   










zProvider.get_credentialsc                 C   s   t jd ddlm} tddd}tddd}|||d	d
}|rQ| |}|d | _	|d | _
|d | _|d }t|d| _t jd| jt  | d S d S )Nz,Retrieving credentials from metadata server.r   )get_instance_metadataBotometadata_service_timeoutg      ?metadata_service_num_attempts   z#meta-data/iam/security-credentials/)timeoutnum_retriesdata      z%Y-%m-%dT%H:%M:%SZz.Retrieved credentials will expire in %s at: %s)rh   ri   rj   
boto.utilsr}   r   getfloatrI   _get_credentials_from_metadatarT   r]   r`   r   strptimer<   now)rJ   r}   r   attemptsmetadatacreds
expires_atr   r   r   rS   |  s,   



z,Provider._populate_keys_from_metadata_serverc           	   
   C   s   t | d }t|ts|dkrd}nd| }td| z|d }| |d }|d }|d	 }W n tyE } ztd
| d }~ww ||||fS )Nr    zan empty stringztype: %sz7Expected a dict type of credentials instead received %sAccessKeyIdSecretAccessKeyToken
Expirationz;Credentials from instance metadata missing required key: %s)listvalues
isinstancedictr   rv   KeyError)	rJ   r   r   msgr3   r4   r5   r   er   r   r   r     s,   
z'Provider._get_credentials_from_metadatac                 C   s   t |tjr
t|S |S rQ   )r   r   	text_typestr)rJ   keyr   r   r   rv     s   zProvider._convert_key_to_strc                 C   s   | j | j }|t | _|t | _|t | _|t | _	|t
 | _|t | _|t | _|t | _|t | _|t | _|t | _|t | _|t | _|t | _|t | _|t  | _!|t" | _#d S rQ   )$HeaderInfoMapr7   METADATA_PREFIX_KEYr   HEADER_PREFIX_KEYr   ACL_HEADER_KEY
acl_headerAUTH_HEADER_KEYauth_headerCOPY_SOURCE_HEADER_KEYcopy_source_header!COPY_SOURCE_VERSION_ID_HEADER_KEYcopy_source_version_idCOPY_SOURCE_RANGE_HEADER_KEYcopy_source_range_headerDATE_HEADER_KEYdate_headerDELETE_MARKER_HEADER_KEYdelete_markerMETADATA_DIRECTIVE_HEADER_KEYmetadata_directive_headerSECURITY_TOKEN_HEADER_KEYsecurity_token_headerRESUMABLE_UPLOAD_HEADER_KEYresumable_upload_headerSERVER_SIDE_ENCRYPTION_KEYserver_side_encryption_headerSTORAGE_CLASS_HEADER_KEYstorage_class_headerVERSION_ID_HEADER_KEY
version_idMFA_HEADER_KEY
mfa_headerRESTORE_HEADER_KEYrestore_header)rJ   header_info_mapr   r   r   rD     s0   











zProvider.configure_headersc                 C   sB   | j | j }|t | _|t | _|t | _|t | _	|t
 | _d S rQ   )ErrorMapr7   STORAGE_COPY_ERRORstorage_copy_errorSTORAGE_CREATE_ERRORstorage_create_errorSTORAGE_DATA_ERRORstorage_data_errorSTORAGE_PERMISSIONS_ERRORstorage_permissions_errorSTORAGE_RESPONSE_ERRORstorage_response_error)rJ   	error_mapr   r   r   rE     s   



zProvider.configure_errorsc                 C      | j | j S rQ   )rF   r7   rU   r   r   r   get_provider_name     zProvider.get_provider_namec                 C   r   rQ   )ChunkedTransferSupportr7   rU   r   r   r   supports_chunked_transfer  r   z"Provider.supports_chunked_transfer)NNNN)Gr   r   r   ro   r
   r   r8   CannedS3ACLStringsCannedGSACLStringsr:   rF   r   ru   r   AWS_HEADER_PREFIXr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   GOOG_HEADER_PREFIXr   r   rh   	exceptionS3CopyErrorr   S3CreateErrorr   S3DataErrorr   S3PermissionsErrorr   S3ResponseErrorGSCopyErrorGSCreateErrorGSDataErrorGSPermissionsErrorGSResponseErrorr   rO   rV   r[   propertyr3   r^   r_   r4   ra   rb   r5   rR   rC   rS   r   rv   rD   rE   r   r   r   r   r   r   r   N   s   	
	
3
#



sr   c                   C   s   t dS )Nr    )r   r   r   r   r   get_default  s   r   )1__doc__r=   boto.compatr   r   rh   r   r   boto.pyami.configr   boto.exceptionr   boto.gs.aclr   r	   r   boto.s3.aclr   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   objectNO_CREDENTIALS_PROVIDED
ValueErrorr   r   r   r   r   r   r   <module>   sX      