
v^K	                 @   sV   d  d l  Z  d  d l m Z d  d l m Z d  d l m Z Gd d   d e  Z d S)    N)settings)HttpResponsePermanentRedirect)MiddlewareMixinc               @   s7   e  Z d  Z d d d  Z d d   Z d d   Z d S)SecurityMiddlewareNc             C   s   t  j |  _ t  j |  _ t  j |  _ t  j |  _ t  j	 |  _
 t  j |  _ t  j |  _ d d   t  j D |  _ t  j |  _ | |  _ d  S)Nc             S   s   g  |  ] } t  j |   q S )recompile).0rr   r   </tmp/pip-build-8lau8j11/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_HSTS_PRELOADsts_preloadZ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_exemptZSECURE_REFERRER_POLICYreferrer_policyget_response)selfr   r   r   r   __init__	   s    zSecurityMiddleware.__init__c                s~   | j  j d    |  j rz | j   rz t   f d d   |  j D  rz |  j p] | j   } t d | | j	   f  Sd  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   s   |  j  r^ | j   r^ d | k r^ d |  j  } |  j rA | d } |  j rT | d } | | d <|  j rw | j d d  |  j r | j d d  |  j r | j d	 d
 j t	 |  j t
  r d d   |  j j d
  D n |  j   | S)NzStrict-Transport-Securityz
max-age=%sz; includeSubDomainsz	; preloadzX-Content-Type-OptionsZnosniffzX-XSS-Protectionz1; mode=blockzReferrer-Policy,c             S   s   g  |  ] } | j     q Sr   )strip)r	   vr   r   r   r   3   s   	 z7SecurityMiddleware.process_response.<locals>.<listcomp>)r   r   r   r   r   
setdefaultr   r   join
isinstancestrsplit)r   r"   responseZ
sts_headerr   r   r   process_response   s     	
	

			>z#SecurityMiddleware.process_response)__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   