&>ac@sddlZddlZddlZddlZddlmZddlZddlmZm Z m Z ddl m Z ddl mZmZmZmZmZmZddlmZddlmZddlmZdd lmZmZmZydd l mZmZWn'e k r5dd lmZmZnXydd l!m"Z#Wn!e k rmdd l m#Z#nXddl$Z%dd l&m'Z'ddl(m)Z)m*Z*ddl+m,Z,m-Z-m.Z.mZm/Z/mZmZm0Z0e)ej1e2Z3dZ4dZ5ej6j7ej6j8e9dZ:yddl;m<Z<Wne k rMdZ<nXdZ=dddddZ?dZ@dZAdeBfdYZCdeBfdYZDdS(iN(t b64encode(t PoolManagertproxy_from_urltTimeout(tRetry(tsslt OP_NO_SSLv2t OP_NO_SSLv3tOP_NO_COMPRESSIONt PROTOCOL_TLStDEFAULT_CIPHERS(tSSLError(tReadTimeoutError(tConnectTimeoutError(tNewConnectionErrort ProtocolErrort ProxyError(tPROTOCOL_TLS_CLIENTt OP_NO_TICKET(torig_util_SSLContext(t SSLContext(tunquote(tfilter_ssl_warningsturlparse(tConnectionClosedErrortEndpointConnectionErrortHTTPClientErrorR tProxyConnectionErrorR R tInvalidProxiesConfigErrori<i s cacert.pem(twherecCstS(N(tDEFAULT_CA_BUNDLE(((s5/usr/lib/fence-agents/bundled/botocore/httpsession.pyR2scCs3|tk r|St}tjdj||S(NsCertificate path: {0}(tTrueRtloggertdebugtformat(tverifyt cert_path((s5/usr/lib/fence-agents/bundled/botocore/httpsession.pyt get_cert_path6s   csl| s|tkrt}nt|j|p7t|d krPtjn|}|d krd}|tO}|t O}|t O}|t O}nj |O_ |tjkst jd krtdd d k rt_nfd}|tjkr|_|n||_tdrhtjjd}|rht jj rh|_qhnS( s This function is a vendored version of the same function in urllib3 We vendor this function to ensure that the SSL contexts we construct always use the std lib SSLContext instead of pyopenssl. iiiitpost_handshake_authcs(tdddk r$t_ndS(Ntcheck_hostname(tgetattrtNonetFalseR'((tcontext(s5/usr/lib/fence-agents/bundled/botocore/httpsession.pytdisable_check_hostnamenstkeylog_filenamet SSLKEYLOGFILEN(iii(R RRt set_ciphersR R)Rt CERT_REQUIREDRRRRtoptionstsyst version_infoR(RR&t verify_modethasattrtostenvirontgettflagstignore_environmentR-(t ssl_versiont cert_reqsR1tciphersR,t sslkeylogfile((R+s5/usr/lib/fence-agents/bundled/botocore/httpsession.pytcreate_urllib3_context@s6       !       cCs't|tr|S|jdkSdS(s~Ensures a boolean value if a string or boolean is provided For strings, the value for True/False is case insensitive ttrueN(t isinstancetbooltlower(tval((s5/usr/lib/fence-agents/bundled/botocore/httpsession.pytensure_booleanscCs^d}t|}|jr6|j|j|d}n|jrZ|j|j|d}n|S(s Mask proxy url credentials. :type proxy_url: str :param proxy_url: The proxy url, i.e. https://username:password@proxy.com :return: Masked proxy url, i.e. https://***:***@proxy.com t*iis***(Rtusernametreplacetpassword(t proxy_urltmaskt parsed_url((s5/usr/lib/fence-agents/bundled/botocore/httpsession.pytmask_proxy_urls    tProxyConfigurationcBsYeZdZdddZdZdZedZdZ dZ dZ RS( sRepresents a proxy configuration dictionary and additional settings. This class represents a proxy configuration dictionary and provides utility functions to retreive well structured proxy urls and proxy headers from the proxy configuration dictionary. cCs@|dkri}n|dkr*i}n||_||_dS(N(R)t_proxiest_proxies_settings(tselftproxiestproxies_settings((s5/usr/lib/fence-agents/bundled/botocore/httpsession.pyt__init__s      cCs=t|}|jj|j}|r9|j|}n|S(s7Retrieves the corresponding proxy url for a given url. (RROR8tschemet_fix_proxy_url(RQturlRLtproxy((s5/usr/lib/fence-agents/bundled/botocore/httpsession.pyt proxy_url_fors  cCsJi}|j|\}}|rF|rF|j||}||ds (RsR_t_setup_proxy_ssl_contextR8titems(RQRSRtproxies_kwargs((s5/usr/lib/fence-agents/bundled/botocore/httpsession.pyt_proxies_kwargss  cKs]itd6|jd6|jd6|jd6|jd6|jd6|jd6}|j||S(NtstrictRtmaxsizet ssl_contextRt cert_filetkey_file(RRRt_get_ssl_contextRR|R}tupdate(RQt extra_kwargstpool_manager_kwargs((s5/usr/lib/fence-agents/bundled/botocore/httpsession.pyR s       cCstS(N(R?(RQ((s5/usr/lib/fence-agents/bundled/botocore/httpsession.pyR-scCsy||jkrn|jj|}|jd|}|j|jt||}|j|_||j||jn|SWnItk rp} td |jd| nttj fk r} t!d |jd| nt"k r} t#dt$|d| nt%k r} t&d |jd| nt'k r$} t(d |jd| nkt)k rT} t*d| d|d |jn;t+k r} d} t,j-| dt.t/d| nXdS(Nt(BOTO_EXPERIMENTAL__ADD_PROXY_HOST_HEADERRthosttmethodRWtbodyR\tretriestassert_same_hosttpreload_contenttdecode_contentRt endpoint_urlRRJtrequests4Exception received when sending urllib3 HTTP requesttexc_info(0RsRYRWRtconnection_from_urlRRrRER6R7R8RthostnameRRturlopenRRR\RR*RRtRut AWSResponsetstatust stream_outputtcontentRR RtsockettgaierrorRRRRMtURLLib3ConnectTimeoutErrorR tURLLib3ReadTimeoutErrorR RRt ExceptionR R!RR( RQRRJRRRtrequest_targetturllib_responset http_responseRtmessage((s5/usr/lib/fence-agents/bundled/botocore/httpsession.pytsends^         N(RiRjRkRR)tMAX_POOL_CONNECTIONSRTRlRRRRRRRRRRR(((s5/usr/lib/fence-agents/bundled/botocore/httpsession.pyRms&        (Etos.pathR6tloggingRtbase64RR2turllib3RRRturllib3.util.retryRturllib3.util.ssl_RRRRR R turllib3.exceptionsR RR RR RRRRRRt ImportErrorturllib3.contrib.pyopensslRRtbotocore.awsrequestRtt(botocore.vendored.six.moves.urllib_parseRtbotocore.compatRRtbotocore.exceptionsRRRRRt getLoggerRiR RyRRtjointdirnamet__file__RtcertifiRR%R)R?RERMtobjectRNRm(((s5/usr/lib/fence-agents/bundled/botocore/httpsession.pytsP     .   :!   K :