B YI~d@sdZdddddgZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlmZdd lmZd Zd ZGd ddejZGd ddejeZGdddejZ Gddde Z!ddZ"da#ddZ$ddZ%Gddde!Z&e edddfddZ'e(dkrddl)Z)e)*Z+e+j,dddd e+j,d!d"dd#d$d%e+j,d&d'e -d(d)e+j,d*d+de.d,d-d.e+/Z0e0j1re&Z2nee!e0j3d/Z2e'e2e0j4e0j5d0dS)1z0.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_bindserver_addresssocketZgetfqdn server_name server_port)selfhostportr0/opt/alt/python37/lib64/python3.7/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/zHTTP/0.9c Csd|_|j|_}d|_t|jd}|d}||_|}t |dkrLdSt |dkr |d}yT| dsrt |d d d }|d }t |d krt t |dt |d f}Wn*t t fk r|tjd |dSX|dkr|jdkrd|_|dkr|tjd|dS||_d t |kr:sz!BaseHTTPRequestHandler. z\\\cGs2||}tjd||||jfdS)Nz%s - - [%s] %s )sysstderrr]address_stringlog_date_time_string translate_control_char_table)rrmrnrPrrrrk=s z"BaseHTTPRequestHandler.log_messagecCs|jd|jS)N )server_version sys_version)rrrrr_Wsz%BaseHTTPRequestHandler.version_stringcCs |dkrt}tjj|ddS)NT)Zusegmt)timeemailutilsZ formatdate)rZ timestamprrrr`[sz'BaseHTTPRequestHandler.date_time_stringc CsBt}t|\ }}}}}}}} } d||j|||||f} | S)Nz%02d/%3s/%04d %02d:%02d:%02d)rZ localtime monthname) rZnowZyearZmonthZdayZhhZmmssxyzsrrrryas z+BaseHTTPRequestHandler.log_date_time_stringZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs |jdS)Nr)client_address)rrrrrxosz%BaseHTTPRequestHandler.address_stringzHTTP/1.0cCsi|]}|j|jf|qSr)phrase description)rovrrrrq~s)NN)N)N)riri)N)1rrrrvr;r)r~ __version__r}DEFAULT_ERROR_MESSAGErXDEFAULT_ERROR_CONTENT_TYPEr\r"r?r:rKrLr/rUr@rVrArfr^rHr% maketrans itertoolschainranger{ordrkr_r`ryZ weekdaynamerrxr0r3r4Z HTTPMessager6r __members__valuesrSrrrrrsBij% 5  "    cseZdZdeZddfdd ZddZdd Zd d Zd d Z ddZ ddZ ddZ e jshe e jZedddddZS)rz SimpleHTTP/N) directorycs(|dkrt}||_tj||dS)N)osgetcwdrsuper__init__)rrrnkwargs) __class__rrrsz!SimpleHTTPRequestHandler.__init__cCs.|}|r*z|||jWd|XdS)N) send_headcopyfilerFr )rfrrrdo_GETs zSimpleHTTPRequestHandler.do_GETcCs|}|r|dS)N)rr )rrrrrdo_HEADsz SimpleHTTPRequestHandler.do_HEADc Cs>||j}d}tj|rtj|j}|jds|t j |d|d|dd|d|df}tj |}| d|| dSx6dD]$}tj||}tj|r|}PqW||S||}yt|d }Wn$tk r|t jd dSXyt|}d |jkrd |jkrytj|jd } Wnttttfk r`YnxX| j dkr~| j!t"j#j$d } | j t"j#j$krt"j"%|j&t"j#j$} | j!dd} | | kr|t j'| |(dS|t j)| d|| dt*|d| d|+|j&| |S|(YnXdS)Nrrr r rZLocation)z index.htmlz index.htmrbzFile not foundzIf-Modified-Sincez If-None-Match)tzinfo)Z microsecondz Content-typezContent-Lengthz Last-Modified),translate_pathr1risdirurllibparseZurlsplitendswithrUrZMOVED_PERMANENTLYZ urlunsplitrVrArhexistslist_directory guess_typeopenOSErrorr/ NOT_FOUNDfstatfilenor7rrZparsedate_to_datetime TypeErrorr. OverflowErrorr,rrRdatetimeZtimezoneZutcZ fromtimestampst_mtimerWr OKr%r`) rr1rpartsZ new_partsZnew_urlindexZctypeZfsZimsZ last_modifrrrrsl                  z"SimpleHTTPRequestHandler.send_headc Csyt|}Wn"tk r0|tjddSX|jdddg}ytjj |j dd}Wn"t k r~tj |j }YnXt j |dd}t}d |}|d |d |d ||d ||d||dx~|D]v}tj ||}|} } tj |r$|d} |d} tj |r:|d} |dtjj| ddt j | ddfqW|dd||d} t} | | | d|tj|dd||dtt| || S)NzNo permission to list directorycSs|S)N)r9)arrrrgz9SimpleHTTPRequestHandler.list_directory..)key surrogatepass)errorsF)rNzDirectory listing for %szZz z@z%s z

%s

z
    r@z
  • %s
  • z

 surrogateescaperz Content-typeztext/html; charset=%szContent-Length) rlistdirrr/rrsortrrunquoter1UnicodeDecodeErrorrYrZrvgetfilesystemencodingrcrhrislinkrNr[ioBytesIOr]seekrUrrVr%r*rA) rr1listrZ displaypathenctitlenamefullnameZ displaynameZlinknameZencodedrrrrrs\          z'SimpleHTTPRequestHandler.list_directorycCs|ddd}|ddd}|d}ytjj|dd}Wn tk rbtj|}YnXt|}|d}t d|}|j }x8|D]0}t j |s|t jt jfkrqt j ||}qW|r|d7}|S)N?r r#rr)r)r)r'rrrrr posixpathnormpathfilterrrr1dirnamecurdirpardirrh)rr1Ztrailing_slashr<Zwordrrrr1s$     z'SimpleHTTPRequestHandler.translate_pathcCst||dS)N)shutilZ copyfileobj)rsourceZ outputfilerrrrOsz!SimpleHTTPRequestHandler.copyfilecCsLt|\}}||jkr"|j|S|}||jkr>|j|S|jdSdS)Nr)rsplitextextensions_mapr9)rr1baseZextrrrr_s    z#SimpleHTTPRequestHandler.guess_typezapplication/octet-streamz text/plain)rz.pyz.cz.h)rrrrr}rrrrrrrr mimetypesZinitedZinitZ types_mapcopyrupdate __classcell__rr)rrrs"  O: c Cs|d\}}}tj|}|d}g}x<|ddD],}|dkrN|q8|r8|dkr8||q8W|r|}|r|dkr|d}q|dkrd}nd}|rd||f}dd||f}d|}|S)Nrrrz..rr) partitionrrrr)poprcrh) r1_query path_partsZ head_partspartZ tail_partZ splitpathcollapsed_pathrrr_url_collapse_paths.     rcCsptrtSy ddl}Wntk r(dSXy|ddaWn.tk rjdtdd|DaYnXtS)Nrrnobodyr r css|]}|dVqdS)r Nr)rorrrr sznobody_uid..)rpwd ImportErrorgetpwnamrTmaxZgetpwall)rrrr nobody_uids  rcCst|tjS)N)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/rrD)rrrrdo_POSTs  zCGIHTTPRequestHandler.do_POSTcCs|r|St|SdS)N)rrrr)rrrrrszCGIHTTPRequestHandler.send_headcCsPt|j}|dd}|d|||dd}}||jkrL||f|_dSdS)Nrr TF)rr1findcgi_directoriescgi_info)rrZdir_sepheadtailrrrrs    zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbincCst|S)N)r)rr1rrr is_executable sz#CGIHTTPRequestHandler.is_executablecCstj|\}}|dkS)N)z.pyz.pyw)rr1rr9)rr1rrrrr is_pythonszCGIHTTPRequestHandler.is_pythonc) Cs|j\}}|d|}|dt|d}x`|dkr|d|}||dd}||}tj|r||}}|dt|d}q,Pq,W|d\}}} |d}|dkr|d|||d} }n |d} }|d| } || } tj| s| t j d| dStj | s2| t j d| dS|| } |jsJ| sl|| sl| 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$dkry"|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}xN|j+d"D]>}|ddd#krX|,|-n||d$d!d%}q2Wd%.||d&<|j d'}|r||d(<t/d|j0d)g}d*.|}|r||d+<xd,D]}|1|dqW|2t j3d-|4| 5d.d/}|jr,| g}d0|kr(|,|t6}|j78t9}|dkrt:|d\}}x0t;;|jd1|dSy\yt?|Wnt@k rYnXtA|jd:|'|$jVW|$jXW|$jY}(|(r|>d1|(n |Kd;dS)Serving HTTP on {host} port {port} (http://{host}:{port}/) ...rr )rrz& Keyboard interrupt received, exiting.) r0rZ getsocknameprintrmZ serve_foreverKeyboardInterruptrvexit) HandlerClassZ ServerClassZprotocolrbindrZhttpdZsaZ serve_messagerrrtests   r9__main__z--cgi store_truezRun as CGI Server)actionhelpz--bindz-bZADDRESSz8Specify alternate bind address [default: all interfaces])defaultmetavarr=z --directoryz-dz9Specify alternative directory [default:current directory])r>r=rstorerz&Specify alternate port [default: 8000])r<r>typenargsr=)r)r7rr8)6r__all__rrZ email.utilsrrYZ http.clientr3rrrrrrrrr rvrZ urllib.parser functoolsrrrrr rZThreadingMixInrZStreamRequestHandlerrrrrrrrr9rargparseArgumentParserparser add_argumentrr- parse_argsrnZcgiZ handler_classrrr8rrrrSsz   s0