JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrU if@sdZdddddgZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZddlmZdd lmZd Zd ZGd ddejZGd ddejeZGdddej Z!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,de0d-d.d/e-1Z2e2j3re'Z4nee"e2j5d0Z4Gd1d2d2eZ6e)e4e6e2j7e2j8d3dS)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 @sFeZdZdejdZdeZe Z e Z dZ ddZddZd d Zd d ZdEddZdFddZdGddZddZddZddZdHddZddZedd eed!ed"d#DZd$ee d%<d&d'Z!d(d)Z"dId*d+Z#d,d-Z$d.d/d0d1d2d3d4gZ%d d5d6d7d8d9d:d;dd?d@g Z&dAdBZ'dCZ(e)j*j+Z,dDd e-j./DZ0d S)JrzPython/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|||_|_|j drd |jd |_ztjj|j|jd|_Wntjjk r(}z|tjdt|WYdSd}~XYnBtjjk rh}z|tjdt|WYdSd}~XYnX|jdd} | dkrd|_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//)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_SUPPORTEDpathlstriphttpclientZ parse_headersrfile MessageClassheadersZ LineTooLongZREQUEST_HEADER_FIELDS_TOO_LARGEZ HTTPExceptiongetlowerhandle_expect_100) rversionr)wordsZbase_version_numberZversion_numberr"r2errZconntypeZexpectrrr parse_requests             z$BaseHTTPRequestHandler.parse_requestcCs|tj|dSNT)send_response_onlyrZCONTINUE end_headersrrrrr;xs 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)r6readliner'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%rMrCrrrhandleszBaseHTTPRequestHandler.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)???rOzcode %d, message %srr Fquote)codemessageexplainzUTF-8replacez Content-TypeContent-LengthZHEAD) responsesKeyErrorrJ send_response send_headerrZ NO_CONTENTZ RESET_CONTENT NOT_MODIFIEDerror_message_formathtmlescapeencodeerror_content_typer&r+rBr"rHwrite)rrSrTrUZshortmsgZlongmsgZbodyZcontentrrrr0s:     z!BaseHTTPRequestHandler.send_errorcCs:||||||d||d|dS)NZServerZDate) log_requestrAr[version_stringdate_time_stringrrSrTrrrrZs  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$rXrErgappendr1r`rfrrrrAs    z)BaseHTTPRequestHandler.send_response_onlycCsl|jdkr6t|dsg|_|jd||fdd|dkrh|dkrVd|_n|d krhd |_dS) Nrrgz%s: %s rhriZ connectionr Tr!F)r$rErgrjr`r:r%)rkeywordvaluerrrr[s     z"BaseHTTPRequestHandler.send_headercCs"|jdkr|jd|dS)Nrs )r$rgrj flush_headersrCrrrrBs  z"BaseHTTPRequestHandler.end_headerscCs(t|dr$|jd|jg|_dS)Nrg)rErHrbjoinrgrCrrrrms z$BaseHTTPRequestHandler.flush_headers-cCs.t|tr|j}|d|jt|t|dS)Nz "%s" %s %s) isinstancerrl log_messager)r&)rrSsizerrrrc s z"BaseHTTPRequestHandler.log_requestcGs|j|f|dSN)rr)rformatargsrrrrJ+s z BaseHTTPRequestHandler.log_errorcCsi|]}|d|dqS)z\xZ02xr).0crrr ;sz!BaseHTTPRequestHandler. z\\\cGs2||}tjd||||jfdS)Nz%s - - [%s] %s )sysstderrrbaddress_stringlog_date_time_string translate_control_char_table)rrurvrTrrrrr>s z"BaseHTTPRequestHandler.log_messagecCs|jd|jS)N )server_version sys_versionrCrrrrdXsz%BaseHTTPRequestHandler.version_stringcCs |dkrt}tjj|ddS)NT)Zusegmt)timeemailutilsZ formatdate)rZ timestamprrrre\sz'BaseHTTPRequestHandler.date_time_stringc CsBt}t|\ }}}}}}}} } d||j|||||f} | S)Nz%02d/%3s/%04d %02d:%02d:%02d)r localtime monthname) rZnowZyearZmonthZdayZhhZmmZssxyzsrrrrbsz+BaseHTTPRequestHandler.log_date_time_stringZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs |jdSNr)client_addressrCrrrrpsz%BaseHTTPRequestHandler.address_stringHTTP/1.0cCsi|]}||j|jfqSr)phraseZ description)rwvrrrrys)NN)N)N)rprp)N)1rrrr~r<r*r __version__rDEFAULT_ERROR_MESSAGEr]DEFAULT_ERROR_CONTENT_TYPErar#r?r;rMrNr0rZrAr[rBrmrcrJr& maketrans itertoolschainrangerordrrrdrerZ weekdaynamerrr1r4r5Z HTTPMessager7r __members__valuesrXrrrrrs\ij% 5     cseZdZdeZddfdd ZddZdd Zd d Zd d Z ddZ ddZ ddZ e jshe e jZedddddZS)rz SimpleHTTP/N directorycs(|dkrt}||_tj||dSrt)osgetcwdrsuper__init__)rrrvkwargs __class__rrrsz!SimpleHTTPRequestHandler.__init__cCs.|}|r*z|||jW5|XdSrt) send_headr copyfilerHrfrrrdo_GETs zSimpleHTTPRequestHandler.do_GETcCs|}|r|dSrt)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-typerWz Last-Modified),translate_pathr2risdirurllibparseZurlsplitendswithrZrZMOVED_PERMANENTLYZ urlunsplitr[rBroexistslist_directory guess_typer0 NOT_FOUNDopenOSErrorfstatfilenor8rrZparsedate_to_datetime TypeErrorr/ OverflowErrorr-rrVdatetimetimezoneZutcZ fromtimestampst_mtimer\r OKr&re) rr2rpartsZ new_partsZnew_urlindexZctypeZfsZimsZ last_modifrrrrs                  z"SimpleHTTPRequestHandler.send_headc Cszt|}Wn$tk r2|tjdYdSX|jdddg}ztjj |j dd}Wn"t k rtj |j }YnXt j |dd}t}d |}|d |d |d ||d ||d||d|D]v}tj ||}|} } tj |r$|d} |d} tj |r:|d} |dtjj| ddt j | ddfq|dd||d} t} | | | d|tj|dd||dtt| || S)NzNo permission to list directorycSs|Srt)r:)arrrrnz9SimpleHTTPRequestHandler.list_directory..)key surrogatepasserrorsFrQzDirectory listing for %szZz z@z%s z

%s

z
    r@z
  • %s
  • z

 surrogateescaperrztext/html; charset=%srW) rlistdirrr0rrsortrrunquoter2UnicodeDecodeErrorr^r_r~getfilesystemencodingrjrorislinkrRr`ioBytesIOrbseekrZrr[r&r+rB) 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 posixpathnormpathfilterrrr2dirnamecurdirpardirro)rr2Ztrailing_slashr=Zwordrrrr:s$    z'SimpleHTTPRequestHandler.translate_pathcCst||dSrt)shutilZ copyfileobj)rsourceZ outputfilerrrrXsz!SimpleHTTPRequestHandler.copyfilecCsLt|\}}||jkr"|j|S|}||jkr>|j|S|jdSdS)Nr)rsplitextextensions_mapr:)rr2baseZextrrrrhs    z#SimpleHTTPRequestHandler.guess_typezapplication/octet-streamz text/plain)r.pyz.cz.h)rrrrrrrrrrrrr mimetypesZinitedZinitZ types_mapcopyrupdate __classcell__rrrrrs$  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*poprjro) r2_query path_partsZ head_partspartZ tail_partZ splitpathcollapsed_pathrrr_url_collapse_paths.      rcCsrtrtSz ddl}Wntk r*YdSXz|ddaWn.tk rldtdd|DaYnXtS)Nrrnobodyr r css|]}|dVqdS)r Nr)rwrrrr sznobody_uid..)rpwd ImportErrorgetpwnamrYmaxZgetpwall)rrrr nobody_uids  rcCst|tjSrt)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_cgir0rrFrCrrrdo_POSTs  zCGIHTTPRequestHandler.do_POSTcCs|r|St|SdSrt)rrrrrCrrrrszCGIHTTPRequestHandler.send_headcCsPt|j}|dd}|d|||dd}}||jkrL||f|_dSdS)Nrr TF)rr2findcgi_directoriescgi_info)rrZdir_sepheadtailrrrrs    zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbincCst|Srt)r)rr2rrr is_executablesz#CGIHTTPRequestHandler.is_executablecCstj|\}}|dkS)N)rz.pyw)rr2rr:)rr2r r rrr 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   s 0