Ë
    ¤7àiA  ã                   ó4   — d Z ddlmZ ddlmZ  G d„ d«      Zy)z
Security headers check module
é    )ÚLogger)Ú	HTTPUtilsc                   ó:   — e Zd ZdZd	dedefd„Zdefd„Zdefd„Z	y)
ÚSecurityHeadersCheckz'Check security headers on API responsesÚloggerÚbase_urlc                 ó4   — || _         t        ||«      | _        y ©N)r   r   Ú
http_utils)Úselfr   r   s      úC/home/factor_ks/STREAMA2026/tests/modules/security_headers_check.pyÚ__init__zSecurityHeadersCheck.__init__   s   € ØˆŒÜ# F¨HÓ5ˆ�ó    Úreturnc                 óÜ   — | j                   j                  d«       d}| j                  «       sd}|r| j                   j                  dd«       |S | j                   j	                  dd«       |S )zRun all security header checkszSecurity Headers CheckTFÚSECURITYz"All security headers checks passedz>Some security headers are missing (recommended for production))r   Ú	subheaderÚ_check_security_headersÚsuccessÚwarning)r   Úall_oks     r   Úrun_all_checksz#SecurityHeadersCheck.run_all_checks   sh   € à�‰×ÑÐ6Ô7àˆð ×+Ñ+Ô-ØˆFáØ�K‰K×Ñ 
Ð,PÔQð ˆð �K‰K×Ñ 
Ð,lÔmàˆr   c                 ó   ‡— | j                   j                  dd«       | j                  j                  d«      \  }}}|s| j                   j	                  dd«       y| j                  j                  «       }|s| j                   j	                  dd«       yddd	gd
dœ}dddœ}g }g }|j                  «       D �]!  \  }	}
|j                  |	j                  «       «      Š‰rÊt        |
t        «      ret        ˆfd„|
D «       «      r | j                   j                  d|	› d�«       Œl| j                   j	                  d|	› d�«       |j                  |	«       Œ�|
‰v r | j                   j                  d|	› d�«       ŒÁ| j                   j	                  d|	› d�«       |j                  |	«       Œò| j                   j	                  d|	› d�«       |j                  |	«       �Œ$ |j                  «       D ]s  }	|j                  |	j                  «       «      Š‰r | j                   j                  d|	› d�«       ŒD| j                   j                  d|	› d�«       |j                  |	«       Œu |s| j                   j                  dd«       y)z+Check if important security headers are setr   zChecking security headers...z/api/healthz(Failed to check headers (request failed)TzFailed to get headersÚnosniffÚDENYÚ
SAMEORIGINz1; mode=block)zX-Content-Type-OptionszX-Frame-OptionszX-XSS-ProtectionN)zContent-Security-PolicyzStrict-Transport-Securityc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr
   © )Ú.0ÚvalÚheader_values     €r   ú	<genexpr>z?SecurityHeadersCheck._check_security_headers.<locals>.<genexpr>E   s   øè ø€ ÒJ°3˜3 ,Ô.ÑJùs   ƒu	   : set âœ“z": set but value may not be optimalz	: not setz$: not set (optional for development)u)   All critical security headers are set âœ“)r   Úinfor   Úgetr   Úget_last_headersÚitemsÚlowerÚ
isinstanceÚlistÚanyr   ÚappendÚkeys)r   r   Ústatus_codeÚresponseÚheadersÚimportant_headersÚoptional_headersÚmissing_criticalÚmissing_optionalÚheader_nameÚexpected_valuesr!   s              @r   r   z,SecurityHeadersCheck._check_security_headers    sU  ø€ à�‰×Ñ˜Ð%CÔDð *.¯©×)<Ñ)<¸]Ó)KÑ&ˆ�˜háØ�K‰K×Ñ 
Ð,VÔWØð —/‘/×2Ñ2Ó4ˆáØ�K‰K×Ñ 
Ð,CÔDØð '0Ø &¨Ð5Ø /ñ
Ðð (,Ø)-ñ
Ðð
 ÐØÐà,=×,CÑ,CÓ,Eó 	5Ñ(ˆK˜Ø"Ÿ;™; {×'8Ñ'8Ó':Ó;ˆLÙÜ˜o¬tÔ4ÜÓJ¸/ÔJÔJØŸ™×+Ñ+¨J¸;¸-ÀyÐ8QÕRàŸ™×+Ñ+¨J¸;¸-ÐGiÐ8jÔkØ(×/Ñ/°Õ<à&¨,Ñ6ØŸ™×+Ñ+¨J¸;¸-ÀyÐ8QÕRàŸ™×+Ñ+¨J¸;¸-ÐGiÐ8jÔkØ(×/Ñ/°Õ<à—‘×#Ñ# J°;°-¸yÐ0IÔJØ ×'Ñ'¨Ö4ð#	5ð& ,×0Ñ0Ó2ò 	5ˆKØ"Ÿ;™; {×'8Ñ'8Ó':Ó;ˆLÙØ—‘×#Ñ# J°;°-¸yÐ0IÕJà—‘× Ñ  °¨}Ð<`Ð-aÔbØ ×'Ñ'¨Õ4ð	5ñ  Ø�K‰K×Ñ 
Ð,WÔXàr   N)zhttp://localhost:8000)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   Úboolr   r   r   r   r   r   r      s0   „ Ù1ñ6˜vð 6°ó 6ð ó ð"?¨ô ?r   r   N)r9   Útests.utils.loggerr   Útests.utils.http_utilsr   r   r   r   r   ú<module>r>      s   ðñõ &Ý ,÷Wò Wr   