a
    Dg                     @   s   d dl mZ d dlmZ d dlmZmZ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 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" dd Z#ee#dd Z$dd Z%dS )    )warn)settings)FileResponseHttp404HttpResponse)get_object_or_404redirect)TemplateResponse)reverse)url_has_allowed_host_and_scheme)etag)hooks)get_document_model)document_served)PasswordViewRestrictionForm)CollectionViewRestriction)sendfile_streaming_backend)RemovedInWagtail70Warning)sendfilec                 C   s0   t  }t|dr,|jj|djddd S d S )NZ	file_hashidT)Zflat)r   hasattrZobjectsfilterZvalues_listfirst)requestdocument_iddocument_filenameDocument r   \/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/documents/views/serve.pydocument_etag   s    
r    c                 C   sn  t  }t||d}|j|kr$tdtdD ] }||| }t|tr.|  S q.tj	||| d z|j
j}W n ty   d }Y n0 z|j
j}W n ty   d }Y n0 ttdd }	|	d u r|r|sd}	nd}	|	dv r|rt|S |r(|jd	k|j|jd
}
ttdstj|
d< t| |fi |
}n$t|j
|j}|j|d< |j
j|d< ttddrbd|d< d|d< |S )Nr   z0This document does not match the given filename.Zbefore_serve_document)Zsenderinstancer   ZWAGTAILDOCS_SERVE_METHODr   Z
serve_view)r   directinline)
attachmentZattachment_filenamemimetypeZSENDFILE_BACKENDbackendzContent-DispositionzContent-LengthZ"WAGTAILDOCS_BLOCK_EMBEDDED_CONTENTTzdefault-src 'none'zContent-Security-PolicyZnosniffzX-Content-Type-Options)r   r   filenamer   r   Z	get_hooks
isinstancer   r   sendfilepathNotImplementedErrorurlgetattrr   r   content_dispositioncontent_typer   r   r   r   size)r   r   r   r   docfnresult
local_path
direct_urlZserve_methodZsendfile_optsresponser   r   r   serve   sN    







r8   c                 C   s   t t|d}| jdkrdt| j|d}| rn|jd }t||  | 	 sPt
j}||  t|S n
t|d}td|jgd}tt
dd}tt
d	rtd
td tt
d	|}||d}t| ||S )z
    Handle a submission of PasswordViewRestrictionForm to grant view access over a
    subtree that is protected by a PageViewRestriction
    r   POST)r!   
return_urlZ&wagtaildocs_authenticate_with_password)argsZ&WAGTAILDOCS_PASSWORD_REQUIRED_TEMPLATEz"wagtaildocs/password_required.htmlZ#DOCUMENT_PASSWORD_REQUIRED_TEMPLATEzwThe `DOCUMENT_PASSWORD_REQUIRED_TEMPLATE` setting is deprecated - use `WAGTAILDOCS_PASSWORD_REQUIRED_TEMPLATE` instead.)category)form
action_url)r   r   methodr   r9   Zis_validZcleaned_datar   get_hostZ	is_securer   ZLOGIN_REDIRECT_URLZmark_as_passedr   r
   r   r.   r   r   r   r	   )r   Zrestriction_idZrestrictionr=   r:   r>   Zpassword_required_templatecontextr   r   r   authenticate_with_passwordx   s@    






rB   N)&warningsr   Zdjango.confr   Zdjango.httpr   r   r   Zdjango.shortcutsr   r   Zdjango.template.responser	   Zdjango.urlsr
   Zdjango.utils.httpr   Zdjango.views.decorators.httpr   Zwagtailr   Zwagtail.documentsr   Zwagtail.documents.modelsr   Zwagtail.formsr   Zwagtail.modelsr   Zwagtail.utilsr   Zwagtail.utils.deprecationr   Zwagtail.utils.sendfiler   r    r8   rB   r   r   r   r   <module>   s&   

X