o ,])@s<ddlmZmZmZmZddlmZmZddlm Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZddlmZmZmZddlmZedZe jeZejZe j ed Z!Gd d d eZ"Gd d d eZ#GdddeZ$Gdddej%Z&e!edfddZ'e(dkrddl)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+.Z/e/j0e_0e/j1re$Z2ne#Z2e j3re 4e2_5ne 6e2_5e 7e j8Z9e9:e!e/j;re9e/j=e"d1e/j?fe2e9Z@e/j0reAd2Be/e@Cd3dSdS)4)absolute_importdivisionprint_functionunicode_literals)filterstr)utilsN)parse) HTTPServerSimpleHTTPRequestHandlerBaseHTTPRequestHandler)support threadingz keycert.pemc@s$eZdZddZddZddZdS) HTTPSServercCst|||||_dSN) _HTTPServer__init__context)selfserver_address handler_classrrC/usr/lib/python3/dist-packages/future/backports/test/ssl_servers.pyrs zHTTPSServer.__init__cCsd|jj|j|jfS)Nz <%s %s:%s>) __class____name__ server_name server_portrrrr__str__s zHTTPSServer.__str__c Cs\z|j\}}|jj|dd}W||fStjy-}z tjr(tj d|d}~ww)NT) server_sidezGot an error: %s ) socketacceptr wrap_socketerrorr verbosesysstderrwrite)rsockaddrsslconnerrr get_request"szHTTPSServer.get_requestN)r __module__ __qualname__rrr,rrrrrs rc@s(eZdZdZeZdZddZddZdS)RootedHTTPRequestHandlerz TestHTTPS/1.0cCsztj|d}tjtj|}|d}td|}|j }|D]}tj |\}}tj|\}}tj ||}q!|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)rr6wordsworddriveheadrrrtranslate_path8s   z'RootedHTTPRequestHandler.translate_pathc Gs>tjrtjd|jj|jj|j | ||fdSdS)Nz server (%s:%d %s): [%s] %s ) r r$r%stdoutr'serverrrrequestcipherlog_date_time_stringrformatargsrrr log_messageLs z$RootedHTTPRequestHandler.log_messageN) rr-r.server_versionherer:timeoutrArJrrrrr/.s  r/c@s.eZdZdZdZd ddZddZdd Zd S) StatsRequestHandlerzSExample HTTP request handler which returns SSL statistics on GET requests. zStatsHTTPS/1.0TcCs|jjj}|j}|||d}t|}| d}| d| dd| dt t |||rA|j|dSdS)zServe a GET request.) session_cacherE compressionzutf-8z Content-typeztext/plain; charset=utf-8zContent-LengthN)rfileraw_sockr session_statsrErPpprintpformatencode send_response send_headerrlen end_headerswfiler')r send_bodyr(rstatsbodyrrrdo_GET^s     zStatsRequestHandler.do_GETcCs|jdddS)zServe a HEAD request.F)r^N)rarrrrdo_HEADpszStatsRequestHandler.do_HEADcGs"tjrtj||g|RdSdSr)r r$r log_requestrGrrrrctszStatsRequestHandler.log_requestN)T)rr-r.__doc__rKrarbrcrrrrrNWs   rNc@s<eZdZedfddZddZd ddZdd Zd d ZdS) HTTPSServerThreadNcCs<d|_t|df|p t||_|jj|_tj|d|_ dS)NrT) flagrr/rCrportrThreadrdaemon)rrhostrrrrr{s   zHTTPSServerThread.__init__cCsd|jj|jfS)Nz<%s %s>)rrrCrrrrrszHTTPSServerThread.__str__cCs||_tj|dSr)rfrrhstart)rrfrrrrkszHTTPSServerThread.startcCs:|jr|jz|jdW|jdS|jw)Ng?)rfsetrC serve_forever server_closerrrrruns  zHTTPSServerThread.runcCs|jdSr)rCshutdownrrrrstopszHTTPSServerThread.stopr) rr-r.HOSTrrrkrorqrrrrreys   recsVttj}||t|||t}||fdd}| |S)Ncs8tjr tjdtjrtjddS)Nzstopping HTTPS server zjoining HTTPS thread )r r$r%rBr'rqr<rrCrrcleanups    z"make_https_server..cleanup) ssl SSLContextPROTOCOL_SSLv23load_cert_chainrerEventrkwait addCleanup)casecertfilerjrrrfrtrrsrmake_https_servers      r~__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)destractionrz-sz--statsuse_stats_handlerF store_truezalways return stats pagez --curve-name curve_namestorez&curve name for EC-based Diffie-Hellman)rrrrz--dhdh_filez!PEM file containing DH parametersz'Listening on https://localhost:{0.port}g?)D __future__rrrrfuture.builtinsrrfuturerr5r%rurVr future.backports.urllibr urllib_parsefuture.backports.http.serverr rr r future.backports.testr import_modulerr6dirname__file__rLrrr<CERTFILErr/rNrhrer~rargparseArgumentParserparser add_argumentint parse_argsrIr$rrPY2getcwdur:getcwdrvPROTOCOL_TLSv1rrxrset_ecdh_curverload_dh_paramsrgrCprintrHrmrrrrsx     )"