
    =Og.T                        	 d dl mZmZmZ d dlmZ ddlZddlZddlZg dZ	g dZ
g dZd Zh d	j        Zd
 Zd Z G d d          Z G d de          Z G d de          Z G d de          Z G d de          ZdS )   )FileWrapperguess_schemeis_hop_by_hop)Headers    N)BaseHandlerSimpleHandlerBaseCGIHandler
CGIHandlerIISCGIHandlerread_environ)MonTueWedThuFriSatSun)NJanFebMarAprMayJunJulAugSepOctNovDecc           	          t          j        |           \	  }}}}}}}}}	dt          |         |t          |         ||||fz  S )Nz#%s, %02d %3s %4d %02d:%02d:%02d GMT)timegmtime_weekdayname
_monthname)
	timestampyearmonthdayhhmmsswdyzs
             )/usr/lib64/python3.11/wsgiref/handlers.pyformat_date_timer1      sO    -1[-C-C*D%b"b"a0R#z%0$B4      >
   HTTPS	AUTH_TYPE	PATH_INFOREMOTE_USERSCRIPT_NAMECONTENT_TYPEQUERY_STRINGREMOTE_IDENTCONTENT_LENGTHREQUEST_METHODc                     t          |           pU|                     d          p@|                     d          p+|                     d          ot          | dd                    S )NHTTP_SSL_	REDIRECT_	   )_is_request
startswith_needs_transcode)ks    r0   rD   rD      sd    q>> CQ\\'22 Call66J6J CLL%%A*:1QRR5*A*ACr2   c                  V   	 t          j                    } d}	 d                    d|           n# t          $ r d}Y nw xY wi }t          j                                        D ]F\  }}t          |          r+t           j        dk    rt          j        	                    dd          
                                }|                    d          r)|                    d                              d          }n|                    d	          rn|                    d
          r-d|v r)|                    d                              d          }nS|                    | d                              d          }n)|                    | |                              d          }|||<   H|S )Nsurrogateescape zutf-8replacewin32SERVER_SOFTWAREzmicrosoft-iis/
iso-8859-1zapache/zsimplehttp/zpython/3)sysgetfilesystemencodingencodeLookupErrorosenvironitemsrD   platformgetlowerrC   decode)encescrR   rE   vsoftwares         r0   r   r   "   s   1

#
%
%C
C
		'3   G
 
  "" + +1A (	< |w&&:>>*;R@@FFHH &&'788 F))00>>AA ((33 F ''66
F"h..))00>>AA i0077EEAA
 HHS#&&--l;;

Ns   / >>c                       e Zd Z	 dZdZdZdZdZdZdZ	 e
            ZeZeZdZdZdgZdZdxZZdZdZd	Zd
 Zd Zd Zd Zd Zd Zd"dZd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d  Z/d! Z0dS )#r   )r   r   TFz1.0Nz500 Internal Server Error)zContent-Typez
text/plains;   A server error occurred.  Please contact the administrator.r   c                 0   	 	 |                                    || j        | j                  | _        |                                  d S # t
          t          t          f$ r Y d S  	 |                                  Y d S #  | 	                                  xY wxY wN)
setup_environrR   start_responseresultfinish_responseConnectionAbortedErrorBrokenPipeErrorConnectionResetErrorhandle_errorclose)selfapplications     r0   runzBaseHandler.run   s    $	   %+dlD4GHHDK  """""&9MN 	 	 	 FF	!!######

s$   AA B"B$A;;BBc                    	 | j                                         x}| _        |                                  |                                 |d<   |                                 |d<   | j        |d<   | j        |d<   |                                 |d<   | j	        |d<   | j
        |d<   | j        
| j        |d<   | j        r$| j        r|                    d	| j                   d S d S d S )
Nz
wsgi.inputzwsgi.errorszwsgi.versionzwsgi.run_oncezwsgi.url_schemezwsgi.multithreadzwsgi.multiprocesszwsgi.file_wrapperrK   )
os_environcopyrR   add_cgi_vars	get_stdin
get_stderrwsgi_versionwsgi_run_once
get_schemewsgi_multithreadwsgi_multiprocesswsgi_file_wrapperorigin_serverserver_software
setdefault)rh   envs     r0   r_   zBaseHandler.setup_environ   s   4!_11333dl#'>>#3#3L#'??#4#4M#'#4N#'#5O#'??#4#4#'#8#'#9 !-'+'=C#$ 	C$"6 	CNN,T-ABBBBB	C 	C 	C 	Cr2   c                 P   	 	 |                                  r|                                 s3| j        D ]}|                     |           |                                  |                                  d S #  t          | j        d          r| j                                          xY w)Nrg   )result_is_filesendfilera   writefinish_contentrg   hasattrrh   datas     r0   rb   zBaseHandler.finish_response   s    		&&(( & & K % %DJJt$$$$##%%% JJLLLLL	 t{G,, $!!###s   AA4 41B%c                 ,    	 t          | j                  S r^   )r   rR   rh   s    r0   rs   zBaseHandler.get_scheme   s    .DL)))r2   c                     	 	 t          | j                  }|dk    rt          | j                  | j        d<   d S d S # t
          t          t          f$ r Y d S w xY w)Nr   Content-Length)lenra   str
bytes_sentheaders	TypeErrorAttributeErrorNotImplementedError)rh   blockss     r0   set_content_lengthzBaseHandler.set_content_length   ss    N	%%F qyy14T_1E1E-. y .)<= 	 	 	DD	s   = AAc                 F    	 d| j         vr|                                  d S d S )Nr   )r   r   r   s    r0   cleanup_headerszBaseHandler.cleanup_headers   s6    	 4<//##%%%%% 0/r2   c                     	 |r	 | j         r 	 d }n# d }w xY w| j        t          d          || _        |                     |          | _        |                     |d          }	 | j        S )NzHeaders already set!Status)headers_sentr   AssertionErrorstatusheaders_class_convert_string_typer~   )rh   r   r   exc_infonamevals         r0   r`   zBaseHandler.start_response   s    B 	9 $   4\% !7888))'22**68<<
	J zs    c                     	 t          |          t          u r|S t          d                    |t	          |                              )Nz!{0} must be of type str (got {1}))typer   r   formatrepr)rh   valuetitles      r0   r   z BaseHandler._convert_string_type   sF    ';;#L/66ud5kkJJ
 
 	
r2   c                 D   	 | j         r|                                 r|                     d| j        d| j        d                    d                     d| j        vrI|                     dt          t          j                              z                      d                     | j	        r=d| j        vr6|                     d| j	        z                      d                     d S d S d S d S |                     d	| j        z                      d                     d S )
NzHTTP/ z
rL   Datez
Date: %s
ServerzServer: %s
zStatus: %s
)
rw   client_is_modern_writehttp_versionr   rO   r   r1   r"   rx   r   s    r0   send_preamblezBaseHandler.send_preamble  s>   D 
	O$$&& `1B1B1B4;;;OWWXdeefff--KK'*:49;;*G*GGOOP\]]   ' `HDL,H,HKK!1D4H!H P PQ] ^ ^_____` `` `,H,H KK)DK7??MMNNNNNr2   c                     	 | j         st          d          | j        s)t          |          | _        |                                  n| xj        t          |          z  c_        |                     |           |                                  d S )Nzwrite() before start_response())r   r   r   r   r   send_headersr   _flushr   s     r0   r~   zBaseHandler.write  s    9
 { 	) !BCCC" 	)!$iiDOOOs4yy(OO 	Dr2   c                     	 dS )NF r   s    r0   r}   zBaseHandler.sendfile(  s    	" ur2   c                 x    	 | j         s1| j                            dd           |                                  d S d S )Nr   0)r   r   ry   r   r   s    r0   r   zBaseHandler.finish_content=  sH    <  	 L##$4c:::Dr2   c                    	 	 t          | j        d          r| j                                         d x| _        x| _        x| _        | _        d| _        d| _        d S # d x| _        x| _        x| _        | _        d| _        d| _        w xY w)Nrg   r   F)r   ra   rg   r   r   rR   r   r   r   s    r0   rg   zBaseHandler.closeG  s    		;t{7++ $!!###FJJDKJ$,Jt|DOU!2!2!2 GKJDKJ$,Jt|DOU!2!:!:!:!:s   .A ,B	c                     	 |                                   d| _        | j        r|                                 r=|                                  |                     t          | j                             d S d S )NT)r   r   rw   r   r   r   bytesr   r   s    r0   r   zBaseHandler.send_headersT  s{    ? ! 	-T%:%:%<%< 	-   KKdl++,,,,,	- 	-r2   c                 D    	 | j         }|d uot          | j        |          S r^   )rv   
isinstancera   )rh   wrappers     r0   r|   zBaseHandler.result_is_file]  s)    N(d"Fz$+g'F'FFr2   c                 J    	 | j         d                                         dk    S )NSERVER_PROTOCOLzHTTP/0.9)rR   upperr   s    r0   r   zBaseHandler.client_is_modernc  s$    :|-.4466*DDr2   c                     	 	 ddl m} |                                 } ||d         |d         |d         | j        |           |                                 d }d S # d }w xY w)Nr   )print_exceptionr      )	tracebackr   rp   traceback_limitflush)rh   r   r   stderrs       r0   log_exceptionzBaseHandler.log_exceptionh  s    			111111__&&FOXa[(1+$f   LLNNNHHHtHOOOOs   AA Ac                     	 |                      t          j                               | j        s;|                     | j        | j                  | _        |                                  d S d S r^   )	r   rM   r   r   error_outputrR   r`   ra   rb   r   s    r0   rf   zBaseHandler.handle_errorx  sh    L3<>>***  	#++DL$:MNNDK  """""	# 	#r2   c                 t    	  || j         | j        d d          t          j                               | j        gS r^   )error_statuserror_headersrM   r   
error_body)rh   rR   r`   s      r0   r   zBaseHandler.error_output  s=    	 	t();AAA)>s|~~NNN  r2   c                     	 t           r^   r   r   s     r0   r   zBaseHandler._write  s    	 "!r2   c                     	 t           r^   r   r   s    r0   r   zBaseHandler._flush  s    	
 "!r2   c                     	 t           r^   r   r   s    r0   ro   zBaseHandler.get_stdin  s    B!!r2   c                     	 t           r^   r   r   s    r0   rp   zBaseHandler.get_stderr  s    C!!r2   c                     	 t           r^   r   r   s    r0   rn   zBaseHandler.add_cgi_vars  s    L!!r2   r^   )1__name__
__module____qualname__rq   rt   ru   rr   rw   r   rx   r   rl   r   rv   r   r   r   r   r   r   r   ra   r   r   r   rj   r_   rb   rs   r   r   r`   r   r   r~   r}   r   rg   r   r|   r   r   rf   r   r   r   ro   rp   rn   r   r2   r0   r   r   ^   s       5 LMMLO
 J $M O.L23MOJ FVLGJ  0C C C*  4* * *
	 	 	& & &   8
 
 
O O O  *  *  
; 
; 
;- - -G G GE E E
   # # #! ! !&" " "" " "" " "" " "" " " " "r2   r   c                   8    e Zd Z	 	 d
dZd Zd Zd Zd Zd Zd	S )r	   TFc                 Z    || _         || _        || _        || _        || _        || _        d S r^   )stdinstdoutr   base_envrt   ru   )rh   r   r   r   rR   multithreadmultiprocesss          r0   __init__zSimpleHandler.__init__  s6     
 +!-r2   c                     | j         S r^   )r   r   s    r0   ro   zSimpleHandler.get_stdin  s
    zr2   c                     | j         S r^   )r   r   s    r0   rp   zSimpleHandler.get_stderr  s
    {r2   c                 D    | j                             | j                   d S r^   )rR   updater   r   s    r0   rn   zSimpleHandler.add_cgi_vars  s     DM*****r2   c                     | j                             |          }||t          |          k    rd S ddlm}  |dt
                     	 ||d          }|sd S | j                             |          }))Nr   )warnz9SimpleHandler.stdout.write() should not do partial writes)r   r~   r   warningsr   DeprecationWarning)rh   r   ra   r   s       r0   r   zSimpleHandler._write  s    ""4((>Vs4yy00F!!!!!!H	  	  	 	-=D [&&t,,F		-r2   c                 Z    | j                                          | j         j        | _        d S r^   )r   r   r   r   s    r0   r   zSimpleHandler._flush  s&    k'r2   N)TF)	r   r   r   r   ro   rp   rn   r   r   r   r2   r0   r	   r	     s}        
 (-. . . .    + + +- - -( ( ( ( (r2   r	   c                       e Zd Z	 dZdS )r
   FN)r   r   r   rw   r   r2   r0   r
   r
     s        & MMMr2   r
   c                       e Zd Z	 dZi Zd ZdS )r   Tc           	          t                               | t          j        j        t          j        j        t          j        t                      dd           d S )NFTr   r   )r
   r   rM   r   bufferr   r   r   r   s    r0   r   zCGIHandler.__init__  sI    #)"CJ$5szNND 	  	
 	
 	
 	
 	
r2   Nr   r   r   rr   rl   r   r   r2   r0   r   r     s6         M J
 
 
 
 
r2   r   c                       e Zd Z	 dZi Zd ZdS )r   Tc           	      v   t                      }|                    dd          }|                    dd          }|dz                       |dz             r|t          |          d          |d<   t                              | t          j        j        t          j	        j        t          j
        |dd           d S )Nr5   rH   r7   /FTr   )r   rU   rC   r   r
   r   rM   r   r   r   r   )rh   rR   pathscripts       r0   r   zIISCGIHandler.__init__1  s    {{;++]B//H  ,, 	6#'F#5GK #)"CJ$5szT 	  	
 	
 	
 	
 	
r2   Nr   r   r2   r0   r   r     s4         MJ 	
 	
 	
 	
 	
r2   r   )utilr   r   r   r   r   rM   rQ   r"   __all__r$   r%   r1   __contains__rB   rD   r   r   r	   r
   r   r   r   r2   r0   <module>r      s   5 : : : : : : : : : :                     A@@8 8 8
      
C C C9 9 9xP" P" P" P" P" P" P" P"f
/( /( /( /( /(K /( /( /(d    ]   0
 
 
 
 
 
 
 
<!
 !
 !
 !
 !
N !
 !
 !
 !
 !
r2   