o Qaj@sddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddlm Z m Z ddl mZz ddlZddlZWney[ejdejeeYnwzddlZWneyqddlmZYnwzddlmZmZmZmZmZ WneyddlmZmZmZmZmZ Ynwddl!m"Z"dd l#m#Z#dd l$m%Z%m&Z&m'Z'm(Z(m)Z)ze*Wn e+ye,Z*Ynwd d Z-d dZ.ddZ/Gddde0Z1Gddde0ZGddde0Z2dS))absolute_importN)debugwarning) EX_OSFILEa: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ImportError trying to import dateutil.parser and dateutil.tz. Please install the python dateutil module: $ sudo apt-get install python-dateutil or $ sudo yum install python-dateutil or $ pip install python-dateutil !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ) NoOptionErrorNoSectionErrorMissingSectionHeaderError ParsingError ConfigParser)Progress) SortedDict)s3_quotegetTreeFromXmlgetDictFromTreebase_unicodisedateRFC822toPythoncCs4t|tkr |dvSt|tkr|dkrdSdS)zsCheck to see if a string is true, yes, on, or 1 value may be a str, or unicode. Return True if it is )trueyeson1TFtypeunicodelowerboolvaluer+/usr/lib/python3/dist-packages/S3/Config.py is_bool_trueI  r cCs4t|tkr |dvSt|tkr|dkrdSdS)ztCheck to see if a string is false, no, off, or 0 value may be a str, or unicode. Return True if it is )falsenooff0FTrrrrr is_bool_falseXr!r&cCst|pt|S)z)Check a string value to see if it is bool)r r&rrrris_boolgsr'c@s,eZdZdZgZiZdZdZdZdZ dZ dZ dZ dZ dZdZdZejZejZejZdZdZd Zd Zd Ze dd Z!d Z"d Z#dZ$d Z%d Z&dZ'd Z(d Z)d Z*d Z+dZ,gZ-gZ.dZ/d Z0d Z1d Z2dZ3dZ4gdZ5d Z6d Z7d Z8dZ9dZ:ded<d Z;dZdZ?dZ@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKdZLdZMdZNddgZOgZPgZQiZRiZSeTUpdZVdZWdZXd ZYdZZd Z[dZ\d Z]d Z^dZ_dZ`dZadZbgZcgZddZedZfgZgdZhdZidZjd Zkd Zld Zmd ZndZodZpd Zqd Zrd Zsd!Ztd ZudZvd"Zwd5d#d$Zxd5d%d&Zyd'd(Zzd)d*Z{d+d,Z|d-d.Z}d/d0Z~d1d2Zd3d4ZdS)6ConfigNTzs3.amazonaws.comz%(bucket)s.s3.amazonaws.comzsdb.amazonaws.comzcloudfront.amazonaws.comiF) ignore_caserStandardi8 ) unameuidgnamegidatimemtimectimemodemd5z@[sync] Remove remote S3 objects when local file has been deleteddelete_removedz}%(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)sz}%(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)sUSzbinary/octet-streamii'sizer4UTF-8normali,z index.htmlz8http://%(bucket)s.s3-website-%(location)s.amazonaws.com/rdcCs|jdur t||_|jSN) _instanceobject__new__)self configfile access_key secret_key access_tokenrrrrAs  zConfig.__new__cCs.|rz||Wnty dtjvsdtjvr|Ynw|r+|r+||_||_|r3||_d|_t |jdkryt dpCt d}t dpMt d}t d pWt d }|ru|s`t d t ||_t ||_|rtd|_t ||_n| |jr|jd krtd |jr|jd krtddSdSdS)NAWS_CREDENTIAL_FILE AWS_PROFILEFrAWS_ACCESS_KEYAWS_ACCESS_KEY_IDAWS_SECRET_KEYAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKENAWS_SECURITY_TOKENzRAWS_ACCESS_KEY environment variable is used but AWS_SECRET_KEY variable is missingTzCannot have server_side_encryption (S3 SSE) and KMS_key set (S3 KMS). KMS encryption will be used. Please set server_side_encryption to FalsezFKMS encryption requires signature v4. Please set signature_v2 to False)read_config_fileIOErrorosenvironaws_credential_filerDrErF_access_token_refreshlengetenv ValueErrorr role_configkms_keyserver_side_encryptionr signature_v2 Exception)rBrCrDrErFenv_access_keyenv_secret_keyenv_access_tokenrrr__init__sH    'zConfig.__init__cCszStjd}|rdtt}dd||d}tjd}|rAt| }|}Wdn1s4wYd|d <||d <d d d |D}t j ddd}| dd|| } | } | j dkrt| dkrt| } t| } | jdkr| dd} n| jdkr| dd} ntd| jtd| dtd| dtd| d tt| d!}|tjd"d#|_tjtj|_WdStt jd$dd}| d%d&| } | }| j dkrSt|dkrS| d%d'| d(| } | j dkrQt| } t!"| } tdt| dtdt| dtdt| d)tt| d!}|tjd"d#|_tt| d*|_WdStt)+zL Get credentials from IAM authentication and STS AssumeRole AWS_ROLE_ARNzrole-session-%s AssumeRolez 2011-06-15)ActionVersionRoleArnRoleSessionNameAWS_WEB_IDENTITY_TOKEN_FILENAssumeRoleWithWebIdentityrcWebIdentityToken&cSs$g|]\}}d|t|ddfqS)z%s=%sT)unicode_output)r).0kvrrr =sz&Config.role_config..zsts.amazonaws.com)hosttimeoutPOSTz/?rAssumeRoleResponseAssumeRoleResult Credentials!AssumeRoleWithWebIdentityResponseAssumeRoleWithWebIdentityResultz.Unexpected XML message from STS server: <%s />rD AccessKeyIdrESecretAccessKeyrF SessionToken Expirationr8)minutesz169.254.169.254GETz+/latest/meta-data/iam/security-credentials/z-/latest/meta-data/iam/security-credentials/%szutf-8Token LastUpdated)#rQrRgetinttimeopenreadjoinitemshttplibHTTPSConnectionrequest getresponsestatusrUrrtagrPr( update_optionrrdatetime timedelta_access_token_expirationnowdateutiltztzutc_access_token_last_updateHTTPConnectiondecodejsonloads)rBrole_arnrole_session_nameparamsweb_identity_token_filefweb_identity_tokenencoded_paramsconnresp resp_contenttree result_dictcreds expirationfilesrrrrX)s|           zConfig.role_configcCsl|jr4tjtj}|jr||jkr|jr|j|krdSz|WdSt y3t dYdSwdS)NzCould not refresh role) rTrrrrrrrrXr\r)rBrrrr role_refreshus   zConfig.role_refreshc sztjdtjd}|rtj|rt|n tjs#WdSttdt j dt |ddd }| }Wdn1sGwYz"z  t |Wntyld|} t |YnwWnty}z td t|fd}~wwttjd d }td |dfdd }||dd}|rtdt|||dd}|rtdt|||ddd} | rtdt| WdSWdSty} ztd| jWYd} ~ dSd} ~ wty} z td|WYd} ~ dSd} ~ ww)Nz~/.aws/credentialsrGzReading AWS credentials from %srencodingr:rz [default] z*Error reading aws_credential_file (%s): %srHdefaultzUsing AWS profile '%s'Tc sd}z||}WnCtyM}z7|rtd|j|j|rCz|}d}||}td|WntyB}zWYd}~nd}~wwWYd}~nd}~ww|rWtd|||S)NzLCouldn't find key '%s' for the AWS Profile '%s' in the credentials file '%s'rzLegacy configuratin key '%s' used, please use the standardized config format as described here: https://aws.amazon.com/blogs/security/a-new-and-standardized-way-to-manage-credentials-in-the-aws-sdks/zWFound the configuration option '%s' for the AWS Profile '%s' in the credentials file %s)rrroptionsectionr)profilekey legacy_key print_warningresulterSconfigrrget_keys8   z+Config.aws_credential_file..get_keyaws_access_key_idAWSAccessKeyIdrDaws_secret_access_key AWSSecretKeyrEaws_session_tokenFrFz&Errno %d accessing credentials file %sz;Couldn't find AWS Profile '%s' in the credentials file '%s')T)rQpath expanduserrRrisfilerPyConfigParserriorgetattrrreadfpStringIOr r rWstrr(rrPrerrnor) rBcredential_file_from_envfp config_stringexcrrprofile_access_keyprofile_secret_keyprofile_access_tokenrrrrrSs             zConfig.aws_credential_filecCsTg}t|D]!}ttt|}|ds!|tdtdtdfvr"q||q|S)N_string*T)dirrrr( startswithappend)rBretvalr option_typerrr option_lists   zConfig.option_listcCst|}|D]}||}|dur|}|||q|dr,|d|d|drM|ddD]}|dd\}}||j|<q9|j|dS)N acl_public add_headers,:r) r rrstriprsplit extra_headers _parsed_filesr)rBrCcpr_optionrrrrrrOs    zConfig.read_config_filecCst|d|dS)Nr) ConfigDumperdumprBstreamrrr dump_configszConfig.dump_configc Cs |durdSt|dr||t|ddS|dkrTzt|}WntySzztj|}Wnt yAtj |}YnwWn t yPtd|wYnw|dkr| dsb| dred}n| d so| d rrd }nd }z|rt|dd |>pt|}Wnwt ytd||fwttt|tdustt|durt|rt|rd}nKt|rd}nDtd||fttt|tdurzt|}Wn*tytd||fw|dvr|dr|dd}n |dr|dd}tt||dS)N$r verbosityz)Config: verbosity level '%s' is not valid limitratermK mMrr5zFConfig: value of option %s must have suffix m, k, or nothing, not '%s'TFz8Config: value of option '%s' must be Yes or No, not '%s'rz9Config: value of option '%s' must be an integer, not '%s') host_base host_bucketcloudfront_hostzhttp://zhttps://)rrrrQrVrrWlogging _levelNamesAttributeError _nameToLevelKeyErrorendswithr\rrr(r'r r&setattr)rBrrshiftrrrr sd      $      zConfig.update_option)NNNN)__name__ __module__ __qualname__r?r_docrDrErFrTrrrrrY simpledb_hostrrWARNINGrsysstdoutisattyprogress_meterr ProgressCRprogress_class send_chunk recv_chunklist_md5 long_listinghuman_readable_sizesr rforcerZenable get_continue put_continue upload_id skip_existing recursive restore_daysrestore_priorityr acl_grants acl_revokes proxy_host proxy_portencryptdry_runadd_encoding_extspreserve_attrspreserve_attrs_listr6 delete_afterdelete_after_fetch max_deletelimit delay_updatesgpg_passphrase gpg_command gpg_encrypt gpg_decrypt use_https ca_certs_filessl_client_key_filessl_client_cert_filecheck_ssl_certificatecheck_ssl_hostnamebucket_locationdefault_mime_typeguess_mime_typeuse_mime_magic mime_typeenable_multipartmultipart_chunk_size_mbmultipart_copy_chunk_size_mbmultipart_max_chunks sync_checksexcludeinclude debug_exclude debug_includelocalegetpreferredencodingrurlencoding_modelog_target_prefixreduced_redundancy storage_classfollow_symlinkssocket_timeoutinvalidate_on_cfinvalidate_default_index_on_cf#invalidate_default_index_root_on_cf website_index website_errorwebsite_endpointadditional_destinations files_from cache_filerremove_headers expiry_days expiry_date expiry_prefixr[rrequester_pays stop_on_errorcontent_disposition content_typestatsuse_http_expectsignurl_use_https throttle_maxpublic_url_use_httpsconnection_poolingconnection_max_agerAr`rXrrSrrOrrrrrrr(ls      +La r(c@s>eZdZgfddZgfddZddZddZd d d Zd S) r cCsi|_|||dSr>)cfg parse_file)rBfilesectionsrrrr`JszConfigParser.__init__cCstd|t|tgkr|g}d}td}td}td}td}td}tj|d|d d d } | D]} || sG|| rHq;|| } | r`| d } | |vp^t |d k}q;|| } | r|r| }||d r~|d dd|d <| |d|d |ddvrd|d ddt |d d|d ddf}n|d }td|d|fq;t d|| fq;WddS1swYdS)NzConfigParser: Reading file '%s'Tz^\s*#.*z^\s*$z ^\[([^\]]+)\]z$^\s*(?P\w+)\s*=\s*(?P.*)z ^"(.*)"\s*$rrr:rrrrr5r)rDrEr&z%s...%d_chars...%srpzConfigParser: %s->%sz!Ignoring invalid line in '%s': %s) rrrecompilerrrmatchgroupsrU groupdict __setitem__r)rBr`rain_our_section r_commentr_empty r_sectionr_datar_quotesrline is_sectionris_datadata print_valuerrrr_Ns@          4"zConfigParser.parse_filecCs |j|Sr>r^)rBnamerrr __getitem__o zConfigParser.__getitem__cCs||j|<dSr>rt)rBrurrrrrhrszConfigParser.__setitem__NcCs||jvr |j|S|Sr>rt)rBrurrrrrus  zConfigParser.getr>)rrrr`r_rvrhrrrrrr Is   !r c@seZdZddZddZdS)rcCs ||_dSr>)rrrrrr`{rwzConfigDumper.__init__c Cs|jd||D]<}t||}|dkr>t|tr>zztj|}Wnty2tj |}YnwWn t y=Ynw|jd||fq dS)Nz[%s] rz%s = %s ) rwriterr isinstancerrrr _levelToNamer)rBrrrrrrrr~s"     zConfigDumper.dumpN)rrrr`rrrrrrzs r)3 __future__rrrr>rcrQrrrrrr ExitCodesrdateutil.parserr dateutil.tz ImportErrorstderrrxflushexitr http.clientclient configparserrrr r r rr)r r BaseUtilsrrrrrr NameErrorrr r&r'r@r(rrrrrs^              `1