a zeo@s ddlZddlZddlZddlZddlZddlZddlmZ m Z m Z ddl m Z ddlmZejeZejZejedZGddde ZGdd d e ZGd d d e ZGd d d ejZdeeddddZedkrddlZejddZ e j!dde"ddde j!ddddddde j!d d!d"d#d$d%de j!d&d'e#d(d)d*e j!d+d,e#d-d.e j!d/d0e#d(d1d*e $Z%e%j&e _&e%j'reZ(neZ(e)e(_*e+ej,j-Z.e./ee%j0re.1e%j0e%j2re.3e%j2e%j4re.5e%j4ed2e%j6fe(e.Z7e%j&re8d39e%e7:d4dS)5N) HTTPServerSimpleHTTPRequestHandlerBaseHTTPRequestHandler)support) socket_helperz keycert.pemc@s$eZdZddZddZddZdS) HTTPSServercCst|||||_dSN) _HTTPServer__init__context)selfserver_address handler_classr rD/opt/bitninja-python-dojo/embedded/lib/python3.9/test/ssl_servers.pyr szHTTPSServer.__init__cCsd|jj|j|jfS)Nz <%s %s:%s>) __class____name__Z server_name server_portr rrr__str__s zHTTPSServer.__str__c Cshz"|j\}}|jj|dd}Wn<ty^}z$tjrHtj d|WYd}~n d}~00||fS)NT)Z server_sidezGot an error: %s ) socketacceptr Z wrap_socketOSErrorrverbosesysstderrwrite)r sockaddrZsslconnerrr get_request!szHTTPSServer.get_requestN)r __module__ __qualname__r rr rrrrrsrc@s*eZdZdZeZejZddZ ddZ dS)RootedHTTPRequestHandlerz TestHTTPS/1.0cCsztj|d}tjtj|}|d}td|}|j }|D]2}tj |\}}tj|\}}tj ||}qB|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) urllibparseurlparseospathnormpathunquotesplitfilterroot splitdrivejoin)r r*wordsZworddriveheadrrrtranslate_path7s   z'RootedHTTPRequestHandler.translate_pathc Gs:tjr6tjd|jj|jj|j | ||fdS)Nz server (%s:%d %s): [%s] %s ) rrrstdoutrserverr rZrequestcipherZlog_date_time_stringr formatargsrrr log_messageKsz$RootedHTTPRequestHandler.log_messageN) rr!r"server_versionherer/rZLOOPBACK_TIMEOUTtimeoutr5r<rrrrr#-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 |||r~|j|dS)zServe a GET request.)Z session_cacher8 compressionzutf-8z Content-typeztext/plain; charset=utf-8zContent-LengthN)Zrfileraw_sockr Z session_statsr8rApprintZpformatencodeZ send_responseZ send_headerstrlenZ end_headersZwfiler)r send_bodyrr Zstatsbodyrrrdo_GET]s     zStatsRequestHandler.do_GETcCs|jdddS)zServe a HEAD request.F)rIN)rKrrrrdo_HEADoszStatsRequestHandler.do_HEADcGstjrtj||g|RdSr)rrr log_requestr9rrrrMsszStatsRequestHandler.log_requestN)T)rr!r"__doc__r=rKrLrMrrrrr@Vs  r@c@s<eZdZedfddZddZd ddZdd Zd d ZdS) HTTPSServerThreadNcCs<d|_t|df|pt||_|jj|_tj|d|_ dS)NrT) flagrr#r7rport threadingThreadr daemon)r r hostrrrrr zs  zHTTPSServerThread.__init__cCsd|jj|jfS)Nz<%s %s>)rrr7rrrrrszHTTPSServerThread.__str__cCs||_tj|dSr)rPrRrSstart)r rPrrrrVszHTTPSServerThread.startcCs<|jr|jz|jdW|jn |j0dS)Ng?)rPsetr7 serve_foreverZ server_closerrrrruns  zHTTPSServerThread.runcCs|jdSr)r7shutdownrrrrstopszHTTPSServerThread.stop)N) rr!r"HOSTr rrVrYr[rrrrrOxs   rO)r certfilerUrcs`|durttjj}||t|||t}|| fdd}| |S)Ncs8tjrtjdtjr,tjddS)Nzstopping HTTPS server zjoining HTTPS thread )rrrr6rr[r1rr7rrcleanups   z"make_https_server..cleanup) sslcreate_default_contextPurpose CLIENT_AUTHload_cert_chainrOrREventrVwaitZ addCleanup)Zcaser r]rUrrPr_rr^rmake_https_servers     rg__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--quietrT store_falsezbe less verbose)destrkactionrlz-sz--statsuse_stats_handlerF store_truezalways return stats pagez --curve-name curve_namestorez&curve name for EC-based Diffie-Hellman)rnrjrorlz --cipherscipherszallowed cipher list)rnrjrlz--dhdh_filez!PEM file containing DH parametersz'Listening on https://localhost:{0.port}g?);r)rr`rErR urllib.parser&Z http.serverrr rrtestrZ test.supportrr*dirname__file__r>r\r1ZCERTFILErr#r@rSrOrgrargparseArgumentParserparser add_argumentintrG parse_argsr;rrprgetcwdr/rarbrcr rdrrZset_ecdh_curveruZload_dh_paramsrtZ set_ciphersrQr7printr:rXrrrrsx   )"