???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    &.e                     @   sf  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d	d
ddddddddgZdadadd Zdd Zdd Zdd Zeadadejdddfdd	Zd0d d
Zd!d" Zd#d ZG d$d dZ G d%d dZ!ejfd&dZ"d1d'dZ#ejfd(dZ$d)d Z%d*d Z&d+d Z'd,d Z(d-d. Z)e*d/krbe"  dS )2z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 c                  G   sF   t r,ts,ztt daW n tk
r*   Y nX ts6tantat|   d S )Na)logfilelogfpopenOSErrornologlogdologZallargs r   /usr/lib64/python3.8/cgi.pyinitlog8   s    r    c                 G   s   t | | d  d S )N
)r   write)Zfmtargsr   r   r   r   [   s    r   c                  G   s   d S Nr   r   r   r   r   r   _   s    r   c                   C   s   da trt  d atad S )Nr   )r   r   closer    r   r   r   r   r   closelogc   s
    r&   c           
      C   s^  | d krt j} t| dr | j}nd}t| tr4| j} d|krDd|d< |d dkrt|d \}}|dkrxt| ||dS |d	krt	|d
 }t
r|t
krtd| ||}	nd}	d|kr|	r|	d }	|	|d  }	n*t jdd  r|	r|	d }	|	t jd  }	|	|d< n<d|kr |d }	n(t jdd  r<t jd }	nd}	|	|d< tjj|	||||dS )Nencodingzlatin-1REQUEST_METHODGETPOSTCONTENT_TYPEzmultipart/form-data)	separator!application/x-www-form-urlencodedCONTENT_LENGTHMaximum content length exceededr   QUERY_STRING&   )r'   r,   )sysstdinhasattrr'   
isinstancer   bufferr   r   intmaxlen
ValueErrorreaddecodeargvurllibr
   Zparse_qs)
fpenvironkeep_blank_valuesstrict_parsingr,   r'   ctypepdictZclengthqsr   r   r   r
   v   sL    

  


 utf-8replacer1   c                    sx   |d  d}d|}t }|| z|d |d< W n tk
rL   Y nX t| |||ddi|d  fd	d
 D S )Nboundaryasciiz multipart/form-data; boundary={}zCONTENT-LENGTHzContent-Lengthr(   r*   )headersr'   errorsr@   r,   c                    s   i | ]}|  |qS r   )getlist).0kZfsr   r   
<dictcomp>   s      z#parse_multipart.<locals>.<dictcomp>)r<   formatr   Zset_typeKeyErrorr	   )r?   rD   r'   rK   r,   rH   rC   rJ   r   rO   r   r      s    


 c                 c   s   | d d dkr| dd  } |  d}|dkr`| dd|| dd| d r`|  d|d }q&|dk rpt| }| d | }| V  | |d  } q d S )Nr2   ;r   "\"   )findcountlenstrip)sendfr   r   r   _parseparam   s    
(
r^   c                 C   s   t d|  }| }i }|D ]}|d}|dkr|d |   }||d d   }t|dkr|d |d   krdkrn n |dd }|dd	d
d}|||< q||fS )NrS   =r   r2   rV   rT   z\\\rU   )r^   __next__rW   rZ   lowerrY   rG   )linepartskeyrD   pinamevaluer   r   r   r      s    
,
c                   @   s<   e Zd ZdZdZdZdZi ZdZi Z	i Z
dd Zdd ZdS )r   Nc                 C   s   || _ || _d S r$   ri   rj   selfri   rj   r   r   r   __init__	  s    zMiniFieldStorage.__init__c                 C   s   d| j | jf S )NzMiniFieldStorage(%r, %r)rk   rm   r   r   r   __repr__  s    zMiniFieldStorage.__repr__)__name__
__module____qualname__filenamelisttypefiletype_optionsdispositiondisposition_optionsrJ   rn   rp   r   r   r   r   r      s   c                   @   s   e Zd ZdddejdddddddfddZdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zd9ddZd:ddZdd Zdd Zdd Zd d! Zd"d# Zd$d% ZdZd&d' Zd(d) Zd*Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 ZdS );r	   N    r   rF   rG   c                 C   sZ  d}|| _ || _|
| _|| _d|kr0|d  }d | _|dksF|dkrd|krX|d }ntjdd  rrtjd }nd}|t	
 d}t|}|d krdd	i}|d kri }|d
krd	|d< d|kr|d |d< d|kr|d | _d|kr|d |d< nt|ttfstd|| _|d kr*tjj| _n<t|tr@|j| _n&t|drXt|ds`td|| _|| _|	| _t|tstdt|j || _d| _|| _di  }}d| jkrt| jd \}}|| _|| _ d | _!d|kr|d | _!d | _"d|kr
|d | _"| j"d k	| _#d| jkr6t| jd \}}n(| jsH|d
krTdi  }}n
d	i  }}|| _|| _$d|kr|d | j| j| _%nd| _%d}d| jkrzt&| jd }W n t'k
r   Y nX t(r|t(krt'd|| _)| jd kr|dkr|| _d  | _*| _+d| _,|d	kr,| -  n*|d d dkrN| .||| n| /  d S )Nr)   r(   ZHEADr0   r2   r   surrogateescapezcontent-typer-   r*   r+   r.   content-lengthz?headers must be mapping or an instance of email.message.Messager;   readlinezfp must be file pointerz#outerboundary must be bytes, not %sr   zcontent-dispositionri   rt   z
text/plainrH   r{   r`   r/   
   z
multipart/)0rA   rB   max_num_fieldsr,   upper
qs_on_postr3   r=   encodelocaleZgetpreferredencodingr   r6   r   r   	TypeErrorrJ   r4   r7   r?   r   r5   r'   rK   bytesrv   rq   outerboundary
bytes_readlimitr   ry   rz   ri   rt   _binary_filerx   innerboundaryr8   r:   r9   lengthru   rw   doneread_urlencoded
read_multiread_single)rm   r?   rJ   r   r@   rA   rB   r   r'   rK   r   r,   methodrE   ZcdisprD   rC   Zclenr   r   r   rn   ?  s    /












zFieldStorage.__init__c                 C   s(   z| j   W n tk
r"   Y nX d S r$   )rw   r%   AttributeErrorro   r   r   r   __del__  s    zFieldStorage.__del__c                 C   s   | S r$   r   ro   r   r   r   	__enter__  s    zFieldStorage.__enter__c                 G   s   | j   d S r$   )rw   r%   )rm   r#   r   r   r   __exit__  s    zFieldStorage.__exit__c                 C   s   d| j | j| jf S )NzFieldStorage(%r, %r, %r))ri   rt   rj   ro   r   r   r   rp     s
      zFieldStorage.__repr__c                 C   s   t |  S r$   )iterkeysro   r   r   r   __iter__  s    zFieldStorage.__iter__c                 C   sT   |dkrt || jr:| jd | j }| jd n| jd k	rL| j}nd }|S )Nrj   r   )r   rw   seekr;   ru   rl   r   r   r   __getattr__  s    

zFieldStorage.__getattr__c                 C   s^   | j d krtdg }| j D ]}|j|kr|| q|sBt|t|dkrV|d S |S d S )Nnot indexabler2   r   )ru   r   ri   appendrR   rY   )rm   rf   founditemr   r   r   __getitem__  s    


 zFieldStorage.__getitem__c                 C   s8   || kr0| | }t |tr(dd |D S |jS n|S d S )Nc                 S   s   g | ]
}|j qS r   rj   rM   xr   r   r   
<listcomp>  s     z)FieldStorage.getvalue.<locals>.<listcomp>r6   ru   rj   rm   rf   defaultrj   r   r   r   getvalue  s    
zFieldStorage.getvaluec                 C   s4   || kr,| | }t |tr$|d jS |jS n|S d S Nr   r   r   r   r   r   getfirst  s    

zFieldStorage.getfirstc                 C   s:   || kr2| | }t |tr(dd |D S |jgS ng S d S )Nc                 S   s   g | ]
}|j qS r   r   r   r   r   r   r   .  s     z(FieldStorage.getlist.<locals>.<listcomp>r   )rm   rf   rj   r   r   r   rL   )  s    

zFieldStorage.getlistc                 C   s*   | j d krtdt tdd | j D S )Nr   c                 s   s   | ]}|j V  qd S r$   ri   rM   r   r   r   r   	<genexpr>8  s     z$FieldStorage.keys.<locals>.<genexpr>)ru   r   setro   r   r   r   r   4  s    
zFieldStorage.keysc                    s*   | j d krtdt fdd| j D S )Nr   c                 3   s   | ]}|j  kV  qd S r$   r   r   rf   r   r   r   >  s     z,FieldStorage.__contains__.<locals>.<genexpr>)ru   r   any)rm   rf   r   r   r   __contains__:  s    
zFieldStorage.__contains__c                 C   s   t |  S r$   )rY   r   ro   r   r   r   __len__@  s    zFieldStorage.__len__c                 C   s   | j d krtdt| j S )NzCannot be converted to bool.)ru   r   boolro   r   r   r   __bool__D  s    
zFieldStorage.__bool__c              	   C   s   | j | j}t|ts0td| j t|jf || j	| j
}| jrT|d| j 7 }tjj|| j| j| j	| j
| j| jd}dd |D | _|   d S )N%s should return bytes, got %sr1   r'   rK   r   r,   c                 S   s   g | ]\}}t ||qS r   r   rM   rf   rj   r   r   r   r   V  s     z0FieldStorage.read_urlencoded.<locals>.<listcomp>)r?   r;   r   r6   r   r:   rv   rq   r<   r'   rK   r   r>   r
   	parse_qslrA   rB   r   r,   ru   
skip_lines)rm   rE   queryr   r   r   r   I  s&    
    zFieldStorage.read_urlencodedc                 C   sL  | j }t|std|f g | _| jrftjj| j| j| j	| j
| j| j| jd}| jdd |D  | jpp| j}| j }t|tstd| jt|jf |  jt|7  _| d| j  kr|r| j }|  jt|7  _q| j}|d k	r|t| j8 }t }	d}
| j }|
|7 }
| sq0q|
s:q@|  jt|
7  _|	|
| j
| j |	 }d|krz|d= | jd krd n
| j| j }|| j||||||| j
| j|| j}|d k	r|d	8 }|jr|t|j8 }|d
k rtd|  j|j7  _| j| |j s@| j| j!  kr4d
krn nq@q| "  d S )Nz&Invalid boundary in multipart form: %rr   c                 s   s   | ]\}}t ||V  qd S r$   r   r   r   r   r   r   f  s     z*FieldStorage.read_multi.<locals>.<genexpr>r      --r{   r}   r2   r   zMax number of fields exceeded)#r   valid_boundaryr:   ru   r   r>   r
   r   rA   rB   r'   rK   r   r,   extendFieldStorageClass	__class__r?   r~   r6   r   rv   rq   r   rY   rZ   r   Zfeedr<   r%   r   r   r   r   r   )rm   r@   rA   rB   Zibr   klassZ
first_liner   parserZhdr_textdatarJ   r   partr   r   r   r   [  s        







    

(zFieldStorage.read_multic                 C   s4   | j dkr|   |   n|   | jd d S r   )r   read_binaryr   
read_linesrw   r   ro   r   r   r   r     s
    

zFieldStorage.read_singlei    c                 C   s   |   | _| j}|dkr|dkr| jt|| j}t|tsVt	d| jt
|jf |  jt|7  _|std| _q| j| |t| }qd S )Nr   r   r`   )	make_filerw   r   r?   r;   minbufsizer6   r   r:   rv   rq   r   rY   r   r"   )rm   Ztodor   r   r   r   r     s    

zFieldStorage.read_binaryc                 C   s@   | j rt  | _| _nt  | _| _| jr4|   n|   d S r$   )r   r   rw   _FieldStorage__filer   r   read_lines_to_outerboundaryread_lines_to_eofro   r   r   r   r     s    
zFieldStorage.read_linesc                 C   sv   | j d k	rF| j  t| dkrF|  | _| j  }| j| d | _ | jrZ| j| n| j|| j	| j
 d S )Ni  )r   tellrY   r   rw   r   r"   r   r<   r'   rK   )rm   rd   r   r   r   r   Z__write  s    


zFieldStorage.__writec                 C   s:   | j d}|  jt|7  _|s*d| _q6| | q d S )N   r`   )r?   r~   r   rY   r   _FieldStorage__write)rm   rd   r   r   r   r     s    zFieldStorage.read_lines_to_eofc           	      C   sJ  d| j  }|d }d}d}d}| jd k	rFd| j  kr>|krFn nqF| jd}|  jt|7  _|t|7 }|s~d| _qF|dkr|| }d}|dr|r| }||krqF||krd| _qF|}|	d	rd	}|d d
 }d}nL|	drd}|d d }d}n*|	dr.d}|d d }d}nd}d}| 
||  qd S )Nr   r{   Tr   r   r`      r2   s   
   
F)r   r   r?   r~   r   rY   r   
startswithrstripendswithr   )	rm   next_boundarylast_boundaryZdelimlast_line_lfendZ_readrd   strippedlineZodelimr   r   r   r     sN    
$
z(FieldStorage.read_lines_to_outerboundaryc                 C   s   | j r| jrd S d| j  }|d }d}| jd}|  jt|7  _|sPd| _q|dr|r| }||krpq||krd| _q|d}q&d S )Nr   Tr   r`   r2   r   )r   r   r?   r~   r   rY   r   rZ   )rm   r   r   r   rd   r   r   r   r   r     s$    
zFieldStorage.skip_linesc                 C   s&   | j rtdS tjd| jddS d S )Nzwb+zw+r!   )r'   newline)r   tempfileZTemporaryFiler'   ro   r   r   r   r   (  s    
 zFieldStorage.make_file)N)N) rq   rr   rs   osr@   rn   r   r   r   rp   r   r   r   r   r   rL   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	     sJ   +     
 &

E	
2c                 C   s   t d t   tjt_zNt }t  t  t| t|  t	  dd }|fdd}t d |  W n   t
  Y nX t d daz&t }t  t  t| t|  W n   t
  Y nX d S )	NzContent-type: text/htmlc                   S   s   t d d S )Nz,testing print_exception() -- <I>italics?</I>)execr   r   r   r   r]   [  s    ztest.<locals>.fc                 S   s
   |   d S r$   r   )r]   r   r   r   g]  s    ztest.<locals>.gz9<H3>What follows is a test, not an actual exception:</H3>z*<H1>Second try with a small maxlen...</H1>2   )printr3   stdoutstderrr	   r   r   r   r   r   r   r9   )r@   formr]   r   r   r   r   r   J  s4    
c              	   C   sx   | d krt  \} }}dd l}t  td ||||| | }tdtd|d d t|d f  ~d S )Nr   z+<H3>Traceback (most recent call last):</H3>z<PRE>%s<B>%s</B></PRE>r   r`   )	r3   exc_info	tracebackr   	format_tbformat_exception_onlyhtmlescapejoin)rv   rj   tbr   r   ru   r   r   r   r   q  s    

c              	   C   s\   t |  }t  td td |D ]"}tdt|dt| |  q&td t  d S )Nz<H3>Shell Environment:</H3><DL><DT><DD></DL>)sortedr   r   r   r   )r@   r   rf   r   r   r   r     s     c                 C   s   t |  }t  td |s&td td |D ]Z}tdt| d dd | | }tdttt| d	  td
tt|  q2td t  d S )Nz<H3>Form Contents:</H3>z<P>No form fields.r   r   : )r\   z<i>z</i>r   r   )r   r   r   r   r   reprrv   )r   r   rf   rj   r   r   r   r     s    c               
   C   sj   t   t d zt } W n6 tk
rP } zt dtt| W 5 d }~X Y nX t t|  t   d S )Nz#<H3>Current Working Directory:</H3>zOSError:)r   r   getcwdr   r   r   str)pwdmsgr   r   r   r     s    &c                   C   s(   t   t d t   t tj t   d S )Nz <H3>Command Line Arguments:</H3>)r   r3   r=   r   r   r   r   r     s
    
c                   C   s   t d d S )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   r   r   r   r   r     s    c                 C   s(   dd l }t| trd}nd}||| S )Nr   s   ^[ -~]{0,200}[!-~]$z^[ -~]{0,200}[!-~]$)rer6   r   match)r[   r   Z_vb_patternr   r   r   r     s
    
r   __main__)rF   rG   r1   )NNNN)+__version__ior   r   r   Zcollections.abcr   r3   r   Zurllib.parser>   Zemail.parserr   Zemail.messager   r   r   r   __all__r   r   r    r   r   r&   r   r9   r@   r
   r   r^   r   r   r	   r   r   r   r   r   r   r   r   rq   r   r   r   r   <module>   sf        #	 
F
    :'
/
