3 jf)@s>ddlmZmZmZmZddlmZmZddlm Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZddlmZmZmZddlmZejdZe jjeZejZe jj ed Z!Gd d d eZ"Gd d d eZ#GdddeZ$Gdddej%Z&e!edfddZ'e(dkr:ddl)Z)e)j*ddZ+e+j,dde-ddde+j,ddddd d!d"e+j,d#d$d%d&d'd(d"e+j,d)d*ed+d,d-e+j,d.d/ed+d0d-e+j.Z/e/j0e_0e/j1re$Z2n"e#Z2e j3re j4e2_5n e j6e2_5e j7e j8Z9e9j:e!e/j;re9je/j=e"d1e/j?fe2e9Z@e/j0r0eAd2jBe/e@jCd3dS)4)absolute_importdivisionprint_functionunicode_literals)filterstr)utilsN)parse) HTTPServerSimpleHTTPRequestHandlerBaseHTTPRequestHandler)support threadingz keycert.pemc@s$eZdZddZddZddZdS) HTTPSServercCstj|||||_dS)N) _HTTPServer__init__context)selfserver_address handler_classrrC/tmp/pip-build-s1i5078x/future/future/backports/test/ssl_servers.pyrszHTTPSServer.__init__cCsd|jj|j|jfS)Nz <%s %s:%s>) __class____name__Z server_name server_port)rrrr__str__szHTTPSServer.__str__cCshy"|jj\}}|jj|dd}Wn<tjk r^}ztjrLtjj d|WYdd}~XnX||fS)NT) server_sidezGot an error: %s ) socketacceptr wrap_socketerrorr verbosesysstderrwrite)rsockaddrZsslconnerrr get_request"szHTTPSServer.get_requestN)r __module__ __qualname__rrr(rrrrrsrc@s(eZdZdZeZdZddZddZdS)RootedHTTPRequestHandlerz TestHTTPS/1.0cCs~tjj|d}tjjtjj|}|jd}td|}|j }x:|D]2}tjj |\}}tjj|\}}tjj ||}qDW|S)zTranslate a /-separated PATH to the local filename syntax. Components that mean special things to the local file system (e.g. drive or directory names) are ignored. (XXX They should probably be diagnosed.) /N) urllibr urlparseospathnormpathunquotesplitrroot splitdrivejoin)rr2wordsworddriveheadrrrtranslate_path8s    z'RootedHTTPRequestHandler.translate_pathcGs:tjr6tjjd|jj|jj|jj |j ||fdS)Nz server (%s:%d %s): [%s] %s ) r r!r"stdoutr$serverrrrequestcipherZlog_date_time_string)rformatargsrrr log_messageLsz$RootedHTTPRequestHandler.log_messageN) rr)r*server_versionherer6timeoutr=rDrrrrr+.s r+c@s.eZdZdZdZd ddZddZdd Zd S) StatsRequestHandlerzSExample HTTP request handler which returns SSL statistics on GET requests. zStatsHTTPS/1.0TcCs|jjj}|j}|j|j|jd}tj|}|j d}|j d|j dd|j dt t ||j|r~|jj|dS)zServe a GET request.)Z session_cacherA compressionzutf-8z Content-typeztext/plain; charset=utf-8zContent-LengthN)rfileraw_sockr session_statsrArIpprintpformatencodeZ send_responseZ send_headerrlenZ end_headerswfiler$)r send_bodyr%rstatsbodyrrrdo_GET^s      zStatsRequestHandler.do_GETcCs|jdddS)zServe a HEAD request.F)rTN)rW)rrrrdo_HEADpszStatsRequestHandler.do_HEADcGstjrtj||f|dS)N)r r!r log_request)rrBrCrrrrYtszStatsRequestHandler.log_requestN)T)rr)r*__doc__rErWrXrYrrrrrHWs  rHc@s<eZdZedfddZddZd ddZdd Zd d ZdS) HTTPSServerThreadNcCs<d|_t|df|pt||_|jj|_tjj|d|_ dS)NrT) flagrr+r?rportrThreadrdaemon)rrhostrrrrr{s  zHTTPSServerThread.__init__cCsd|jj|jfS)Nz<%s %s>)rrr?)rrrrrszHTTPSServerThread.__str__cCs||_tjj|dS)N)r\rr^start)rr\rrrraszHTTPSServerThread.startc Cs2|jr|jjz|jjdWd|jjXdS)Ng?)r\setr? serve_forever server_close)rrrrruns  zHTTPSServerThread.runcCs|jjdS)N)r?shutdown)rrrrstopszHTTPSServerThread.stop)N) rr)r*HOSTrrrarergrrrrr[ys   r[csVtjtj}|j|t|||tj}j||jfdd}|j |S)Ncs8tjrtjjdjtjr,tjjdjdS)Nzstopping HTTPS server zjoining HTTPS thread )r r!r"r>r$rgr8r)r?rrcleanups   z"make_https_server..cleanup) ssl SSLContextPROTOCOL_SSLv23load_cert_chainr[rEventrawaitZ addCleanup)Zcasecertfiler`rrr\rir)r?rmake_https_servers      rq__main__zERun a test HTTPS server. By default, the current directory is served.) descriptionz-pz--portiQz(port to listen on (default: %(default)s))typedefaulthelpz-qz--quietr!T store_falsezbe less verbose)destruactionrvz-sz--statsuse_stats_handlerF store_truezalways return stats pagez --curve-name curve_namestorez&curve name for EC-based Diffie-Hellman)rxrtryrvz--dhdh_filez!PEM file containing DH parametersz'Listening on https://localhost:{0.port}g?)D __future__rrrrZfuture.builtinsrrfuturerr1r"rjrOrZfuture.backports.urllibr urllib_parseZfuture.backports.http.serverr rr r Zfuture.backports.testr import_modulerr2dirname__file__rFrhr8ZCERTFILErr+rHr^r[rqrargparseArgumentParserparser add_argumentint parse_argsrCr!rzrPY2Zgetcwdur6getcwdrkPROTOCOL_TLSv1rrmr|set_ecdh_curver~load_dh_paramsr]r?printrBrcrrrrsh     )"