
    z%iT                         	 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y)   )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    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
             D/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/wsgiref/handlers.pyformat_date_timer1      sN    -1[[-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        |       xsG | j                  d      xs4 | j                  d      xs! | j                  d      xr t        | dd        S )NHTTP_SSL_	REDIRECT_	   )_is_request
startswith_needs_transcode)ks    r0   rD   rD      sT    q> CQ\\'2 Call66J CLL%A*:1QR5*ACr2   c                     	 t        j                         } d}	 dj                  d|       i }t        j
                  j                         D ]  \  }}t        |      rt         j                  dk(  rt        j
                  j                  dd      j                         }|j                  d      r!|j                  d      j                  d      }n|j                  d	      rny|j                  d
      r%d|v r!|j                  d      j                  d      }nC|j                  | d      j                  d      }n!|j                  | |      j                  d      }|||<    |S # t        $ r d}Y Hw xY w)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   "   sY   1

#
#
%C
C
		'3 G
 

  " +1A ||w&::>>*;R@FFH &&'78)00>A ((3 ''6"h.)00>A i077EA
 HHS#&--l;
W+X Ng  s   E% %E43E4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" Z1y)$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                    	 	 | j                           || j                  | j                        | _        | j	                          y # t
        t        t        f$ r Y y  	 | j                          Y y #  | j                           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   sy    $	 %dllD4G4GHDK  "&9MN 	 	!!#

s$   AA BBA00BBc                    	 | j                   j                         x}| _        | j                          | j	                         |d<   | j                         |d<   | j                  |d<   | j                  |d<   | j                         |d<   | j                  |d<   | j                  |d<   | j                  | j                  |d<   | j                  r*| j                  r|j                  d	| j                         y y y )
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dl#'>>#3L#'??#4M#'#4#4N#'#5#5O#'??#4#'#8#8#'#9#9 !!-'+'='=C#$$"6"6NN,T-A-AB #7r2   c                 8   	 	 | j                         r| j                         s2| j                  D ]  }| j                  |        | j	                          | j                          y #  t        | j                  d      r| j                  j                           xY w)Nrg   )result_is_filesendfilera   writefinish_contentrg   hasattrrh   datas     r0   rb   zBaseHandler.finish_response   s    		&&( KK %DJJt$%##% JJL	 t{{G,!!#s   AA& &3Bc                 .    	 t        | j                        S r^   )r   rR   rh   s    r0   rs   zBaseHandler.get_scheme   s    .DLL))r2   c                     	 	 t        | j                        }|dk(  r#t        | j                        | j                  d<   y y # t
        t        t        f$ r Y y 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   s]    N	%F qy14T__1E-.  .)<= 		s   A AAc                 D    	 d| j                   vr| j                          y y )Nr   )r   r   r   s    r0   cleanup_headerszBaseHandler.cleanup_headers   s&    	 4<</##% 0r2   c                    	 |r	 | j                   r 	 d }n| j                  t        d      || _        | j	                  |      | _        | j                  |d      }| j                  |       	 | j                  S # d }w xY w)NzHeaders already set!Status)headers_sentr   AssertionErrorstatusheaders_class_convert_string_type_validate_statusr~   )rh   r   r   exc_infonamevals         r0   r`   zBaseHandler.start_response   s    B $$ %  \\% !788))'2**68<f% zz!  s   A: :A>c                     t        |      dk  rt        d      |d d j                         st        d      |d   dk7  rt        d      y )N   z$Status must be at least 4 characters   z(Status message must begin w/3-digit code z+Status message must have a space after code)r   r   isdigit)rh   r   s     r0   r   zBaseHandler._validate_status   sT    v;? !GHHbqz!!# !KLL!9 !NOO r2   c                 r    	 t        |      t        u r|S t        dj                  |t	        |                  )Nz!{0} must be of type str (got {1}))typer   r   formatrepr)rh   valuetitles      r0   r   z BaseHandler._convert_string_type  s7    ';#L/66ud5kJ
 	
r2   c                 <   	 | j                   r| j                         r| j                  d| j                  d| j                  dj                  d             d| j                  vr>| j                  dt        t        j                               z  j                  d             | j                  r=d| j                  vr.| j                  d| j                  z  j                  d             y y y y | j                  d	| j                  z  j                  d             y )
NzHTTP/r   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$$&1B1B4;;OWWXdef-KK'*:499;*GGOOP\] ''HDLL,HKK!1D4H4H!H P PQ] ^_ -I' ' KK)DKK7??MNr2   c                    	 | j                   st        d      | j                  s!t        |      | _        | j                          n| xj                  t        |      z  c_        | j                  |       | j                          y )Nzwrite() before start_response())r   r   r   r   r   send_headersr   _flushr   s     r0   r~   zBaseHandler.write  sc    9
 {{ !BCC""!$iDOOOs4y(O 	Dr2   c                      	 y)NF r   s    r0   r}   zBaseHandler.sendfile.  s    	" r2   c                 x    	 | j                   s-| j                  j                  dd       | j                          y y )Nr   0)r   r   ry   r   r   s    r0   r   zBaseHandler.finish_contentC  s4    <   LL##$4c:r2   c                    	 	 t        | j                  d      r| j                  j                          d x| _        x| _        x| _        | _        d| _        d| _        y # 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.closeM  s    		;t{{7+!!#FJJDKJ$,Jt|DOU!2 GKJDKJ$,Jt|DOU!2s   0A ,B
c                     	 | j                          d| _        | j                  r| j                         r5| j	                          | j                  t        | j                               y y )NT)r   r   rw   r   r   r   bytesr   r   s    r0   r   zBaseHandler.send_headersZ  sS    ? !!T%:%:%< KKdll+, &=r2   c                 T    	 | j                   }|d uxr t        | j                  |      S r^   )rv   
isinstancera   )rh   wrappers     r0   r|   zBaseHandler.result_is_filec  s+    N((d"Fz$++g'FFr2   c                 D    	 | j                   d   j                         dk7  S )NSERVER_PROTOCOLzHTTP/0.9)rR   upperr   s    r0   r   zBaseHandler.client_is_moderni  s#    :||-.446*DDr2   c                     	 	 ddl m} | j                         } ||d   |d   |d   | j                  |       |j	                          d }y # d }w xY w)Nr   )print_exceptionr      )	tracebackr   rp   traceback_limitflush)rh   r   r   stderrs       r0   log_exceptionzBaseHandler.log_exceptionn  sW    			1__&FXa[(1+$$f LLNHtHs   AA Ac                     	 | j                  t        j                                | j                  s<| j	                  | j
                  | j                        | _        | j                          y y r^   )	r   rM   r   r   error_outputrR   r`   ra   rb   r   s    r0   rf   zBaseHandler.handle_error~  sQ    L3<<>*  ++DLL$:M:MNDK  " !r2   c                     	  || 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  s9    	 	t((););A)>s||~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^   )2__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}   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*4*
	&4P
O**
;-GE
 #!&"""""r2   r   c                   6    e Zd Z	 	 ddZd Zd Zd Zd Zd Zy)	r	   c                 X    || _         || _        || _        || _        || _        || _        y r^   )stdinstdoutr   base_envrt   ru   )rh   r   r   r   rR   multithreadmultiprocesss          r0   __init__zSimpleHandler.__init__  s0     
 +!-r2   c                     | j                   S r^   )r   r   s    r0   ro   zSimpleHandler.get_stdin  s    zzr2   c                     | j                   S r^   )r   r   s    r0   rp   zSimpleHandler.get_stderr  s    {{r2   c                 N    | j                   j                  | j                         y r^   )rR   updater   r   s    r0   rn   zSimpleHandler.add_cgi_vars  s    DMM*r2   c                     | j                   j                  |      }||t        |      k(  ry ddlm}  |dt
               ||d  x}r$| j                   j                  |      }||d  x}r#y y )Nr   )warnz9SimpleHandler.stdout.write() should not do partial writes)r   r~   r   warningsr   DeprecationWarning)rh   r   ra   r   s       r0   r   zSimpleHandler._write  sr    ""4(>Vs4y0!H	 67m#d#[[&&t,F 67m#d#r2   c                 n    | j                   j                          | j                   j                  | _        y r^   )r   r   r   r   s    r0   r   zSimpleHandler._flush  s#    kk''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y)r
   FN)r   r   r   rw   r   r2   r0   r
   r
     s    & Mr2   r
   c                       e Zd Z	 dZi Zd Zy)r   Tc           	          t         j                  | t        j                  j                  t        j
                  j                  t        j                  t               dd       y )NFTr   r   )r
   r   rM   r   bufferr   r   r   r   s    r0   r   zCGIHandler.__init__  s?    #))""CJJ$5$5szzND 	  	
r2   Nr   r   r   rr   rl   r   r   r2   r0   r   r     s     M J
r2   r   c                       e Zd Z	 dZi Zd Zy)r   Tc           	      d   t               }|j                  dd      }|j                  dd      }|dz   j                  |dz         r|t        |      d  |d<   t        j                  | t        j                  j                  t        j                  j                  t        j                  |dd       y )Nr5   rH   r7   /FTr   )r   rU   rC   r   r
   r   rM   r   r   r   r   )rh   rR   pathscripts       r0   r   zIISCGIHandler.__init__4  s    {{;+]B/H  ,#'F#5GK #))""CJJ$5$5szzT 	  	
r2   Nr   r   r2   r0   r   r     s     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
 , 
C9xV" V"r
,(K ,(^] 0
 
<!
N !
r2   