
    i                      l    d Z ddlZddlZddlmZ ddlmZ ddl	m
Z
mZ ddlmZ ddlmZ defd	Zd
 ZdS )zD
Hermes Web UI -- File upload: multipart parser and upload handler.
    N)Path)MAX_UPLOAD_BYTES)jbad)get_session)safe_resolve_wsreturnc                 B   dd l }dd lm}  |j        d|          }|st	          d          |                    d                              d                                          }|                     |          }i }i }	d|z   }
d|z   dz   }|	                    |
          }|dd          D ]o}|
                    d          }|                    d          r nAd|v rdnd	}||vr=|	                    |d          \  }}|                    d          r|d d
         }n|                    d          r
|d d         }|
                    d                              dd          }|                                                    |          }|                    dd          } |j        d|          } |j        d|          }|s"|                    d          }|r|                    d          |f|	|<   U|                    dd          ||<   q||	fS )Nr   zboundary=([^;\s]+)zNo boundary in Content-Type   "s   --s   
s   

s   

   
zutf-8replace)errorszContent-Disposition zname="([^"]*)"zfilename="([^"]*)")reemail.parserparsersearch
ValueErrorgroupstripencodereadsplitlstrip
startswithendswithdecodeHeaderParserparsestrget)rfilecontent_typecontent_length_re_epmboundaryrawfieldsfiles	delimiter
end_markerpartspartstrippedsep
header_rawbodyheader_textmsgdispname_mfile_mnames                           '/home/ubuntu/hermes-webui/api/upload.pyparse_multipartr=      s\   ))))))))))
(,77A 86777wwqzz$$++--H
**^
$
$CFE I!E)JIIi  Eabb	 B B;;w''u%% 	E(D00kkgd??::c1--
D==!! 	9DD]]5!! 	9D ''0077	7RR  ))+66ww,b11-t441488 	||A 	B!<<??D1E$KK;;wy;AAF4LL5=    c                 n   dd l }dd l}	 | j                            dd          }t	          | j                            dd          pd          }|t
          k    r#t          | ddt
          dz  dz   did	
          S t          | j        ||          \  }}|                    dd          }d|vrt          | ddid
          S |d         \  }}	|st          | ddid
          S 	 t          |          }
n$# t          $ r t          | ddid
          cY S w xY wt          |
j                  } |j        ddt          |          j                  d d         }|r|                    d          dk    rt          | ddid
          S t!          ||          }|                    |	           t          | |t%          |          |                                j        d          S # t*          $ rD}t-          d|                                z   d           t          | ddid
          cY d }~S d }~ww xY w)Nr   zContent-Typer   zContent-LengtherrorzFile too large (max i   zMB)i  )status
session_idfilezNo file field in requesti  zNo filename in uploadzSession not foundi  z[^\w.\-]_   .zInvalid filename)filenamepathsizez[webui] upload error: T)flushzUpload failedi  )r   	tracebackheadersr#   intr   r   r=   r$   r   KeyErrorr   	workspacesubr;   r   r   write_bytesstrstatst_size	Exceptionprint
format_exc)handlerr'   _tbr%   r&   r,   r-   rB   rG   
file_bytessrO   	safe_namedestes                  r<   handle_uploadr_   5   s   &&&&&&&&B**>2>>W_001A1EEJKK,,,Ww(`?OQU?UW[?[(`(`(`ajmnnnn'|^TTZZb11
Ww(BCCPPPP$V}* 	NWw(?@MMMM	JJ''AA 	J 	J 	JWw(;<SIIIIII	J%%	CGKd8nn.ABB4C4H	 	IIOOC00B66Ww(:;CHHHHy)44$$$y#d))TYY[[M`aabbb B B B&)9)99FFFF7O4SAAAAAAAAABsW   A2G& =AG&  G& &C6 5G& 6DG& DA1G& 	AG& &
H409H/)H4/H4)__doc__r   r'   r   emailpathlibr   
api.configr   api.helpersr   r   
api.modelsr   api.workspacer   tupler=   r_    r>   r<   <module>ri      s                   ' ' ' ' ' '         " " " " " " ) ) ) ) ) )$E $ $ $ $NB B B B Br>   