o ckF[W@sdZddlZddlmZddlmZddlZddlmZddlmZddlm Z ddl m Z dd l m Z dd l mZdd lmZdd lmZd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&d Z'd!Z(d"Z)d#Z*e+Z,Gd$d%d%e-Z.Gd&d'd'e+Z/d(d)Z0dS)*zC This class encapsulates the provider-specific header differences. N)six)datetime)config) expanduser)Config)InvalidInstanceMetadataError)ACL)CannedACLStrings)Policy header_prefixmetadata_prefixzx-amz-zx-goog-z acl-headerz auth-headerzcopy-source-headerzcopy-source-version-id-headerzcopy-source-range-headerzdelete-marker-headerz date-headerzmetadata-directive-headerzresumable-upload-headerzsecurity-token-header storage-classz mfa-headerzserver-side-encryption-headerzversion-id-headerzrestore-headerStorageCopyErrorStorageCreateErrorStorageDataErrorStoragePermissionsErrorStorageResponseErrorc@s eZdZdS)ProfileNotFoundErrorN)__name__ __module__ __qualname__rr//usr/lib/python3/dist-packages/boto/provider.pyrJsrc @seZdZdddZeedZeedZ dddZ dddZ dddZ ie eeedeed ed eed eed eed eedeedeededeedeedeedeedeedeedie eeedeed edeed eed edeedeedeedeedeededeedeedededdZ e!e"j#j$e%e"j#j&e'e"j#j(e)e"j#j*e+e"j#j,ie!e"j#j-e%e"j#j.e'e"j#j/e)e"j#j0e+e"j#j1idZ2  d:ddZ3ddZ4ddZ5e6e4e5Z7d d!Z8d"d#Z9e6e8e9Z:d$d%Z;d&d'Z  d:d*d+Z?d,d-Z@d.d/ZAd0d1ZBd2d3ZCd4d5ZDd6d7ZEd8d9ZFdS);Provider)aws_access_key_idaws_secret_access_keyaws_security_token aws_profile)gs_access_key_idgs_secret_access_keyNN)awsgoogles3gsFTzmeta-aclAWSz copy-sourcezcopy-source-version-idzcopy-source-rangedatez delete-markerzmetadata-directiveNzsecurity-tokenzserver-side-encryptionz version-idr mfarestoreGOOG1 resumablec Cs4d|_d|_d|_||_||_||_||_||_|j|j|_ |j |j|_ d|_ t jtdd|d}tdd|_t j|rG|j||||||||d|j|j}td|rltd||_d|j|j}td|rtd||_d |j|j} td| rtd| |_dSdS) N~. credentialsF)do_loadz%s_host Credentialsz%s_portz%s_host_header)hostport host_header access_key secret_keysecurity_token profile_namename AclClassMap acl_class CannedAclsMap canned_acls_credential_expiry_timeospathjoinrrshared_credentialsisfileload_from_pathget_credentialsconfigure_headersconfigure_errors HostKeyMapr has_optiongetgetint) selfr7r3r4r5r6 shared_path host_opt_name port_opt_namehost_header_opt_namerrr__init__s8      zProvider.__init__cC|r||jSN)_credentials_need_refresh#_populate_keys_from_metadata_server _access_keyrJrrrget_access_keyzProvider.get_access_keycC ||_dSrQ)rTrJvaluerrrset_access_key zProvider.set_access_keycCrPrQ)rRrS _secret_keyrUrrrget_secret_keyrWzProvider.get_secret_keycCrXrQ)r]rYrrrset_secret_keyr\zProvider.set_secret_keycCrPrQ)rRrS_security_tokenrUrrrget_security_tokenrWzProvider.get_security_tokencCrXrQ)r`rYrrrset_security_tokenr\zProvider.set_security_tokencCsZ|jdurdS|jt}|j|j|jdddd}|dkr+tjddSdS)NFii@Bi,z!Credentials need to be refreshed.T) r<rutcnow microsecondssecondsdaysbotologdebug)rJdelta seconds_leftrrrrRs  z"Provider._credentials_need_refreshc Cs|j|j\}}}}|dur |dur |tjvr tj|}|j} |dur1||_tj dnw|tjvrGtj||_tj dna|dur| ||ra| |||_tj d|nGt d||r{t d|||_tj d|n-t d|| d|r| d||_tj dnt d |rt d ||_tj d |dur||_tj d n|tjvrtj||_tj d n|dur| ||r| |||_tj d |n|t d||rt d|||_tj d|nat d|| d|r| d||_tj dnFt d |r2t d ||_tj dn1t d drct d d} zddl} WntyTtjdw| | |j|_tj d|durr||_tj dn{|dur|dur|dur|tjvrtj||_tj dnU| |pd|r| |pd||_tj dn:|durt d||rtj dt d|||_tj d|nt d |rt d ||_tj d|jdus|jdur|j|jr|||j|_dS)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.zProfile "%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.keyringrzZThe 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.zconfig has optionz6Using security token found in config file: profile %s.z*Using security token found in config file.) CredentialMapr7upperr=environr@r3rhrirjrGrHrrr4rn ImportErrorerror get_passwordr5rTr]MetadataServiceSupportrS_convert_key_to_str) rJr3r4r5r6access_key_namesecret_key_namesecurity_token_nameprofile_name_nameshared keyring_namernrrrrC s                        zProvider.get_credentialscCstjdddlm}tddd}tddd}|||d d }|rQ||}|d|_ |d|_ |d |_ |d }t |d |_tjd|jt |dSdS)Nz,Retrieving credentials from metadata server.r)get_instance_metadataBotometadata_service_timeoutg?metadata_service_num_attemptsz#meta-data/iam/security-credentials/)timeout num_retriesdataz%Y-%m-%dT%H:%M:%SZz.Retrieved credentials will expire in %s at: %s)rhrirj boto.utilsr}rgetfloatrI_get_credentials_from_metadatarTr]r`rstrptimer<now)rJr}rattemptsmetadatacreds expires_atrrrrS|s,       z,Provider._populate_keys_from_metadata_serverc Cst|d}t|ts|dkrd}nd|}td|z|d}||d}|d}|d }WntyE}ztd |d}~ww||||fS) Nrzan empty stringztype: %sz7Expected a dict type of credentials instead received %s AccessKeyIdSecretAccessKeyToken Expirationz;Credentials from instance metadata missing required key: %s)listvalues isinstancedictrrvKeyError) rJrrmsgr3r4r5rerrrrs,   z'Provider._get_credentials_from_metadatacCst|tjr t|S|SrQ)rr text_typestr)rJkeyrrrrvs zProvider._convert_key_to_strcCs|j|j}|t|_|t|_|t|_|t|_ |t |_ |t |_ |t|_|t|_|t|_|t|_|t|_|t|_|t|_|t|_|t|_|t |_!|t"|_#dSrQ)$ HeaderInfoMapr7METADATA_PREFIX_KEYr HEADER_PREFIX_KEYr ACL_HEADER_KEY acl_headerAUTH_HEADER_KEY auth_headerCOPY_SOURCE_HEADER_KEYcopy_source_header!COPY_SOURCE_VERSION_ID_HEADER_KEYcopy_source_version_idCOPY_SOURCE_RANGE_HEADER_KEYcopy_source_range_headerDATE_HEADER_KEY date_headerDELETE_MARKER_HEADER_KEY delete_markerMETADATA_DIRECTIVE_HEADER_KEYmetadata_directive_headerSECURITY_TOKEN_HEADER_KEYsecurity_token_headerRESUMABLE_UPLOAD_HEADER_KEYresumable_upload_headerSERVER_SIDE_ENCRYPTION_KEYserver_side_encryption_headerSTORAGE_CLASS_HEADER_KEYstorage_class_headerVERSION_ID_HEADER_KEY version_idMFA_HEADER_KEY mfa_headerRESTORE_HEADER_KEYrestore_header)rJheader_info_maprrrrDs0             zProvider.configure_headerscCsB|j|j}|t|_|t|_|t|_|t|_ |t |_ dSrQ) ErrorMapr7STORAGE_COPY_ERRORstorage_copy_errorSTORAGE_CREATE_ERRORstorage_create_errorSTORAGE_DATA_ERRORstorage_data_errorSTORAGE_PERMISSIONS_ERRORstorage_permissions_errorSTORAGE_RESPONSE_ERRORstorage_response_error)rJ error_maprrrrEs     zProvider.configure_errorscC |j|jSrQ)rFr7rUrrrget_provider_name zProvider.get_provider_namecCrrQ)ChunkedTransferSupportr7rUrrrsupports_chunked_transferrz"Provider.supports_chunked_transfer)NNNN)Grrrror rr8CannedS3ACLStringsCannedGSACLStringsr:rFrrurAWS_HEADER_PREFIXrrrrrrrrrrrrrrrrGOOG_HEADER_PREFIXrrrh exception S3CopyErrorr S3CreateErrorr S3DataErrorrS3PermissionsErrorrS3ResponseError GSCopyError GSCreateError GSDataErrorGSPermissionsErrorGSResponseErrorrrOrVr[propertyr3r^r_r4rarbr5rRrCrSrrvrDrErrrrrrrNs        3 #    s rcCstdS)Nr )rrrrr get_defaultsr)1__doc__r= boto.compatrrrhrrboto.pyami.configrboto.exceptionr boto.gs.aclrr r boto.s3.aclrr rrrrrrrrrrrrrrrrrrrrrrrrobjectNO_CREDENTIALS_PROVIDED ValueErrorrrrrrrrsX