
    h              
       T   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ	  e       Z
 G d de      Zded	e j                  d
e
deddf
dZded	e j                  d
e
deddf
dZdZded	e j                  d
e
deddf
dZded	e j                  d
e
deddf
dZded	e j                  d
e
deddf
dZy)    N)apps)get_user_model)ValidationError)gettextc                       e Zd Zy)FileValidationErrorN)__name__
__module____qualname__     @/home/dcms/DCMS/lib/python3.12/site-packages/filer/validation.pyr   r      s    r   r   	file_namefileowner	mime_typereturnc                     | j                  d      d   }|| k(  r$t        t        d      j                  |             t        t        d      j                  | |j	                                     )N.z9File "{file_name}": Upload denied by site security policyr   zEFile "{file_name}": {file_type} upload denied by site security policy)r   	file_type)rsplitr   _formatupper)r   r   r   r   r   s        r   denyr      sz      %b)II!IJQQ\eQf
 	
 	
QRYYoo' 	Z 	
 r   c                 J    t        t        d      j                  |             )zSimple validator that denies all files. Separate for HTML since .html and .htm are both
    common suffixes for text/html files.z>File "{file_name}": HTML upload denied by site security policyr   )r   r   r   )r   r   r   r   s       r   	deny_htmlr      s)     	
JKRR]fRg r   )Is   onbegin=s   onend=s	   onrepeat=s   onabort=   onerror=	   onresize=	   onscroll=s	   onunload=s   oncopy=s   oncut=s   onpaste=s	   oncancel=s
   oncanplay=s   oncanplaythrough=s	   onchange=s   onclick=s   onclose=s   oncuechange=s   ondblclick=s   ondrag=s
   ondragend=s   ondragenter=s   ondragleave=s   ondragover=s   ondragstart=s   ondrop=s   ondurationchange=s
   onemptied=s   onended=r    s   onfocus=s   oninput=s
   oninvalid=s
   onkeydown=s   onkeypress=s   onkeyup=s   onload=s   onloadeddata=s   onloadedmetadata=s   onloadstart=s   onmousedown=s   onmouseenter=s   onmouseleave=s   onmousemove=s   onmouseout=s   onmouseover=s
   onmouseup=s   onmousewheel=s   onpause=s   onplay=s
   onplaying=s   onprogress=s   onratechange=s   onreset=r!   r"   s	   onseeked=s
   onseeking=s	   onselect=s   onshow=s
   onstalled=s	   onsubmit=s
   onsuspend=s   ontimeupdate=s
   ontoggle==s   onvolumechange==s
   onwaiting=s   onactivate=s
   onfocusin=s   onfocusout=s   ;base64,s   <scripts   javascript:c                     |j                         j                         t        t        fdt                    r$t        t        d      j                  |             y)zsSVG files must not contain script tags or javascript hrefs.
    This might be too strict but avoids parsing the xmlc                     | v S )Nr   )xcontents    r   <lambda>zvalidate_svg.<locals>.<lambda>E   s    g r   zPFile "{file_name}": Rejected due to potential cross site scripting vulnerabilityr   N)readloweranymapTRIGGER_XSS_THREADr   r   r   )r   r   r   r   r&   s       @r   validate_svgr-   A   sQ     iik!G
3%'9:;!`aViV(
 	
 <r   c                    ddl m} ddlm} ddlm}  ||      }|s$t        t        d      j                  |              ||j                  |j                  f      }|j                  ||j                         |j                  j                  j                  d	      }	|j                  d       |j!                  |	       y )
Nr   )Image)	renderSVG)svg2rlgz2File "{file_name}": SVG file format not recognizedr   )sizezUTF-8)encoding)easy_thumbnails.VIL.Imager/   reportlab.graphicsr0   svglib.svglibr1   r   r   r   widthheightdrawcanvassvgtoxmlseekwrite)
r   r   r   r   r/   r0   r1   drawingimagexmls
             r   sanitize_svgrB   M   s    /,%dmG!BCViV(
 	
 w~~67ENN7ELL)
,,


 
 '
 
2CIIaLJJsOr   c                 N   t        j                  d      }|j                  rV|j                  D ]9  }||k(  r n@d|v s|j                  d      d   dg|j                  dd      k(  s9 n t	        | |||       ||j
                  v r |j
                  |   D ]  } || |||        yy)zActual validation: Call all validators for the given mime type. The app config reads
    the validators from the settings and replaces dotted paths by callables.filer/r   *   N)r   get_app_configMIME_TYPE_WHITELISTsplitr   FILE_VALIDATORS)r   r   r   r   configallowed_mime_type	validators          r   validate_uploadrO   ^   s       )F !!!'!;!; 	4--))ys/CA/F.LPaPgPghkmnPo.o		4 D%3 F***//	: 	9Iiui8	9 +r   )typingdjango.appsr   django.contrib.authr   django.core.exceptionsr   django.utils.translationr   r   Userr   strIOr   r   r,   r-   rB   rO   r   r   r   <module>rX      s     . 2 1 	/ 	C vyy  # $  FII d s t  6	
C 	
vyy 	
 	
# 	
RV 	
C vyy  # RV "9s 9&)) 9D 9S 9UY 9r   