o
    h                     @   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 )N	file_hashidT)flat)r   hasattrobjectsfiltervalues_listfirst)requestdocument_iddocument_filenameDocument r"   ]/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/documents/views/serve.pydocument_etag   s   
r$   c                 C   sh  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yA   d }Y nw z|j
j}W n tyS   d }Y nw ttdd }	|	d u rg|re|sed}	nd}	|	dv rq|rqt|S |r|jd	k|j|jd
}
ttdstj|
d< t| |fi |
}nt|j
|j}|j|d< |j
j|d< ttddrd|d< d|d< |S )Nr   z0This document does not match the given filename.before_serve_document)senderinstancer   WAGTAILDOCS_SERVE_METHODr   
serve_view)r   directinline)
attachmentattachment_filenamemimetypeSENDFILE_BACKENDbackendzContent-DispositionzContent-Length"WAGTAILDOCS_BLOCK_EMBEDDED_CONTENTTzdefault-src 'none'zContent-Security-PolicynosniffzX-Content-Type-Options)r   r   filenamer   r   	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_urlserve_methodsendfile_optsresponser"   r"   r#   serve   sT   





rG   c                 C   s   t t|d}| jdkr2t| j|d}| r1|jd }t||  | 	 s(t
j}||  t|S nt|d}td|jgd}tt
dd}tt
d	rVt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_url&wagtaildocs_authenticate_with_password)args&WAGTAILDOCS_PASSWORD_REQUIRED_TEMPLATEz"wagtaildocs/password_required.html#DOCUMENT_PASSWORD_REQUIRED_TEMPLATEzwThe `DOCUMENT_PASSWORD_REQUIRED_TEMPLATE` setting is deprecated - use `WAGTAILDOCS_PASSWORD_REQUIRED_TEMPLATE` instead.)category)form
action_url)r   r   methodr   rH   is_validcleaned_datar   get_host	is_securer   LOGIN_REDIRECT_URLmark_as_passedr   r
   r   r;   r   r   r   r	   )r   restriction_idrestrictionrO   rI   rP   password_required_templatecontextr"   r"   r#   authenticate_with_passwordx   sB   





r\   N)&warningsr   django.confr   django.httpr   r   r   django.shortcutsr   r   django.template.responser	   django.urlsr
   django.utils.httpr   django.views.decorators.httpr   wagtailr   wagtail.documentsr   wagtail.documents.modelsr   wagtail.formsr   wagtail.modelsr   wagtail.utilsr   wagtail.utils.deprecationr   wagtail.utils.sendfiler   r$   rG   r\   r"   r"   r"   r#   <module>   s(    

X