
    z%it                        	 d Z 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
ddlmZ ddlmZ ddlZddlZddlZddlZg dZ ej(                  ed	       d
adad Zd Zd Zd Zeadadej<                  dddfdZd!dZ d Z!d Z" G d d      Z# G d d      Z$ej<                  fdZ%d"dZ&ej<                  fdZ'd Z(d Z)d Z*d Z+d Z,ed k(  r e%        yy)#z2.6    )StringIOBytesIOTextIOWrapper)MappingN)
FeedParser)Message)MiniFieldStorageFieldStorageparseparse_multipartparse_headertestprint_exceptionprint_environ
print_formprint_directoryprint_argumentsprint_environ_usage)      )remove c                      	 t        j                  dt        d       t        rt        s	 t        t        dd      at        st        ant        at        |   y # t        $ r Y 'w xY w)Nz7cgi.log() is deprecated as of 3.10. Use logging instead   )
stacklevelalocale)encoding)
warningswarnDeprecationWarninglogfilelogfpopenOSErrornologlogdologallargss    7/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/cgi.pyinitlogr,   A   s_    . MMK$4u	#9E M  		s   A 	A%$A%c                 <    	 t         j                  | |z  dz          y )N
)r#   write)fmtargss     r+   r(   r(   f   s    G	KKD4     c                       	 y N r)   s    r+   r&   r&   j   s    Cr2   c                  N    	 da t        rt        j                          d at        ay )Nr   )r"   r#   closer,   r'   r5   r2   r+   closelogr8   n   s     G
Cr2   &c                    	 | t         j                  } t        | d      r| j                  }nd}t	        | t
              r| j                  } d|vrd|d<   |d   dk(  rt        |d         \  }}|dk(  rt        | ||      S |d	k(  rIt        |d
         }t        r|t        kD  rt        d      | j                  |      j                  |      }	nd}	d|v r|	r|	dz   }	|	|d   z   }	n0t         j                  dd  r|	r|	dz   }	|	t         j                  d   z   }	|	|d<   n8d|v r|d   }	n.t         j                  dd  rt         j                  d   }	nd}	|	|d<   t        j                   j#                  |	||||      S )Nr   zlatin-1REQUEST_METHODGETPOSTCONTENT_TYPEzmultipart/form-data)	separator!application/x-www-form-urlencodedCONTENT_LENGTHMaximum content length exceededr   QUERY_STRINGr9      )r   r?   )sysstdinhasattrr   
isinstancer   bufferr   r   intmaxlen
ValueErrorreaddecodeargvurllibr   parse_qs)
fpenvironkeep_blank_valuesstrict_parsingr?   r   ctypepdictclengthqss
             r+   r   r      s   , 
zYY r*;; "m$YYw&$) ! F*#GN$;<u))"2u	BB99'"234G'F* !BCC!((2BBW$S2gn--BXXab\S2chhqk!B"$	7	"^$88AB<!BB"$<<  %6*2i ! I Ir2   c                 $   	 |d   j                  d      }dj                  |      }t               }|j                  |       	 |d   |d<   t        | |||ddi|      }|D 	ci c]  }	|	|j                  |	       c}	S # t        $ r Y >w xY wc c}	w )	Nboundaryasciiz multipart/form-data; boundary={}zCONTENT-LENGTHzContent-Lengthr;   r=   )headersr   errorsrS   r?   )rN   formatr   set_typeKeyErrorr
   getlist)
rR   rW   r   r^   r?   r[   rV   r]   fsks
             r+   r   r      s     Z ''0H.55h?EiGU$)*:$; ! 
b'HV!6*i
AB&()Arzz!}))	   *s   A> "B>	B
	B
c              #     K   | d d dk(  r| dd  } | j                  d      }|dkD  ro| j                  dd|      | j                  dd|      z
  dz  rE| j                  d|dz         }|dkD  r+| j                  dd|      | j                  dd|      z
  dz  rE|dk  rt        |       }| d | }|j                          | |d  } | d d dk(  ry y w)NrD   ;r   "\"r   )findcountlenstrip)sendfs      r+   _parseparamrp      s     
BQ%3,abEffSkAg17733/!''%C2HHAM&&cAg&C Ag17733/!''%C2HHAM7a&CdsGggicdG BQ%3,s   BC4C
Cc                    	 t        d| z         }|j                         }i }|D ]  }|j                  d      }|dk\  s|d | j                         j	                         }||dz   d  j                         }t        |      dk\  r;|d   |d   cxk(  rdk(  r*n n'|dd }|j                  dd	      j                  d
d      }|||<    ||fS )Nrf   =r   rD   r   rg   z\\\rh   )rp   __next__ri   rl   lowerrk   replace)linepartskeyrW   pinamevalues           r+   r   r      s    
 d
#E
..
CE  FF3K6Ra5;;=&&(DacdGMMOE5zQ58uRy#?C#?afd3;;E3GE$K  :r2   c                   :    e Zd Z	 dZdZdZdZi ZdZi Z	i Z
d Zd Zy)r	   Nc                 "    	 || _         || _        y r4   r}   r~   selfr}   r~   s      r+   __init__zMiniFieldStorage.__init__  s    4	
r2   c                 <    d| j                   d| j                  dS )NzMiniFieldStorage(, )r   r   s    r+   __repr__zMiniFieldStorage.__repr__  s    .-1YY

CCr2   )__name__
__module____qualname__filenamelisttypefiletype_optionsdispositiondisposition_optionsr]   r   r   r5   r2   r+   r	   r	     s;    G HDDDLKGDr2   r	   c                       e Zd Z	 dddej                  dddddddfdZd Zd	 Zd
 Zd Z	d Z
d Zd Zd!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  Zy)"r
   Nr2   r   utf-8rw   r9   c                 8   	 d}|| _         || _        |
| _        || _        d|v r|d   j	                         }d | _        |dk(  s|dk(  rhd|v r|d   }n)t        j                  dd  rt        j                  d   }nd}|j                  t        j                         d      }t        |      }|dd	i}|3i }|d
k(  rd	|d<   d|v r|d   |d<   d|v r
|d   | _        d|v r*|d   |d<   n!t        |t        t        f      st        d      || _        | t        j"                  j$                  | _        nLt        |t(              r|j$                  | _        n*t+        |d      rt+        |d      st        d      || _        || _        |	| _        t        |t0              s!t        dt3        |      j4                  z        || _        d| _        || _        di }}d| j                   v rt=        | j                   d         \  }}|| _        || _         d | _!        d|v r
|d   | _!        d | _"        d|v r
|d   | _"        | jD                  d u| _#        d| j                   v rt=        | j                   d         \  }}n| j6                  s|d
k7  rdi }}nd	i }}|| _        || _$        d|v r/|d   j                  | j,                  | j.                        | _%        nd| _%        d}d| j                   v r3	 tM        | j                   d         }tP        r|tP        kD  rtO        d      || _)        | j:                  |dk\  r|| _        d x| _*        | _+        d| _,        |d	k(  r| j[                          y |d d dk(  r| j]                  |||       y | j_                          y # tN        $ r Y w xY w)Nr<   r;   HEADrC   rD   r   surrogateescapezcontent-typer@   r=   r>   rA   content-lengthz?headers must be mapping or an instance of email.message.MessagerM   readlinezfp must be file pointerz#outerboundary must be bytes, not %sr   zcontent-dispositionr}   r   z
text/plainr[   r2   rs   rB   
   z
multipart/)0rT   rU   max_num_fieldsr?   upper
qs_on_postrE   rO   encoder   getpreferredencodingr   rH   r   r   	TypeErrorr]   rF   rI   rR   r   rG   r   r^   bytesr   r   outerboundary
bytes_readlimitr   r   r   r}   r   _binary_filer   innerboundaryrJ   rL   rK   lengthr   r   doneread_urlencoded
read_multiread_single)r   rR   r]   r   rS   rT   rU   r   r   r^   r   r?   methodrY   cdisprW   rV   clens                     r+   r   zFieldStorage.__init__J  s   *	V !2,,"w&-.446FU?f.(^,!"XXa[6668:KLBB)>@?G*M'(*1.*A'(")."97*,34D,E()w'(:; !8 9 9:ii&&DGM*iiDGB'GB
,C 9::DG -/A"=1::; < <*
 2u DLL0'5J(KLLE5 #( 	U?fDI!*-DM MM5 T\\)'^(DELE56V#3'5E>5E	!!&z!2!9!9$--:>++"GD "%Dt||+4<<(89: $- !BCC::$!)DJ $$	DI	77  "3BZ<'OOG%6G  s   $N 	NNc                 X    	 | j                   j                          y # t        $ r Y y w xY wr4   )r   r7   AttributeErrorr   s    r+   __del__zFieldStorage.__del__  s'    	IIOO 		s    	))c                     | S r4   r5   r   s    r+   	__enter__zFieldStorage.__enter__  s    r2   c                 8    | j                   j                          y r4   )r   r7   )r   r1   s     r+   __exit__zFieldStorage.__exit__  s    		r2   c                 V    d| j                   d| j                  d| j                  dS )NzFieldStorage(r   r   )r}   r   r~   r   s    r+   r   zFieldStorage.__repr__  s"    0		4==$**6 	6r2   c                 4    t        | j                               S r4   )iterkeysr   s    r+   __iter__zFieldStorage.__iter__   s    DIIK  r2   c                    |dk7  rt        |      | j                  rR| j                  j                  d       | j                  j                         }| j                  j                  d       |S | j                  | j                  }|S d }|S )Nr~   r   )r   r   seekrM   r   r   s      r+   __getattr__zFieldStorage.__getattr__  sz    7? &&99IINN1IINN$EIINN1
 	 YY"IIE  Er2   c                     	 | j                   t        d      g }| j                   D ]#  }|j                  |k(  s|j                  |       % |st	        |      t        |      dk(  r|d   S |S )Nnot indexablerD   r   )r   r   r}   appendra   rk   )r   rz   founditems       r+   __getitem__zFieldStorage.__getitem__  so    (99O,,II 	4DyyCd!3	43-u:?8OLr2   c                     	 || v r;| |   }t        |t              r|D cg c]  }|j                   c}S |j                  S |S c c}w r4   rH   r   r~   )r   rz   defaultr~   xs        r+   getvaluezFieldStorage.getvalue  sH    F$;IE%&)./A//{{"N	 0s   Ac                 p    	 || v r0| |   }t        |t              r|d   j                  S |j                  S |S Nr   r   )r   rz   r   r~   s       r+   getfirstzFieldStorage.getfirst)  s<    /$;IE%&Qx~~%{{"Nr2   c                     	 || v r<| |   }t        |t              r|D cg c]  }|j                   c}S |j                  gS g S c c}w r4   r   )r   rz   r~   r   s       r+   rb   zFieldStorage.getlist4  sJ    .$;IE%&)./A//}$I	 0s   Ac                 |    	 | j                   t        d      t        t        d | j                   D                    S )Nr   c              3   4   K   | ]  }|j                     y wr4   r}   ).0r   s     r+   	<genexpr>z$FieldStorage.keys.<locals>.<genexpr>C  s     8d		8s   )r   r   setr   s    r+   r   zFieldStorage.keys?  s4    -99O,,C8dii8899r2   c                 p    	 | j                   t        d      t        fd| j                   D              S )Nr   c              3   <   K   | ]  }|j                   k(    y wr4   r   )r   r   rz   s     r+   r   z,FieldStorage.__contains__.<locals>.<genexpr>I  s     :499#:s   )r   r   any)r   rz   s    `r+   __contains__zFieldStorage.__contains__E  s0    399O,,:		:::r2   c                 6    	 t        | j                               S r4   )rk   r   r   s    r+   __len__zFieldStorage.__len__K  s    .499;r2   c                 Z    | j                   t        d      t        | j                         S )NzCannot be converted to bool.)r   r   boolr   s    r+   __bool__zFieldStorage.__bool__O  s&    99:;;DIIr2   c           	         	 | j                   j                  | j                        }t        |t              s-t        | j                   dt        |      j                        |j                  | j                  | j                        }| j                  r|d| j                  z   z  }t        j                  j                  || j                  | j                   | j                  | j                  | j"                  | j$                        }|D cg c]  \  }}t'        ||       c}}| _        | j+                          y c c}}w )N should return bytes, got r9   r   r^   r   r?   )rR   rM   r   rH   r   rL   r   r   rN   r   r^   r   rP   r   	parse_qslrT   rU   r   r?   r	   r   
skip_lines)r   rY   queryrz   r~   s        r+   r   zFieldStorage.read_urlencodedT  s    9WW\\$++&"e$ $b):):< = =YYt}}dkk2??#''B&&&&(;(;]]4;;..$.. ' J EJJjc5%c51J	 Ks   D?c                 ~   	 | j                   }t        |      st        d|      g | _        | j                  rt
        j                  j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                        }| j                  j                  d |D               | j                  xs | j                   }| j"                  j%                         }t'        |t(              s-t        | j"                  dt+        |      j,                        | xj.                  t1        |      z  c_        |j3                         d| j                   z   k7  r]|r[| j"                  j%                         }| xj.                  t1        |      z  c_        |j3                         d| j                   z   k7  r|r[| j                  }||t1        | j                        z  }	 t5               }	d}
	 | j"                  j%                         }|
|z  }
|j3                         sn1|
snq| xj.                  t1        |
      z  c_        |	j7                  |
j9                  | j                  | j                               |	j;                         }d|v r|d= | j<                  d n| j<                  | j.                  z
  } || j"                  ||||||| j                  | j                  || j                        }|9|dz  }|j                  r|t1        |j                        z  }|d	k  rt        d
      | xj.                  |j.                  z  c_        | j                  j?                  |       |j@                  s"| j.                  | jB                  cxk\  rd	kD  rn nn| jE                          y )Nz$Invalid boundary in multipart form: r   c              3   :   K   | ]  \  }}t        ||        y wr4   )r	   )r   rz   r~   s      r+   r   z*FieldStorage.read_multi.<locals>.<genexpr>q  s     Rjc5-c59Rs   r      --r2   r   rD   r   zMax number of fields exceeded)#r   valid_boundaryrL   r   r   rP   r   r   rT   rU   r   r^   r   r?   extendFieldStorageClass	__class__rR   r   rH   r   r   r   r   rk   rl   r   feedrN   r7   r   r   r   r   r   )r   rS   rT   rU   ibr   klass
first_liner   parserhdr_textdatar]   r   parts                  r+   r   zFieldStorage.read_multif  s   =b!MNN	??LL**!7!79L9Lt{{#22dnn + NE IIRERR&&8$..WW%%'
*e, $j)9)B)BD E E3z?* !ed.@.@&@A))+JOOs:.O !ed.@.@&@A
 ,,%c$))n,N\FHww'')D zz|	 
 OOs8},OKKt{{CDllnG  7*,- JJ.DZZ$//1 '2w8I'^T^^UD )!#99"c$))n4N!A%$%DEEOOt.OIIT"yyDOOt{{>Q>G H 	r2   c                     	 | j                   dk\  r!| j                          | j                          n| j                          | j                  j                  d       y r   )r   read_binaryr   
read_linesr   r   r   s    r+   r   zFieldStorage.read_single  sA    ,;;!OOOO		qr2   i    c                    	 | j                         | _        | j                  }|dk\  r|dkD  r| j                  j	                  t        || j                              }t        |t              s-t        | j                  dt        |      j                        | xj                  t        |      z  c_        |sd| _        y | j                  j                  |       |t        |      z
  }|dkD  ry y y )Nr   r   rs   )	make_filer   r   rR   rM   minbufsizerH   r   rL   r   r   r   rk   r   r/   )r   todor   s      r+   r   zFieldStorage.read_binary  s    )NN$	{{19(ww||Cdll$;<!$.$(,d1D1D&F G G3t9, "DI		%c$i' ( r2   c                     	 | j                   rt               x| _        | _        nt	               x| _        | _        | j
                  r| j                          y | j                          y r4   )r   r   r   _FieldStorage__filer   r   read_lines_to_outerboundaryread_lines_to_eofr   s    r+   r   zFieldStorage.read_lines  sO    >&-i/DI&.j0DI,,.""$r2   c                    	 | j                   z| j                   j                         t        |      z   dkD  rQ| j                         | _        | j                   j                         }| j                  j                  |       d | _         | j                  r| j                  j                  |       y | j                  j                  |j                  | j                  | j                               y )Ni  )r   tellrk   r   r   r   r/   r   rN   r   r^   )r   rx   r   s      r+   __writezFieldStorage.__write  s    .;;"{{!CI-4 NN,	{{++-		%"IIOOD! IIOODKKt{{CDr2   c                     	 	 | j                   j                  d      }| xj                  t        |      z  c_        |sd| _        y | j                  |       U)N   rs   )rR   r   r   rk   r   _FieldStorage__write)r   rx   s     r+   r   zFieldStorage.read_lines_to_eof  sL    -77##E*DOOs4y(O	LL r2   c                    	 d| j                   z   }|dz   }d}d}d}	 | j                  d| j                  cxk  r|k  ry  | j                  j                  d      }| xj                  t        |      z  c_        |t        |      z  }|sd| _        y |dk(  r||z   }d}|j                  d      r%|r#|j                         }||k(  ry ||k(  rd| _        y |}|j                  d	      r
d	}|d d
 }d}n:|j                  d      r
d}|d d }d}n|j                  d      r
d}|d d }d}nd}d}| j                  ||z          #)Nr   r2   Tr   rD   r  rs      s   
   
F)r   r   rR   r   r   rk   r   
startswithrstripendswithr  )	r   next_boundarylast_boundarydelimlast_line_lfend_readrx   strippedlineodelims	            r+   r   z(FieldStorage.read_lines_to_outerboundary  sn   	  2 22%-zz%!tzz*BU*B +C77##E*DOOs4y(OSYE	~t|u%/#{{}=0=0 !DIF}}W%CRy"&u%CRy"&u% CRy"'"'LL$'M r2   c                 z   	 | j                   r| j                  ry d| j                   z   }|dz   }d}	 | j                  j                  d      }| xj                  t        |      z  c_        |sd| _        y |j                  d      r%|r#|j                         }||k(  ry ||k(  rd| _        y |j                  d      })Nr   Tr  rs   rD   r  )r   r   rR   r   r   rk   r
  rl   )r   r  r  r  rx   r  s         r+   r   zFieldStorage.skip_lines  s    C!!TYY 2 22%-77##E*DOOs4y(O	}}U##zz|=0=0 !DI"mmE2O r2   c                     	 | j                   rt        j                  d      S t        j                  d| j                  d      S )Nzwb+zw+r.   )r   newline)r   tempfileTemporaryFiler   r   s    r+   r   zFieldStorage.make_file3  sA    	. ))%00))$$8 8r2   r4   ) r   r   r   osrS   r   r   r   r   r   r   r   r   r   r   rb   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r5   r2   r+   r
   r
     s    (R Cqgi $cJ6
!			:; 
  CJ G("	%E0(d3,8r2   r
   c                    	 t        d       t                t        j                  t        _        	 t	               }t                t                t        |       t        |        t                d }|fd}t        d        |        t        d       da	 t	               }t                t                t        |       t        |        y #  t                Y QxY w#  t                Y y xY w)NzContent-type: text/htmlc                      t        d       y )Nz,testing print_exception() -- <I>italics?</I>)execr5   r2   r+   ro   ztest.<locals>.ff  s    ?@r2   c                      |         y r4   r5   )ro   s    r+   gztest.<locals>.gh  s    Cr2   z9<H3>What follows is a test, not an actual exception:</H3>z*<H1>Second try with a small maxlen...</H1>2   )printrE   stdoutstderrr
   r   r   r   r   r   r   rK   )rS   formro   r  s       r+   r   r   U  s     

#$	GCJ~4g	A 	IJ	 

67 F~4gs   AC 4C CC+c           
      P   | t        j                         \  } }}dd l}t                t        d       |j	                  ||      |j                  | |      z   }t        dt        j                  dj                  |d d             dt        j                  |d         d       ~y )Nr   z+<H3>Traceback (most recent call last):</H3>z<PRE>r   rs   z<B>z
</B></PRE>)	rE   exc_info	tracebackr  	format_tbformat_exception_onlyhtmlescapejoin)r   r~   tbr   r$  r   s         r+   r   r   |  s    |,,.eR	G	
78r5)**478D	BGGD"I&'DH
  	r2   c           
         	 t        | j                               }t                t        d       t        d       |D ]9  }t        dt        j                  |      dt        j                  | |                ; t        d       t                y )Nz<H3>Shell Environment:</H3><DL><DT><DD></DL>)sortedr   r  r'  r(  )rS   r   rz   s      r+   r   r     sk    -',,.!D	G	
'(	&M Kfdkk#&GCL0IJK	'N	Gr2   c                    	 t        | j                               }t                t        d       |st        d       t        d       |D ]  }t        dt        j                  |      z   dz   d       | |   }t        dt        j                  t        t        |                  z   d	z          t        d
t        j                  t        |            z           t        d       t                y )Nz<H3>Form Contents:</H3>z<P>No form fields.r,  r-  : )rn   z<i>z</i>r.  r/  )r0  r   r  r'  r(  reprr   )r!  r   rz   r~   s       r+   r   r     s    .$))+D	G	
#$"#	&M 1ft{{3''#-37S	edkk$tE{"344v=>ft{{4;//0	1
 
'N	Gr2   c            	      :   	 t                t        d       	 t        j                         } t        t        j                  |              t                y # t
        $ r<}t        dt        j                  t        |                   Y d }~t                y d }~ww xY w)Nz#<H3>Current Working Directory:</H3>zOSError:)r  r  getcwdr'  r(  r%   str)pwdmsgs     r+   r   r     sn    -	G	
/0 iik 	dkk#	G	  1j$++c#h/00 
G	1s   A 	B(BBc                      t                t        d       t                t        t        j                         t                y )Nz <H3>Command Line Arguments:</H3>)r  rE   rO   r5   r2   r+   r   r     s%    	G	
,-	G	#((O	Gr2   c                      	 t        d       y )Na  
<H3>These environment variables could have been set:</H3>
<UL>
<LI>AUTH_TYPE
<LI>CONTENT_LENGTH
<LI>CONTENT_TYPE
<LI>DATE_GMT
<LI>DATE_LOCAL
<LI>DOCUMENT_NAME
<LI>DOCUMENT_ROOT
<LI>DOCUMENT_URI
<LI>GATEWAY_INTERFACE
<LI>LAST_MODIFIED
<LI>PATH
<LI>PATH_INFO
<LI>PATH_TRANSLATED
<LI>QUERY_STRING
<LI>REMOTE_ADDR
<LI>REMOTE_HOST
<LI>REMOTE_IDENT
<LI>REMOTE_USER
<LI>REQUEST_METHOD
<LI>SCRIPT_NAME
<LI>SERVER_NAME
<LI>SERVER_PORT
<LI>SERVER_PROTOCOL
<LI>SERVER_ROOT
<LI>SERVER_SOFTWARE
</UL>
In addition, HTTP headers sent by the server may be passed in the
environment as well.  Here are some common variable names:
<UL>
<LI>HTTP_ACCEPT
<LI>HTTP_CONNECTION
<LI>HTTP_HOST
<LI>HTTP_PRAGMA
<LI>HTTP_REFERER
<LI>HTTP_USER_AGENT
</UL>
)r  r5   r2   r+   r   r     s    C	 ' 'r2   c                 X    dd l }t        | t              rd}nd}|j                  ||       S )Nr   s   ^[ -~]{0,200}[!-~]$z^[ -~]{0,200}[!-~]$)rerH   r   match)rm   r=  _vb_patterns      r+   r   r     s*    !U,+88K##r2   __main__)r   rw   r9   )NNNN)-__version__ior   r   r   collections.abcr   rE   r  urllib.parserP   email.parserr   email.messager   r'  r   r  r   __all___deprecatedr   r"   r#   r,   r(   r&   r8   r'   rK   rS   r   r   rp   r   r	   r
   r   r   r   r   r   r   r   r   r5   r2   r+   <module>rI     s  	*  0 / # 
 	  # !    "   Xf -
 #J!	  
2::cCIL*6
0D D2p8 p8l  %N ** 	 
)^$ zF r2   