3
š(ƒhS  ã               @   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   sL   t j| _t j| _t j| _t j| _t j	| _
t j| _dd„ t jD ƒ| _|| _d S )Nc             S   s   g | ]}t j|ƒ‘qS © )ÚreÚcompile)Ú.0Úrr   r   ú>/tmp/pip-install-q3hcpn_q/Django/django/middleware/security.pyú
<listcomp>   s    z/SecurityMiddleware.__init__.<locals>.<listcomp>)r   ZSECURE_HSTS_SECONDSÚsts_secondsZSECURE_HSTS_INCLUDE_SUBDOMAINSÚsts_include_subdomainsZSECURE_CONTENT_TYPE_NOSNIFFÚcontent_type_nosniffZSECURE_BROWSER_XSS_FILTERÚ
xss_filterZSECURE_SSL_REDIRECTÚredirectZSECURE_SSL_HOSTÚredirect_hostZSECURE_REDIRECT_EXEMPTÚredirect_exemptÚget_response)Úselfr   r   r   r   Ú__init__	   s    zSecurityMiddleware.__init__c                s\   |j jdƒ‰ | jrX|jƒ  rXt‡ fdd„| jD ƒƒ rX| jpB|jƒ }td||j	ƒ f ƒS d S )Nú/c             3   s   | ]}|j ˆ ƒ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   Zget_full_path)r   ÚrequestÚhostr   )r   r   Úprocess_request   s    z"SecurityMiddleware.process_requestc             C   sf   | j r6|jƒ r6d|kr6d| j  }| jr.|d }||d< | jrLd|krLd|d< | jrbd|krbd|d< |S )Nzstrict-transport-securityz
max-age=%sz; includeSubDomainszx-content-type-optionsZnosniffzx-xss-protectionz1; mode=block)r   r   r   r   r   )r   r    ÚresponseZ
sts_headerr   r   r   Úprocess_response   s    
z#SecurityMiddleware.process_response)N)Ú__name__Ú
__module__Ú__qualname__r   r"   r$   r   r   r   r   r      s   


r   )r   Zdjango.confr   Zdjango.httpr   Zdjango.utils.deprecationr   r   r   r   r   r   Ú<module>   s   