U ,a@sdZdddddgZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlmZdd lmZd Zd ZGd ddejZGd ddejeZGdddejZ Gddde Z!ddZ"da#ddZ$ddZ%Gddde!Z&ddZ'e edddfddZ(e)dkrddl*Z*e*+Z,e,j-ddd d!e,j-d"d#d$d%d&e,j-d'd(e .d)d*e,j-d+d,de/d-d.d/e,0Z1e1j2re&Z3nee!e1j4d0Z3Gd1d2d2eZ5e(e3e5e1j6e1j7d3dS)4z0.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_addresssocketZgetfqdn server_name server_port)selfhostportr0/opt/alt/python38/lib64/python3.8/http/server.pyr s  zHTTPServer.server_bindN)__name__ __module__ __qualname__Zallow_reuse_addressr rrrrrsc@seZdZdZdS)rTN)rrrZdaemon_threadsrrrrrsc @seZdZdejdZdeZe Z e Z dZ ddZddZd d Zd d Zd?ddZd@ddZdAddZddZddZddZdBddZddZdd Zd!d"ZdCd#d$Zd%d&Zd'd(d)d*d+d,d-gZd d.d/d0d1d2d3d4d5d6d7d8d9g Zd:d;Z de&j'(DZ)d S)DrzPython/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 fk r|tjd |YdSX|dkr|jdkrd|_|dkr |tjd|dS||_d t |krBdksZn|tjd|dS|dd \}}t |d krd|_|dkr|tjd|dS|||_|_ztjj|j|jd|_Wntjjk r}z|tjdt|WYdSd}~XYnBtjjk rH}z|tjdt|WYdSd}~XYnX|jdd} | dkrnd|_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)ZGETzBad 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"r2errZconntypeZexpectrrr 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<tjk r}z|d|d|_ WYdSd}~XYnXdS)NiirTZdo_zUnsupported method (%r)zRequest timed out: %r)r5readliner'r+r)r$r"r0rZREQUEST_URI_TOO_LONGr%r>hasattrNOT_IMPLEMENTEDgetattrwfileflushrZtimeout log_error)rZmnamemethoderrrhandle_one_requests6     z)BaseHTTPRequestHandler.handle_one_requestcCs"d|_||js|qdSr?)r%rLrBrrrhandleszBaseHTTPRequestHandler.handleNcCs z|j|\}}Wntk r.d\}}YnX|dkr<|}|dkrH|}|d||||||ddd}|dkr|tjtjtjfkr|j |t j |ddt j |ddd}| d d }|d |j |d tt|||jd kr|r|j|dS)N)???rNzcode %d, message %srr Fquote)codemessageexplainzUTF-8replacez Content-TypeContent-LengthZHEAD) responsesKeyErrorrI send_response send_headerrZ NO_CONTENTZ RESET_CONTENT NOT_MODIFIEDerror_message_formathtmlescapeencodeerror_content_typer&r+rAr"rGwrite)rrRrSrTZshortmsgZlongmsgZbodyZcontentrrrr0s:     z!BaseHTTPRequestHandler.send_errorcCs:||||||d||d|dS)NZServerZDate) log_requestr@rZversion_stringdate_time_stringrrRrSrrrrYs  z$BaseHTTPRequestHandler.send_responsecCsd|jdkr`|dkr0||jkr,|j|d}nd}t|ds@g|_|jd|j||fdddS)Nrrr_headers_bufferz %s %d %s latin-1strict)r$rWrDrfappendr1r_rerrrr@s    z)BaseHTTPRequestHandler.send_response_onlycCsl|jdkr6t|dsg|_|jd||fdd|dkrh|dkrVd|_n|d krhd |_dS) Nrrfz%s: %s rgrhZ connectionr Tr!F)r$rDrfrir_r9r%)rkeywordvaluerrrrZs     z"BaseHTTPRequestHandler.send_headercCs"|jdkr|jd|dS)Nrs )r$rfri flush_headersrBrrrrA s  z"BaseHTTPRequestHandler.end_headerscCs(t|dr$|jd|jg|_dS)Nrf)rDrGrajoinrfrBrrrrls z$BaseHTTPRequestHandler.flush_headers-cCs.t|tr|j}|d|jt|t|dS)Nz "%s" %s %s) isinstancerrk log_messager)r&)rrRsizerrrrbs z"BaseHTTPRequestHandler.log_requestcGs|j|f|dSN)rqrformatargsrrrrI#s z BaseHTTPRequestHandler.log_errorcGs&tjd||||fdS)Nz%s - - [%s] %s )sysstderrraaddress_stringlog_date_time_stringrtrrrrq1s z"BaseHTTPRequestHandler.log_messagecCs|jd|jS)N )server_version sys_versionrBrrrrcGsz%BaseHTTPRequestHandler.version_stringcCs |dkrt}tjj|ddS)NT)Zusegmt)timeemailutilsZ formatdate)rZ timestamprrrrdKsz'BaseHTTPRequestHandler.date_time_stringc CsBt}t|\ }}}}}}}} } d||j|||||f} | S)Nz%02d/%3s/%04d %02d:%02d:%02d)r~ localtime monthname) rZnowZyearZmonthZdayZhhZmmZssxyzsrrrrzQsz+BaseHTTPRequestHandler.log_date_time_stringZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs |jdSNr)client_addressrBrrrry_sz%BaseHTTPRequestHandler.address_stringHTTP/1.0cCsi|]}||j|jfqSr)phraseZ description).0vrrr nsz!BaseHTTPRequestHandler.)NN)N)N)roro)N)*rrrrwr;r*r} __version__r|DEFAULT_ERROR_MESSAGEr\DEFAULT_ERROR_CONTENT_TYPEr`r#r>r:rLrMr0rYr@rZrArlrbrIrqrcrdrzZ weekdaynamerryr1r3r4Z HTTPMessager6r __members__valuesrWrrrrrsTic% 5    cseZdZdeZddfdd ZddZdd Zd d Zd d Z ddZ ddZ ddZ e jshe e jZedddddZS)rz SimpleHTTP/N directorycs(|dkrt}||_tj||dSrs)osgetcwdrsuper__init__)rrrvkwargs __class__rrrsz!SimpleHTTPRequestHandler.__init__cCs.|}|r*z|||jW5|XdSrs) send_headr copyfilerGrfrrrdo_GETs zSimpleHTTPRequestHandler.do_GETcCs|}|r|dSrs)rr rrrrdo_HEADsz SimpleHTTPRequestHandler.do_HEADc Cs^||j}d}tj|rtj|j}|jds|t j |d|d|dd|d|df}tj |}| d|| dSdD]&}tj||}tj|r|}qq||S||}|dr|t jd dSzt|d }Wn&tk r|t jd YdSXz"t|}d |jkrd |jkrztj|jd } Wnttttfk r|YnzX| j dkr| j!t"j#j$d } | j t"j#j$krt"j"%|j&t"j#j$} | j!dd} | | kr|t j'| |(WdS|t j)| d|| dt*|d| d|+|j&| |WS|(YnXdS)Nrrr r rZLocation)z index.htmlz index.htmzFile not foundrbzIf-Modified-Sincez If-None-Match)tzinfo)Z microsecond Content-typerVz Last-Modified),translate_pathr2risdirurllibparseZurlsplitendswithrYrZMOVED_PERMANENTLYZ urlunsplitrZrArnexistslist_directory guess_typer0 NOT_FOUNDopenOSErrorfstatfilenor7rrZparsedate_to_datetime TypeErrorr/ OverflowErrorr-rrUdatetimetimezoneZutcZ fromtimestampst_mtimer[r OKr&rd) rr2rpartsZ new_partsZnew_urlindexZctypeZfsZimsZ last_modifrrrrs                  z"SimpleHTTPRequestHandler.send_headc Cszt|}Wn$tk r2|tjdYdSX|jdddg}ztjj |j dd}Wn t k r~tj |}YnXt j |dd}t}d |}|d |d |d ||d ||d||d|D]v}tj ||}|} } tj |r"|d} |d} tj |r8|d} |dtjj| ddt j | ddfq|dd||d} t} | | | d|tj|dd||dtt| || S)NzNo permission to list directorycSs|Srs)r9)arrrrmz9SimpleHTTPRequestHandler.list_directory..)key surrogatepasserrorsFrPzDirectory listing for %szZz z@z%s z

%s

z
    r@z
  • %s
  • z

 surrogateescaperrztext/html; charset=%srV) rlistdirrr0rrsortrrunquoter2UnicodeDecodeErrorr]r^rwgetfilesystemencodingrirnrislinkrQr_ioBytesIOraseekrYrrZr&r+rA) rr2listrZ displaypathenctitlenamefullnameZ displaynameZlinknameZencodedrrrrrsh          z'SimpleHTTPRequestHandler.list_directorycCs|ddd}|ddd}|d}ztjj|dd}Wn tk rbtj|}YnXt|}|d}t d|}|j }|D]0}t j |s|t jt jfkrqt j ||}q|r|d7}|S)N?r r#rrr)r*r(rrrrr posixpathnormpathfilterrrr2dirnamecurdirpardirrn)rr2Ztrailing_slashr<Zwordrrrr)s$    z'SimpleHTTPRequestHandler.translate_pathcCst||dSrs)shutilZ copyfileobj)rsourceZ outputfilerrrrGsz!SimpleHTTPRequestHandler.copyfilecCsLt|\}}||jkr"|j|S|}||jkr>|j|S|jdSdS)Nr)rsplitextextensions_mapr9)rr2baseZextrrrrWs    z#SimpleHTTPRequestHandler.guess_typezapplication/octet-streamz text/plain)r.pyz.cz.h)rrrrr|rrrrrrrr mimetypesZinitedZinitZ types_mapcopyrupdate __classcell__rrrrrts$  W: c 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*poprirn) r2_query path_partsZ head_partspartZ tail_partZ splitpathcollapsed_pathrrr_url_collapse_path|s.      rcCsrtrtSz ddl}Wntk r*YdSXz|ddaWn.tk rldtdd|DaYnXtS)Nrrnobodyr r css|]}|dVqdS)r Nr)rrrrr sznobody_uid..)rpwd ImportErrorgetpwnamrXmaxZgetpwall)rrrr nobody_uids  rcCst|tjSrs)raccessX_OK)r2rrr executablesrc@sReZdZeedZdZddZddZddZ d d gZ d d Z d dZ ddZ dS)rforkrcCs$|r|n|tjddS)NzCan only POST to CGI scripts)is_cgirun_cgir0rrErBrrrdo_POSTs  zCGIHTTPRequestHandler.do_POSTcCs|r|St|SdSrs)rrrrrBrrrrszCGIHTTPRequestHandler.send_headcCsPt|j}|dd}|d|||dd}}||jkrL||f|_dSdS)Nrr TF)rr2findcgi_directoriescgi_info)rrZdir_sepheadtailrrrrs    zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbincCst|Srs)r)rr2rrr is_executablesz#CGIHTTPRequestHandler.is_executablecCstj|\}}|dkS)N)rz.pyw)rr2rr9)rr2rrrrr is_pythonszCGIHTTPRequestHandler.is_pythonc) Cs|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)fk rYn&X|!d}t|dkr|d|d<|j ddkr|j*|d<n|jd|d<|j d}|r||d<|j d }|r||d!<g}|j+d"D]>}|ddd#krR|,|-n||d$d!d%}q,d%.||d&<|j d'}|r||d(<t/d|j0d)g}d*.|}|r||d+<d,D]}|1|dq|2t j3d-|4| 5d.d/}|jr| g}d0|kr|,|t6}|j78t9}|dkrt:|d\}}t;;|jd1|dSz\zt?|Wnt@k rYnXtA|j|jq |$T|%\}&}'|j7U|&|'rj|>d:|'|$jVW|$jXW|$jY}(|(r|>d1|(n |Kd;dS)Ss   c 0