FRTc@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl Z ddl Z ddl Z ddlmZmZddlmZddlmZy$ddlmZddlmZWn#ek rddlZeZnXd efd YZd eefd YZd eefdYZdeefdYZdeefdYZdeefdYZdeefdYZ de efdYZ!defdYZ"defdYZ#de#efdYZ$de#efd YZ%d!e#efd"YZ&d#e&efd$YZ'ed%Z(d&Z)d'Z*dS((s/ Handles authentication required to AWS and GS iN(t formatdate(turllibt encodebytes(t AuthHandler(tBotoClientError(tsha1(tsha256tHmacKeyscBsMeZdZdZdZdZdZdZdZdZ RS(sKey based Auth handler helper.cCsJ|jdks|jdkr0tjjn||_|j|dS(N(t access_keytNonet secret_keytbotot auth_handlertNotReadyToAuthenticatethosttupdate_provider(tselfRtconfigtprovider((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyt__init__9s cCsm||_tj|jjjddt|_tr`tj|jjjddt|_n d|_dS(Nsutf-8t digestmod( t _providerthmactnewR tencodetshat_hmacRt _hmac_256R (RR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR?s  cCs|jr dSdSdS(Nt HmacSHA256tHmacSHA1(R(R((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyt algorithmIs cCs:|jrt}nt}tj|jjjdd|S(Nsutf-8R(RRRRRRR R(RR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyt _get_hmacOs   cCsA|j}|j|jdt|jjdjS(Nsutf-8(RtupdateRRtdigesttdecodetstrip(Rtstring_to_signtnew_hmac((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyt sign_stringWs cCs$tj|j}|d=|d=|S(NRR(tcopyt__dict__(Rt pickled_dict((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyt __getstate__\scCs||_|j|jdS(N(R(RR(Rtdct((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyt __setstate__bs ( t__name__t __module__t__doc__RRRRR&R*R,(((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR6s     tAnonAuthHandlercBs)eZdZdgZdZdZRS(s( Implements Anonymous requests. tanoncCs tt|j|||dS(N(tsuperR0R(RRRR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRnscKsdS(N((Rt http_requesttkwargs((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pytadd_authqs(R-R.R/t capabilityRR5(((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR0gs  tHmacAuthV1HandlercBs5eZdZddgZdZdZdZRS(s: Implements the HMAC request signing used by S3 and GS.shmac-v1ts3cCs9tj||||tj||||d|_dS(N(RRRR R(RRRR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRzscCs#tt|j|d|_dS(N(R2R7RR R(RR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRsc Ks|j}|j}|j}d|kr=tdt|dtkeyR$tb64_hmactauth_hdrtauth((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR5s"        (R-R.R/R6RRR5(((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR7us    tHmacAuthV2HandlercBs5eZdZddgZdZdZdZRS(sJ Implements the simplified HMAC authorization used by CloudFront. shmac-v2t cloudfrontcCs9tj||||tj||||d|_dS(N(RRRR R(RRRR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRscCs#tt|j|d|_dS(N(R2RKRR R(RR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRscKs|j}d|kr+tdt|dtbody(RR3RVR^R$((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR$s cKsd|jkr|jd=ntdt|jd<|jjrT|jj|jdt posixpathtnormpathtreplaceRR{R|tlentendswith(RR3tpatht normalizedtencoded((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyt canonical_uriws  ! cCsr|j}t|drAt|drAtjj|dtdSt|tsb|jd}nt|j S(Ntseektreadthash_algorithmisutf-8( R`thasattrR RBt compute_hashRRgRhRRi(RR3R`((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pytpayloads  cCs|jjg}|j|j||j|j||j|}|j|j|d|j|j||j|j|dj |S(Ns ( R=tupperRzRRRVR^RRR[(RR3tcrRV((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pytcanonical_requestscCsY|jjg}|j|j|j|j|j|j|jddj|S(Nt aws4_requestR(RRRzt timestampRfReR[(RR3tscope((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRs  cCs |jdS(Nt.(R(RR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pytsplit_host_partsscCs|j|}|jdk r*|j}n]t|dkr}|ddkrUd}qt|dkrpd}q|d}n |d}|S(Nisus-govs us-gov-west-1is us-east-1i(RRfR R(RRtpartsRf((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pytdetermine_region_names     cCs8|j|}|jdk r*|j}n |d}|S(Ni(RReR (RRRRe((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pytdetermine_service_names   cCsg}|jddd!|_|j|j|j|j}|j|j}||_||_|j|j|j|j|jddj|S(Ns X-Amz-DateiiRR( R<RRzRRRReRfR[(RR3RRfRe((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pytcredential_scopes   cCsbdg}|j|jd|j|j||jt|jdjdj|S(s Return the canonical StringToSign as well as a dict containing the original version of all headers that were included in the StringToSign. sAWS4-HMAC-SHA256s X-Amz-Datesutf-8s (RzR<RRRRiR[(RR3Rtsts((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR$s  "cCs|jj}|jd|jd|j}|j||j}|j||j}|j|d}|j||dtS(NtAWS4sutf-8RRk(RR RmRRRfReR?(RR3R$RGtk_datetk_regiont k_servicet k_signing((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyt signatures  c Ksd|jkr|jd=ntjj}|jd|jd<|jjrc|jj|jdtt|j|||jr:|j|j|_ndS(N(R2RRRftclean_region_name(RtargsR4((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR!s cCs|jdr|dS|S(Nss3-i(RU(RRf((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR'scCs@tjj|j}tjj|j}tjj|}|S(N(RR{turlparseRtunquoteR|(RR3RtunquotedR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR-scCsg}xkt|jD]Z}tjj|j|}|jdtjj|ddtjj|ddfqWdj |S(Ns%s=%sRts-_.~Rv( RZRwR RBRyRzRR{R|R[(RR3R]RRX((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR7s !cCsU|j}|jdk}|dkr+| s=|dkrD|rD|jSd|j|fS(NRpiPis%s:%s(RqRrR(RRR3RqRs((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRnBs  %cCsk|j|j|}i|d6}xB|jjD]1\}}|j}|dkr2|||RRwR tquerytparse_qsR?RSRgtlistttupleRR ( RRbt modified_reqt parsed_patht copy_paramstraw_qst existing_qsRGRX((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pytmangle_path_and_paramss"      cCs3|jjdr|jdStt|j|S(Nsx-amz-content-sha256(R<tgetR2RR(RR3((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRs cKsd|jkrSd|jkr:|jjd|jd sRusutf-8Rv( RRxtsortR RBRyRzRR"R[(RRwRxR~RGtval((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyt_build_query_string s +cKss|j}|j|j}tjjd|d|dRRDRERR{t quote_plusR`RRRR(RR3R4R<RwRR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR5)s       (R-R.R/R5(((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR"stQuerySignatureV0AuthHandlercBs&eZdZdZdgZdZRS(sProvides Signature V0 Signingissign-v0c Gstjjd|j}|d|d}|j|jd|j}|jddg}xE|D]=}tjj ||}|j |dt j j |qpWdj|} | tj|jfS( Nsusing _calc_signature_0tActionRsutf-8tcmpcSst|j|jS(N(RRT(Rty((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRLsRuRv(R RDRERR RRxRRBRyRzRR{R|R[tbase64t b64encodeR!( RRwRRRPRxR~RGRR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRFs   %(R-R.R/RR6R(((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR@s tQuerySignatureV1AuthHandlercBs2eZdZdZddgZdZdZRS(s5 Provides Query Signature V1 Authentication. issign-v1tmturkcOs3tj|||tj|||d|_dS(N(RRRR R(RRtkw((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR]sc Gstjjd|j}|j}|jddg}xh|D]`}|j|jdtjj ||}|j||j |dt j j |qHWdj|}|tj|jfS(Nsusing _calc_signature_1RcSst|j|jS(N(RRT(RR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRfssutf-8RuRv(R RDRERRxRR RRBRyRzRR{R|R[RRR!( RRwRRRxR~RGRR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRbs    %(R-R.R/RR6RR(((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRUs   tQuerySignatureV2AuthHandlerc BsGeZdZdZddddddddd d d d g Zd ZRS(s+Provides Query Signature V2 Authentication.issign-v2tec2temrtfpstecstsdbtiamtrdstsnstsqstcloudformationc Cstjjdd||j|f}|j}|j|d<|jjrd|jj|dRRDRERRR`R<RRRRR{R(RRbR4RR((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyR5s  (R-R.R/R6R5(((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRs c Csg}tjjt|}xE|D]=}y|j||||Wq"tjjk r^q"Xq"W|s|}g|D]}|j^qv}tjj dt |t |fn|dS(sFinds an AuthHandler that is ready to authenticate. Lists through all the registered AuthHandlers to find one that is willing to handle for the requested capabilities, config and provider. :type host: string :param host: The name of the host :type config: :param config: :type provider: :param provider: Returns: An implementation of AuthHandler. Raises: boto.exception.NoAuthHandlerFound sYNo handler was ready to authenticate. %d handlers were checked. %s Check your credentialsi( R tplugint get_pluginRRzR R R-t exceptiontNoAuthHandlerFoundRR( RRRtrequested_capabilitytready_handlerst auth_handlersthandlertchecked_handlerstnames((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pytget_auth_handlers   csfd}|S(NcstjjdtrdgStjjddtr;dgSt|drt|jddrd|jj ksd |jj krdgSqn|S( Nt EC2_USE_SIGV4shmac-v4Rs use-sigv4RtendpointR_s.cn-s .eu-central( tostenvironRRR RRtgetattrRR(R(tfunc(s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyt_wrappers ((RR((Rs6/opt/freeware/lib/python2.7/site-packages/boto/auth.pytdetect_potential_sigv4scsfd}|S(Ncs|tjjdtrdgStjjddtr;dgSt|drrd|jkshd|jkrrdgSn|S(Nt S3_USE_SIGV4s hmac-v4-s3R8s use-sigv4Rs.cn-s .eu-central(RRRRR RRR(R(R(s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pyRs ((RR((Rs6/opt/freeware/lib/python2.7/site-packages/boto/auth.pytdetect_potential_s3sigv4s(+R/RR tboto.auth_handlertboto.exceptiont boto.plugint boto.utilsR'Rt email.utilsRRRRt boto.compatRRRRthashlibRRRt ImportErrorR tobjectRR0R7RKRMRQRdRRRRRRRRRR(((s6/opt/freeware/lib/python2.7/site-packages/boto/auth.pytsN              1#K& 2