
    h	                     F    d dl Z d dlmZ d dlmZ d dlmZ  G d de      Zy)    N)settings)HttpResponsePermanentRedirect)MiddlewareMixinc                   ,     e Zd Zd fd	Zd Zd Z xZS )SecurityMiddlewarec                    t         |   |       t        j                  | _        t        j
                  | _        t        j                  | _        t        j                  | _
        t        j                  | _        t        j                  | _        t        j                  | _        t        j"                  D cg c]  }t%        j&                  |       c}| _        t        j*                  | _        y c c}w N)super__init__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recompileredirect_exemptSECURE_REFERRER_POLICYreferrer_policy)selfget_responser	__class__s      ]/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/django/middleware/security.pyr   zSecurityMiddleware.__init__   s    &#77&.&M&M##77$,$H$H!"<< 44%557?7V7VW!

1W'>>  Xs   6C0c                 ,   |j                   j                  d      | j                  rl|j                         s[t	        fd| j
                  D              s<| j                  xs |j                         }t        d||j                               S y y y )N/c              3   @   K   | ]  }|j                          y wr	   )search).0patternpaths     r$   	<genexpr>z5SecurityMiddleware.process_request.<locals>.<genexpr>   s"      =#  t, =s   zhttps://)
r+   lstripr   	is_secureanyr   r   get_hostr   get_full_path)r    requesthostr+   s      @r$   process_requestz"SecurityMiddleware.process_request   s    ||""3'MM'"3"3"5 ='+';';= =%%;)9)9);D0"&(=(=(?@ = #6M    c           
      D   | j                   rJ|j                         r:d|vr6d| j                   z  }| j                  r|dz   }| j                  r|dz   }||d<   | j                  r|j                  dd       | j                  r|j                  dd       | j                  r||j                  d	d
j                  t        | j                  t              r7| j                  j                  d
      D cg c]  }|j                          c}n| j                               |S c c}w )NzStrict-Transport-Securityz
max-age=%sz; includeSubDomainsz	; preloadzX-Content-Type-OptionsnosniffzX-XSS-Protectionz1; mode=blockzReferrer-Policy,)r   r.   r   r   r   
setdefaultr   r   join
isinstancestrsplitstrip)r    r2   response
sts_headervs        r$   process_responsez#SecurityMiddleware.process_response!   s   !2!2!4+8;%(8(88J**'*??
'+5
4>H01$$ 8)D?? 2OD  1388d22C8 %)$8$8$>$>s$CDqD>B>R>R4 
 	 Es   -Dr	   )__name__
__module____qualname__r   r4   rB   __classcell__)r#   s   @r$   r   r      s    
?r5   r   )r   django.confr   django.httpr   django.utils.deprecationr   r    r5   r$   <module>rK      s    	   5 41 1r5   