p/Xc@@sddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddljjZddlmZddlmZddlmZdZdZdefd YZd efd YZd efd YZdefdYZdefdYZdefdYZ dZ!dZ"dS(i(tabsolute_importN(tArg(tBaseAuth(t AuthErrors%Y-%m-%dT%H:%M:%SZs%Y%m%dT%H%M%SZt HmacKeyAuthcB@seZdZeddddddedddd dd ed dd dd gZedZdZdZdZ dZ RS(s1 Basis for AWS HMAC-based authentication s-Is--access-key-idtdesttkey_idtmetavartKEY_IDs-Ss --secret-keyt secret_keytKEYs--security-tokentsecurity_tokentTOKENcK@s|jd|jj|jd|jjd|jd|jjd|jd|jjd|jd|jjd||j|}|j|S(NtloglevelRR R tcredential_expiration(t setdefaulttlogtleveltargstgettconfigt configure(tclstothertkwargstnew((s;/usr/lib/python2.7/site-packages/requestbuilder/auth/aws.pyt from_other1s  cC@s|j|jjds+tdn|jjdsLtdn|jjdrd}xfd D]>}y!tjj|jd|}PWqktk rqkqkXqkW|jj dj |jd|r|tjj krtd qndS( NRs0missing access key ID; please supply one with -IR s-missing secret key; please supply one with -SRs%Y-%m-%dT%H:%M:%S.%fZs%Y-%m-%dT%H:%M:%SZsOfailed to parse credential expiration time '{0}'; proceeding without validationscredentials have expired(s%Y-%m-%dT%H:%M:%S.%fZs%Y-%m-%dT%H:%M:%SZ( t _HmacKeyAuth__populate_auth_argsRRRtNonetdatetimetstrptimet ValueErrorRtwarntformattutcnow(tselft expirationtfmt((s;/usr/lib/python2.7/site-packages/requestbuilder/auth/aws.pyR=s&      c C@s#dtjkrtjd}tjj|}tjj|}t|}x|D]}|jddd}d|krX|jdd\}}|jdkr|j j d r|j|j dQsRR)itSignatureVersiont HmacSHA256tSignatureMethodt TimestampR RpRns{method} {host} {path} R|thostR.RtsafeR(s-_~Rs assword=[^&]*sassword=sstring to sign: %ssb64-encoded signature: %s($RRR|tparse_qstbodyRCtquerytdictRRRtstrftimetISO8601tgmtimeRRtRR!RRR.RR~RRtquoteR{tretsubRRARbRct prepare_bodyRR( R#RfRgtparsedRsRjt quoted_paramsR6R7t query_stringtredacted_to_signRk((s;/usr/lib/python2.7/site-packages/requestbuilder/auth/aws.pyRlJs@!       cC@s?tj|jddtj}|j|tj|jS(NR R( RRRRtsha256RRRR(R#RjR((s;/usr/lib/python2.7/site-packages/requestbuilder/auth/aws.pyRcrs (RIRJRKRlRc(((s;/usr/lib/python2.7/site-packages/requestbuilder/auth/aws.pyRDs (t HmacV4AuthcB@sheZdZdZdZdZdZdZdZdZ dZ d Z d Z RS( sk AWS signature version 4 http://docs.aws.amazon.com/general/latest/gr/signature-version-4.html cC@sE|js@|jjd|jjtdj|jjn|j|}tj}tj t tj |}|j ||}dj |jdf|}|j|||||j|}|j|} |j|} |j|} dj |jj|| | d| |f} |jjdt| dj d|dj |tj| jf} tjd d | }|jjd t|tjd j|jd dtj}x9|D]1}|j|tj|j dtj}qW|j| |j}|jjd||j!||||S(Ns8service class %s must have a NAME attribute to use sigv4s+BUG: service class {0} does not have a nameRRs Roscanonical request: %ssAWS4-HMAC-SHA256s assword=[^&]*sassword=sstring to sign: %ssAWS4{0}R Rs signature: %s("tNAMERtcriticalt __class__RIRR!t _hash_payloadRRt ISO8601_BASICRt _build_scopeR{RR^t_get_canonical_urit_get_canonical_queryt_get_canonical_headerst_get_signed_headersR|RRARbRRt hexdigestRRRRRRRe(R#RfRgt payload_hashtnowt date_headertscopet credentialtc_uritc_queryRht s_headerst c_requestRjRt derived_hmactchunkRk((s;/usr/lib/python2.7/site-packages/requestbuilder/auth/aws.pyRl~sF            cC@s|tj|j}|j|jd<|jjdd||jd<||jd<|jjdrx|jd|jd        ( RIRJRKRlR^ReRRRRRRR(((s;/usr/lib/python2.7/site-packages/requestbuilder/auth/aws.pyRxs )     tQueryHmacV4AuthcB@seZdZdZRS(cC@s|jjdkrCd|jjddkrC|jjdntj|j}|j|jd<|jj ddidd 6|d 6|d 6|j |d 6}|j jd r|j d |d:s(RRRRCRR(RRRs((s;/usr/lib/python2.7/site-packages/requestbuilder/auth/aws.pyR3scC@s:tj|}tj|d|d|ddddfS(s^ Return a copy of a URL with its parameters, fragments, and query string removed. iiiRo(Rt urlunparse(RR((s;/usr/lib/python2.7/site-packages/requestbuilder/auth/aws.pyR=s(#t __future__RRRuRt email.utilsRRRR+RRRRqR~tsix.moves.urllib_parsetmovest urllib_parseRtrequestbuilderRtrequestbuilder.authRtrequestbuilder.exceptionsRRRRRNRRRRRR(((s;/usr/lib/python2.7/site-packages/requestbuilder/auth/aws.pyts4            {4