a  ze@sdZgdZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlmZddlmZdZdZGdd d ejZGd d d ejeZGd d d ejZ Gddde Z!ddZ"da#ddZ$ddZ%Gddde!Z&ddZ'e edddfddZ(e)dkrddl*Z*e*+Z,e,j-dd d!d"e,j-d#d$d%d&d'e,j-d(d)e .d*d+e,j-d,d-de/d.d/d0e,0Z1e1j2re&Z3nee!e1j4d1Z3Gd2d3d3eZ5e(e3e5e1j6e1j7d4dS)5z0.6) HTTPServerThreadingHTTPServerBaseHTTPRequestHandlerSimpleHTTPRequestHandlerCGIHTTPRequestHandlerN)partial) HTTPStatusa Error response

Error response

Error code: %(code)d

Message: %(message)s.

Error code explanation: %(code)s - %(explain)s.

ztext/html;charset=utf-8c@seZdZdZddZdS)rcCs4tj||jdd\}}t||_||_dS)N) socketserver TCPServer server_bindZserver_addresssocketgetfqdn server_name server_port)selfhostportr?/opt/bitninja-python-dojo/embedded/lib/python3.9/http/server.pyr s  zHTTPServer.server_bindN)__name__ __module__ __qualname__Zallow_reuse_addressr rrrrrsrc@seZdZdZdS)rTN)rrrZdaemon_threadsrrrrrsrc@seZdZdejdZdeZe Z e Z dZ ddZddZd d Zd d Zd.ddZd/ddZd0ddZddZddZddZd1ddZddZdd Zd!d"Zd2d#d$Zd%d&Zgd'Zgd(Zd)d*Z d+Z!e"j#j$Z%d,d-e&j'(DZ)d S)3rzPython/rz BaseHTTP/HTTP/0.9c Csd|_|j|_}d|_t|jd}|d}||_|}t |dkrLdSt |dkr |d}zT| dsrt |d d d }|d }t |d krt t |dt |d f}Wn*t t fy|tjd |YdS0|dkr|jdkrd|_|dkr|tjd|dS||_d t |kr}z"|tjdt|WYd}~dSd}~00|jdd} | dkrdd|_n | dkr|jdkrd|_|jdd} | dkr|jdkr|jdkr|sdSdS)NTz iso-8859-1z rFzHTTP//r .r zBad request version (%r))r r zHTTP/1.1)r rzInvalid HTTP version (%s)zBad request syntax (%r)GETzBad HTTP/0.9 request type (%r))Z_classz Line too longzToo many headers Connectionclose keep-aliveZExpectz 100-continue) commanddefault_request_versionrequest_versionclose_connectionstrraw_requestlinerstrip requestlinesplitlen startswith ValueErrorint IndexError send_errorrZ BAD_REQUESTprotocol_versionZHTTP_VERSION_NOT_SUPPORTEDpathhttpclientZ parse_headersrfile MessageClassheadersZ LineTooLongZREQUEST_HEADER_FIELDS_TOO_LARGEZ HTTPExceptiongetlowerhandle_expect_100) rversionr+wordsZbase_version_numberZversion_numberr$r4errZconntypeexpectrrr parse_request s             z$BaseHTTPRequestHandler.parse_requestcCs|tj|dSNT)send_response_onlyrZCONTINUE end_headersrrrrr<ps z(BaseHTTPRequestHandler.handle_expect_100c Csz|jd|_t|jdkrBd|_d|_d|_|tj WdS|jsTd|_ WdS| sbWdSd|j}t ||s|tj d|jWdSt||}||jWn:tjy}z |d|d|_ WYd}~dSd}~00dS)Niir!TZdo_zUnsupported method (%r)zRequest timed out: %r)r7readliner)r-r+r&r$r2rZREQUEST_URI_TOO_LONGr'rAhasattrNOT_IMPLEMENTEDgetattrwfileflushrtimeout log_error)rZmnamemethoderrrhandle_one_requests6     z)BaseHTTPRequestHandler.handle_one_requestcCs"d|_||js|qdSrB)r'rPrErrrhandleszBaseHTTPRequestHandler.handleNcCs z|j|\}}Wnty,d\}}Yn0|dur:|}|durF|}|d||||||ddd}|dkr|tjtjtjfvr|j |t j |ddt j |ddd}| d d }|d |j |d tt|||jd kr|r|j|dS)N)???rRzcode %d, message %sr r"Fquote)codemessageexplainzUTF-8replacez Content-TypeContent-LengthZHEAD) responsesKeyErrorrM send_response send_headerrZ NO_CONTENTZ RESET_CONTENT NOT_MODIFIEDerror_message_formathtmlescapeencodeerror_content_typer(r-rDr$rJwrite)rrVrWrXZshortmsgZlongmsgbodyZcontentrrrr2s:      z!BaseHTTPRequestHandler.send_errorcCs:||||||d||d|dS)NZServerZDate) log_requestrCr^version_stringdate_time_stringrrVrWrrrr]s  z$BaseHTTPRequestHandler.send_responsecCsd|jdkr`|dur0||jvr,|j|d}nd}t|ds@g|_|jd|j||fdddS)Nrrr!_headers_bufferz %s %d %s latin-1strict)r&r[rGrkappendr3rcrjrrrrCs    z)BaseHTTPRequestHandler.send_response_onlycCsl|jdkr6t|dsg|_|jd||fdd|dkrh|dkrVd|_n|d krhd |_dS) Nrrkz%s: %s rlrm connectionr"Tr#F)r&rGrkrnrcr;r')rkeywordvaluerrrr^s     z"BaseHTTPRequestHandler.send_headercCs"|jdkr|jd|dS)Nrs )r&rkrn flush_headersrErrrrD s  z"BaseHTTPRequestHandler.end_headerscCs(t|dr$|jd|jg|_dS)Nrk)rGrJrejoinrkrErrrrrs z$BaseHTTPRequestHandler.flush_headers-cCs.t|tr|j}|d|jt|t|dS)Nz "%s" %s %s) isinstancerrq log_messager+r()rrVsizerrrrgs  z"BaseHTTPRequestHandler.log_requestcGs|j|g|RdSN)rwrformatargsrrrrM#s z BaseHTTPRequestHandler.log_errorcGs&tjd||||fdS)Nz%s - - [%s] %s )sysstderrreaddress_stringlog_date_time_stringrzrrrrw1s z"BaseHTTPRequestHandler.log_messagecCs|jd|jS)N )server_version sys_versionrErrrrhGsz%BaseHTTPRequestHandler.version_stringcCs |durt}tjj|ddS)NT)Zusegmt)timeemailutilsZ formatdate)rZ timestamprrrriKsz'BaseHTTPRequestHandler.date_time_stringc CsBt}t|\ }}}}}}}} } d||j|||||f} | S)Nz%02d/%3s/%04d %02d:%02d:%02d)r localtime monthname) rZnowZyearZmonthZdayZhhZmmssxyzsrrrrQs z+BaseHTTPRequestHandler.log_date_time_string)ZMonZTueZWedZThuZFriZSatZSun) NZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs |jdSNr)client_addressrErrrr_sz%BaseHTTPRequestHandler.address_stringHTTP/1.0cCsi|]}||j|jfqSr)phrase description).0vrrr nsz!BaseHTTPRequestHandler.)NN)N)N)ruru)N)*rrrr}r=r,r __version__rDEFAULT_ERROR_MESSAGEr`DEFAULT_ERROR_CONTENT_TYPErdr%rAr<rPrQr2r]rCr^rDrrrgrMrwrhrirZ weekdaynamerrr3r5r6Z HTTPMessager8r __members__valuesr[rrrrrs:ic% 5    rcsteZdZdeZdddddZZddfd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZZS)rz SimpleHTTP/zapplication/gzipapplication/octet-streamzapplication/x-bzip2zapplication/x-xz)z.gzz.Zz.bz2z.xzN directorycs2|durt}t||_tj|i|dSry)osgetcwdfspathrsuper__init__)rrr|kwargs __class__rrrs z!SimpleHTTPRequestHandler.__init__cCs6|}|r2z|||jW|n |0dSry) send_headcopyfilerJr"rfrrrdo_GETs zSimpleHTTPRequestHandler.do_GETcCs|}|r|dSry)rr"rrrrdo_HEADsz SimpleHTTPRequestHandler.do_HEADc Csf||j}d}tj|rtj|j}|jds|t j |d|d|dd|d|df}tj |}| d|| dd | dSd D]&}tj||}tj|r|}qq||S||}|dr|t jd dSzt|d }Wn$ty&|t jd YdS0z t|}d |jvrd|jvrztj|jd } WnttttfyYnz0| j dur| j!t"j#j$d} | j t"j#j$urt"j"%|j&t"j#j$} | j!dd} | | kr|t j'| |(WdS|t j)| d|| dt*|d| d|+|j&| |WS|(Yn0dS)Nrrr r rZLocationrZ0)z index.htmlz index.htmzFile not foundrbzIf-Modified-Sincez If-None-Match)tzinfo)Z microsecond Content-typez Last-Modified),translate_pathr4risdirurllibparseurlsplitendswithr]rZMOVED_PERMANENTLY urlunsplitr^rDrtexistslist_directory guess_typer2 NOT_FOUNDopenOSErrorfstatfilenor9rrZparsedate_to_datetime TypeErrorr1 OverflowErrorr/rrYdatetimetimezoneZutcZ fromtimestampst_mtimer_r"OKr(ri) rr4rpartsZ new_partsZnew_urlindexZctypefsZimsZ last_modifrrrrs~                     z"SimpleHTTPRequestHandler.send_headc Cszt|}Wn"ty0|tjdYdS0|jdddg}ztjj |j dd}Wnt yztj |}Yn0t j |dd}t}d |}|d |d |d ||d ||d||d|D]v}tj ||}|} } tj |r|d} |d} tj |r4|d} |dtjj| ddt j | ddfq|dd||d} t} | | | d|tj|dd||dtt| || S)NzNo permission to list directorycSs|Sry)r;)arrrrsz9SimpleHTTPRequestHandler.list_directory..)key surrogatepasserrorsFrTzDirectory listing for %szZz z@z%s z

%s

z
    r@z
  • %s
  • z

 surrogateescaperrztext/html; charset=%srZ) rlistdirrr2rrsortrrunquoter4UnicodeDecodeErrorrarbr}getfilesystemencodingrnrtrislinkrUrcioBytesIOreseekr]rr^r(r-rD) rr4listrZ displaypathenctitlenamefullnameZ displaynameZlinknameencodedrrrrrsh            z'SimpleHTTPRequestHandler.list_directorycCs|ddd}|ddd}|d}ztjj|dd}Wnty`tj|}Yn0t|}|d}t d|}|j }|D]0}t j |s|t jt jfvrqt j ||}q|r|d7}|S)N?r r#rrr)r,r*rrrrr posixpathnormpathfilterrrr4dirnamecurdirpardirrt)rr4Ztrailing_slashr>Zwordrrrr0s$     z'SimpleHTTPRequestHandler.translate_pathcCst||dSry)shutil copyfileobj)rsourceZ outputfilerrrrNsz!SimpleHTTPRequestHandler.copyfilecCsXt|\}}||jvr"|j|S|}||jvr>|j|St|\}}|rT|SdS)Nr)rsplitextextensions_mapr; mimetypesr)rr4baseextZguess_rrrr^s    z#SimpleHTTPRequestHandler.guess_type)rrrrrrZ_encodings_map_defaultrrrrrrrr __classcell__rrrrrts   X:rc Cs|d\}}}tj|}|d}g}|ddD],}|dkrL|q6|r6|dkr6||q6|r|}|r|dkr|d}q|dkrd}nd}|rd||f}dd||f}d|}|S)Nrrrz..rr!) partitionrrrr,poprnrt) r4rquery path_partsZ head_partspartZ tail_partZ splitpathcollapsed_pathrrr_url_collapse_pathzs.      rcCsntrtSz ddl}Wnty(YdS0z|ddaWn,tyhdtdd|DaYn0tS)Nrrnobodyr r css|]}|dVqdS)r Nr)rrrrr rsznobody_uid..)rpwd ImportErrorgetpwnamr\maxgetpwall)rrrr nobody_uids    rcCst|tjSry)raccessX_OK)r4rrr executablesrc@sReZdZeedZdZddZddZddZ d d gZ d d Z d dZ ddZ dS)rforkrcCs$|r|n|tjddS)NzCan only POST to CGI scripts)is_cgirun_cgir2rrHrErrrdo_POSTs  zCGIHTTPRequestHandler.do_POSTcCs|r|St|SdSry)rr rrrErrrrszCGIHTTPRequestHandler.send_headcCszt|j}|dd}|dkrB|d||jvrB|d|d}q|dkrv|d|||dd}}||f|_dSdS)Nrr rTF)rr4findcgi_directoriescgi_info)rrZdir_sepheadtailrrrrs   zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbincCst|Sry)r)rr4rrr is_executablesz#CGIHTTPRequestHandler.is_executablecCstj|\}}|dvS)N)z.pyz.pyw)rr4rr;)rr4rrrrr is_pythonszCGIHTTPRequestHandler.is_pythonc) Csl|j\}}|d|}|dt|d}|dkr|d|}||dd}||}tj|r||}}|dt|d}q*qq*|d\}}} |d}|dkr|d|||d} }n |d} }|d| } || } tj| s | t j d| dStj | s.| t j d| dS|| } |jsF| sh|| sh| t j d| dSttj}||d <|jj|d <d |d <|j|d <t|jj|d<|j|d<tj|}||d<|||d<| |d<| r| |d<|jd|d<|j d}|r|!}t|dkrddl"}ddl#}|d|d<|d$dkrz"|d%d}|&|'d}Wn|j(t)fyYn&0|!d}t|dkr|d|d<|j ddur|j*|d<n|jd|d<|j d}|r||d<|j d }|r||d!<|j+d"d#}d$,||d%<|j d&}|rP||d'<t-d|j+d(g}d),|}|r|||d*<d+D]}|.|dq|/t j0d,|1| 2d-d.}|jr| g}d/|vr|3|t4}|j56t7}|dkr^t8|d\}}t99|j:gggddr:|j:;ds q:q t<|}|rZ|=d0|dSzZzt>|Wnt?yYn0t@|j:Adt@|j5AdtB| ||Wn(|jC|jD|jtEd1Yn0nddlF} | g}!|| r:tGjH}"|"$Id2r.|"dd3|"d4d}"|"d5g|!}!d/| vrN|!3| |Jd6| K|!z tL|}#WntMtNfyd}#Yn0| jO|!| jP| jP| jP|d7}$|j$d8kr|#dkr|j:;|#}%nd}%t99|j:jQgggddr|j:jQRdsАqq|$S|%\}&}'|j5T|&|'r0|=d9|'|$jUV|$jWV|$jX}(|(r^|=d:|(n |Jd;dS)Ss   c0