JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbra XC?hg@sdZgdZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlmZdZdZGdddejZGd d d ejeZGd d d ejZGd ddeZddZ da!ddZ"ddZ#GdddeZ$ddZ%eedddfddZ&e'dkrddl(Z(ddl)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+/Z0e0j1re$Z2neZ2Gd0d1d1eZ3e&e2e3e0j4e0j5d2dS)3z0.6) HTTPServerThreadingHTTPServerBaseHTTPRequestHandlerSimpleHTTPRequestHandlerCGIHTTPRequestHandlerN) 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/python39/lib64/python3.9/http/server.pyr s  zHTTPServer.server_bindN)__name__ __module__ __qualname__Zallow_reuse_addressr rrrrrsrc@seZdZdZdS)rTN)rrrZdaemon_threadsrrrrrsrc @s&eZdZdejdZdeZe Z e Z dZ ddZddZd d Zd d Zd4ddZd5ddZd6ddZddZddZddZd7ddZddZedd eed!ed"d#DZd$ee d%<d&d'Z!d(d)Z"d8d*d+Z#d,d-Z$gd.Z%gd/Z&d0d1Z'd2Z(e)j*j+Z,d3d e-j./DZ0d S)9rzPython/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 |krhasattrNOT_IMPLEMENTEDgetattrwfileflushr Ztimeout log_error)rZmnamemethoderrrhandle_one_requests6     z)BaseHTTPRequestHandler.handle_one_requestcCs"d|_||js|qdSr?)r$rLrBrrrhandleszBaseHTTPRequestHandler.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)???rNzcode %d, message %srrFquote)codemessageexplainzUTF-8replacez Content-TypeContent-LengthZHEAD) responsesKeyErrorrI send_response send_headerrZ NO_CONTENTZ RESET_CONTENT NOT_MODIFIEDerror_message_formathtmlescapeencodeerror_content_typer%r*rAr!rGwrite)rrRrSrTZshortmsgZlongmsgbodyZcontentrrrr/s:      z!BaseHTTPRequestHandler.send_errorcCs:||||||d||d|dS)NZServerZDate) log_requestr@rZversion_stringdate_time_stringrrRrSrrrrYs  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#rWrDrgappendr0r_rfrrrr@s    z)BaseHTTPRequestHandler.send_response_onlycCsl|jdkr6t|dsg|_|jd||fdd|dkrh|dkrVd|_n|d krhd |_dS) Nrrgz%s: %s rhriZ connectionrTr F)r#rDrgrjr_r9r$)rkeywordvaluerrrrZs     z"BaseHTTPRequestHandler.send_headercCs"|jdkr|jd|dS)Nrs )r#rgrj flush_headersrBrrrrAs  z"BaseHTTPRequestHandler.end_headerscCs(t|dr$|jd|jg|_dS)Nrg)rDrGrajoinrgrBrrrrms z$BaseHTTPRequestHandler.flush_headers-cCs.t|tr|j}|d|jt|t|dS)Nz "%s" %s %s) isinstancerrl log_messager(r%)rrRsizerrrrcs  z"BaseHTTPRequestHandler.log_requestcGs|j|g|RdSN)rr)rformatargsrrrrI)s z BaseHTTPRequestHandler.log_errorcCsi|]}|d|dqS)z\xZ02xr).0crrr 9rnz!BaseHTTPRequestHandler. z\\\cGs2||}tjd||||jfdS)Nz%s - - [%s] %s )sysstderrraaddress_stringlog_date_time_string translate_control_char_table)rrurvrSrrrrr<s z"BaseHTTPRequestHandler.log_messagecCs|jd|jS)N )server_version sys_versionrBrrrrdVsz%BaseHTTPRequestHandler.version_stringcCs |durt}tjj|ddS)NT)Zusegmt)timeemailutilsZ formatdate)rZ timestamprrrreZsz'BaseHTTPRequestHandler.date_time_stringc CsBt}t|\ }}}}}}}} } d||j|||||f} | S)Nz%02d/%3s/%04d %02d:%02d:%02d)r localtime monthname) rZnowZyearZmonthZdayZhhZmmZssxyzsrrrr`s z+BaseHTTPRequestHandler.log_date_time_string)ZMonZTueZWedZThuZFriZSatZSun) NZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs |jdSNr)client_addressrBrrrrnsz%BaseHTTPRequestHandler.address_stringHTTP/1.0cCsi|]}||j|jfqSr)phraseZ description)rwvrrrry}s)NN)N)N)rprp)N)1rrrr~r;r)r __version__rDEFAULT_ERROR_MESSAGEr\DEFAULT_ERROR_CONTENT_TYPEr`r"r>r:rLrMr/rYr@rZrArmrcrIr% maketrans itertoolschainrangerordrrrdrerZ weekdaynamerrr0r3r4Z HTTPMessager6r __members__valuesrWrrrrrsBij% 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|dSrt)osgetcwdfspathrsuper__init__)rrrvkwargs __class__rrrs z!SimpleHTTPRequestHandler.__init__cCs6|}|r2z|||jW|n |0dSrt) send_headcopyfilerGrrfrrrdo_GETs zSimpleHTTPRequestHandler.do_GETcCs|}|r|dSrt)rrrrrrdo_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)Nrrrr rZLocationrV0)z index.htmlz index.htmzFile not foundrbzIf-Modified-Sincez If-None-Match)tzinfo)Z microsecond Content-typez Last-Modified),translate_pathr1risdirurllibparseZurlsplitendswithrYrZMOVED_PERMANENTLYZ urlunsplitrZrAroexistslist_directory guess_typer/ NOT_FOUNDopenOSErrorfstatfilenor7rrZparsedate_to_datetime TypeErrorr. OverflowErrorr,rrUdatetimetimezoneZutcZ fromtimestampst_mtimer[rOKr%re) rr1rpartsZ new_partsZnew_urlindexZctypeZfsZimsZ last_modifrrrrs~                     z"SimpleHTTPRequestHandler.send_headc Cszt|}Wn"ty0|tjdYdS0|jdddg}ztjj |j dd}Wn t y|tj |j }Yn0t j |dd}t}d |}|d |d |d ||d ||d||d|D]v}tj ||}|} } tj |r |d} |d} tj |r6|d} |dtjj| ddt j | ddfq|dd||d} t} | | | d|tj|dd||dtt| || S)NzNo permission to list directorycSs|Srt)r9)arrrrnz9SimpleHTTPRequestHandler.list_directory..)key surrogatepasserrorsFrPzDirectory listing for %szZz z@z%s z

%s

z
    r@z
  • %s
  • z

 surrogateescaperrztext/html; charset=%srV) rlistdirrr/rrsortrrunquoter1UnicodeDecodeErrorr]r^r~getfilesystemencodingrjrorislinkrQr_ioBytesIOraseekrYrrZr%r*rA) rr1listrZ displaypathenctitlenamefullnameZ displaynameZlinknameZencodedrrrrrsh            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?rr#rrr)r)r'rrrrr posixpathnormpathfilterrrr1dirnamecurdirpardirro)rr1Ztrailing_slashr<Zwordrrrr?s$     z'SimpleHTTPRequestHandler.translate_pathcCst||dSrt)shutilZ copyfileobj)rsourceZ outputfilerrrr]sz!SimpleHTTPRequestHandler.copyfilecCsXt|\}}||jvr"|j|S|}||jvr>|j|St|\}}|rT|SdS)Nr)rsplitextextensions_mapr9 mimetypesr)rr1baseZextZguess_rrrrms    z#SimpleHTTPRequestHandler.guess_type)rrrrrrZ_encodings_map_defaultrrrrrrrr __classcell__rrrrrs   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)poprjro) r1rquery path_partsZ head_partspartZ tail_partZ splitpathcollapsed_pathrrr_url_collapse_paths.      rcCsntrtSz ddl}Wnty(YdS0z|ddaWn,tyhdtdd|DaYn0tS)Nrrnobodyr rcss|]}|dVqdS)r Nr)rwrrrr rnznobody_uid..)rpwd ImportErrorgetpwnamrXmaxZgetpwall)rrrr nobody_uids    rcCst|tjSrt)raccessX_OK)r1rrr executablesrc@sReZdZeedZdZddZddZddZ d d gZ d d Z d dZ ddZ dS)rforkrcCs$|r|n|tjddS)NzCan only POST to CGI scripts)is_cgirun_cgir/rrErBrrrdo_POSTs  zCGIHTTPRequestHandler.do_POSTcCs|r|St|SdSrt)rrrrrBrrrrszCGIHTTPRequestHandler.send_headcCszt|j}|dd}|dkrB|d||jvrB|d|d}q|dkrv|d|||dd}}||f|_dSdS)NrrrTF)rr1findcgi_directoriescgi_info)rrZdir_sepheadtailrrrrs   zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbincCst|Srt)r)rr1rrr is_executablesz#CGIHTTPRequestHandler.is_executablecCstj|\}}|dvS)N)z.pyz.pyw)rr1rr9)rr1r r rrr 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  s0