o
    uvXj   ã                   @   s@   d dl Z d dlmZ d dlmZ d dlmZ G dd„ deƒZdS )é    N)Úsettings)ÚHttpResponsePermanentRedirect)ÚMiddlewareMixinc                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	ÚSecurityMiddlewareNc                 C   sT   t j| _t j| _t j| _t j| _t j	| _
t j| _t j| _dd„ t jD ƒ| _|| _d S )Nc                 S   s   g | ]}t  |¡‘qS © )ÚreÚcompile)Ú.0Úrr   r   úW/var/www/html/myproject/venv/lib/python3.10/site-packages/django/middleware/security.pyÚ
<listcomp>   s    z/SecurityMiddleware.__init__.<locals>.<listcomp>)r   ÚSECURE_HSTS_SECONDSÚsts_secondsÚSECURE_HSTS_INCLUDE_SUBDOMAINSÚsts_include_subdomainsÚSECURE_HSTS_PRELOADÚsts_preloadÚSECURE_CONTENT_TYPE_NOSNIFFÚcontent_type_nosniffÚSECURE_BROWSER_XSS_FILTERÚ
xss_filterÚSECURE_SSL_REDIRECTÚredirectÚSECURE_SSL_HOSTÚredirect_hostÚSECURE_REDIRECT_EXEMPTÚredirect_exemptÚget_response)Úselfr   r   r   r   Ú__init__	   s   
zSecurityMiddleware.__init__c                    s`   |j  d¡‰ | jr*| ¡ s,t‡ fdd„| jD ƒƒs.| jp| ¡ }td|| 	¡ f ƒS d S d S d S )Nú/c                 3   s   � | ]}|  ˆ ¡V  qd S ©N)Úsearch)r	   Úpattern©Úpathr   r   Ú	<genexpr>   s   € ÿz5SecurityMiddleware.process_request.<locals>.<genexpr>zhttps://%s%s)
r%   Úlstripr   Ú	is_secureÚanyr   r   Úget_hostr   Úget_full_path)r   ÚrequestÚhostr   r$   r   Úprocess_request   s   ÿÿÿüz"SecurityMiddleware.process_requestc                 C   sl   | j r"| ¡ r"d|vr"d| j  }| jr|d }| jr|d }||d< | jr+| dd¡ | jr4| dd¡ |S )	NzStrict-Transport-Securityz
max-age=%sz; includeSubDomainsz	; preloadzX-Content-Type-OptionsÚnosniffzX-XSS-Protectionz1; mode=block)r   r(   r   r   r   Ú
setdefaultr   )r   r,   ÚresponseÚ
sts_headerr   r   r   Úprocess_response   s   
z#SecurityMiddleware.process_responser!   )Ú__name__Ú
__module__Ú__qualname__r   r.   r3   r   r   r   r   r      s    

r   )r   Údjango.confr   Údjango.httpr   Údjango.utils.deprecationr   r   r   r   r   r   Ú<module>   s
    