a
    Dg^                     @   s   d dl mZmZ d dlmZmZ d dlmZ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 dlm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dZG dd deZe Z G dd deZ!dS )    )ImproperlyConfiguredPermissionDenied)FileResponseHttpResponse)get_object_or_404redirect)reverse)classonlymethodmethod_decorator)cache_control)View)get_image_model)InvalidFilterSpecError)SourceImageIOError)generate_signatureverify_signature)sendfilewagtailimages_serveNc                 C   s>   t | j||}t||| j|fd}|| jjtdd  7 }|S )N)argszoriginal_images/)r   idr   filenamelen)imagefilter_specZviewnamekey	signatureurl r   Y/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/images/views/serve.pygenerate_image_url   s    r    c                       sX   e Zd Ze ZdZdZe fddZe	e
dddddd	Zd
d Zdd Z  ZS )	ServeViewserveNc                    s.   d|v r|d dvrt dt jf i |S )Naction)r"   r   z5ServeView action must be either 'serve' or 'redirect')r   superas_view)clsZ
initkwargs	__class__r   r   r%      s    zServeView.as_viewi  T)Zmax_agepublicc                 C   s   t | ||| jdstt| j|d}z||}W nB tyV   tdddd Y S  t	yx   td| ddd Y S 0 t
| | j|S )	N)r   )r   zSource image file not foundz
text/plaini  )content_typestatuszInvalid filter spec: i  )r   encoder   r   r   modelZget_renditionr   r   r   getattrr#   )selfrequestr   Zimage_idr   filenamer   	renditionr   r   r   get&   s$    
zServeView.getc                 C   s\   |  }|j}W d    n1 s$0    Y  |jd t|j|d}d|d< d|d< |S )Nrb)r*   default-src 'none'Content-Security-PolicynosniffX-Content-Type-Options)Zget_willow_image	mime_typer   openr   )r/   r2   Zwillow_imager9   responser   r   r   r"   ?   s    
$zServeView.servec                 C   s
   t |jS )N)r   r   )r/   r2   r   r   r   r   O   s    zServeView.redirect)N)__name__
__module____qualname__r   r-   r#   r   r	   r%   r
   r   r3   r"   r   __classcell__r   r   r'   r   r!      s   	r!   c                   @   s   e Zd ZdZdd ZdS )SendFileViewNc                 C   s*   t | j|jj| jd}d|d< d|d< |S )N)backendr5   r6   r7   r8   )r   r0   r   pathrA   )r/   r2   r;   r   r   r   r"   Z   s    zSendFileView.serve)r<   r=   r>   rA   r"   r   r   r   r   r@   W   s   r@   )r   N)"Zdjango.core.exceptionsr   r   Zdjango.httpr   r   Zdjango.shortcutsr   r   Zdjango.urlsr   Zdjango.utils.decoratorsr	   r
   Zdjango.views.decorators.cacher   Zdjango.views.genericr   Zwagtail.imagesr   Zwagtail.images.exceptionsr   Zwagtail.images.modelsr   Zwagtail.images.utilsr   r   Zwagtail.utils.sendfiler   r    r!   r%   r"   r@   r   r   r   r   <module>   s   
=