o
    ø•;hI7  ã                   @   sb   d dl mZ d dlZd dlZd dlmZmZmZmZ ddiZ	dd„ Z
dd	„ ZG d
d„ dejƒZdS )é    )Úabsolute_importN)Ú
ALLOW_FROMÚDENYÚNONCE_LENGTHÚTalismanzwsgi.url_schemeÚhttpsc                   C   ó   dS ©NzHello, world© r
   r
   r
   úO/var/www/html/venv/lib/python3.10/site-packages/flask_talisman/talisman_test.pyÚhello_world   s   r   c                   C   s
   t  d¡S )Nz)<script nonce="{{csp_nonce()}}"></script>)ÚflaskZrender_template_stringr
   r
   r
   r   Ú
with_nonce   s   ÿr   c                   @   sŒ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!S )"ÚTestTalismanExtensionc                 C   sH   t  t¡| _t| jƒ| _| j ¡ | _| j d¡t	ƒ | j d¡t
ƒ d S )Nú/ú/with_nonce)r   ÚFlaskÚ__name__Úappr   ÚtalismanÚtest_clientÚclientÚrouter   r   )Úselfr
   r
   r   ÚsetUp&   s
   zTestTalismanExtension.setUpc                 C   sl   | j jdtd}dddddœ}| ¡ D ]\}}|  |j |¡|¡ q|j d¡}|  d	|¡ |  d
|¡ d S )Nr   ©Zenviron_overridesÚ
SAMEORIGINz#max-age=31556926; includeSubDomainsZnosniffzstrict-origin-when-cross-origin)úX-Frame-OptionsúStrict-Transport-SecurityúX-Content-Type-OptionszReferrer-PolicyúContent-Security-Policyúdefault-src 'self'zobject-src 'none')r   ÚgetÚHTTPS_ENVIRONÚitemsÚassertEqualÚheadersÚassertIn)r   Úresponser&   ÚkeyÚvalueÚcspr
   r
   r   ÚtestDefaults.   s   ûz"TestTalismanExtension.testDefaultsc                 C   sš   | j jdddid}|  |jd¡ | j  d¡}|  |jd¡ |  |jd  d¡¡ d	| j_| j  d¡}|  |jd
¡ d| j_	| j  d¡}|  |jd¡ d S )Nr   úX-Forwarded-Protor   ©r&   éÈ   é.  ZLocationzhttps://Ti-  F)
r   r"   r%   Ústatus_codeZ
assertTruer&   Ú
startswithr   Zforce_https_permanentÚforce_https©r   r(   r
   r
   r   ÚtestForceSslOptionOptionsA   s   ÿz/TestTalismanExtension.testForceSslOptionOptionsc                 C   s8   d| j _| j d¡}|  d|j¡ |  |jd d¡ d S )NTr   úX-XSS-Protectionz1; mode=block)r   Úx_xss_protectionr   r"   r'   r&   r%   r4   r
   r
   r   ÚtestForceXSSProtectionOptionsW   s   z3TestTalismanExtension.testForceXSSProtectionOptionsc                 C   sÊ   d| j _| j d¡}|  d|j¡ d| j _| jjdtd}|  d|j¡ d| j _| jjdddid}|  d|j¡ d| j _	| jjdtd}|  d	|jd ¡ d| j _
| jjdtd}|  d
|jd ¡ d S )NFr   r   r   Tr-   r   r.   ZincludeSubDomainsZpreload)r   Z	force_sslr   r"   ÚassertNotInr&   Zstrict_transport_securityr#   r'   Z,strict_transport_security_include_subdomainsZ!strict_transport_security_preloadr4   r
   r
   r   ÚtestHstsOptions_   s&   ÿ
ÿz%TestTalismanExtension.testHstsOptionsc                 C   s†   t | j_| jjdtd}|  |jd d¡ t| j_d| j_	| jjdtd}|  |jd d¡ d | j_| jjdtd}|  
d|j¡ d S )Nr   r   r   r   úexample.comzALLOW-FROM example.com)r   r   Zframe_optionsr   r"   r#   r%   r&   r   Zframe_options_allow_fromr9   r4   r
   r
   r   ÚtestFrameOptions   s   
ÿz&TestTalismanExtension.testFrameOptionsc                 C   s†  d| j jd< | jjdtd}|jd }|  d|¡ |  d|¡ |  d|¡ d	d
g| j jd< | jjdtd}|jd }|  d|¡ |  d|¡ d| j _| jjdtd}|  |jd d¡ d| j _| jjdtd}|  d|j¡ t	 
t¡}t|dd | ¡ jdtd}|  d|jd ¡ t	 
t¡}t|dd | ¡ jdtd}|  d|j¡ t	 
t¡}t|dd | ¡ jdtd}|  d|j¡ d S )NÚ*z	image-srcr   r   r    zdefault-src 'self';zobject-src 'none';zimage-src *ú'self'r;   r!   zimage-src 'self' example.comzdefault-src 'foo' spam.eggsF©Úcontent_security_policy)Zx_content_type_optionsr   )r7   r6   )r   r@   r   r"   r#   r&   r'   r%   r9   r   r   r   r   r   )r   r(   r+   r   r
   r
   r   Ú testContentSecurityPolicyOptionsŽ   sH   
þ
ÿ
þ

z6TestTalismanExtension.testContentSecurityPolicyOptionsc                 C   s¦   d| j _d| j _| jjdtd}|  d|j¡ |  d|jd ¡ |  d|j¡ d}d|i| j _	| jjdtd}|  d|j¡ |  ||jd ¡ | j
tt| jdd	 d S )
NTzhttps://example.comr   r   z#Content-Security-Policy-Report-Onlyz
report-urir    zhttps://report-uri.io/)Ú#content_security_policy_report_only)r   rB   Z"content_security_policy_report_urir   r"   r#   r'   r&   r9   r@   ZassertRaisesÚ
ValueErrorr   r   )r   r(   Zoverride_report_urir
   r
   r   Ú&testContentSecurityPolicyOptionsReport¿   s0   ÿþÿÿþ
ÿz<TestTalismanExtension.testContentSecurityPolicyOptionsReportc                 C   sÚ   d| j jd< d| j jd< dg| j _| j ¡ M}|jdtd}|jd }|  d 	t
jj¡|¡ |  d	|¡ |  d
 	t
jj¡|¡ |  d|¡ |  t
jj|j d¡¡ |  tt
jjƒt¡ W d   ƒ d S 1 sfw   Y  d S )Nr>   z
script-srcr;   z	style-srcr   r   r    zscript-src 'self' 'nonce-{}'zstyle-src 'self'z style-src example.com 'nonce-{}'zstyle-src example.comzutf-8)r   r@   Z content_security_policy_nonce_inr   r   r"   r#   r&   r'   Úformatr   ÚrequestZ	csp_noncer9   ÚdataÚdecoder%   Úlenr   )r   r   r(   r+   r
   r
   r   ÚtestContentSecurityPolicyNonceÜ   s<   
ÿ
þþþþ
þ"æz4TestTalismanExtension.testContentSecurityPolicyNoncec                 C   sT   | j  d¡| jd ddd„ ƒƒ}| jjdtd}|  d|j¡ |  |jd d¡ d S )	Nz/nocspr?   c                   S   r   r	   r
   r
   r
   r
   r   Únocspþ   ó   z2TestTalismanExtension.testDecorator.<locals>.nocspr   r    r   r   )	r   r   r   r   r"   r#   r9   r&   r%   )r   rK   r(   r
   r
   r   ÚtestDecoratorý   s   

z#TestTalismanExtension.testDecoratorc                 C   s>   | j  d¡| jdddd„ ƒƒ}| j d¡}|  |jd¡ d S )Nz/noforcehttpsF)r3   c                   S   r   r	   r
   r
   r
   r
   r   Únoforcehttps  rL   zCTestTalismanExtension.testDecoratorForceHttps.<locals>.noforcehttpsr/   )r   r   r   r   r"   r%   r1   )r   rN   r(   r
   r
   r   ÚtestDecoratorForceHttps  s
   

z-TestTalismanExtension.testDecoratorForceHttpsc                 C   s<   d| j _| jjdtd}|  d|j¡ |  |jd d¡ d S )NTr   r   zX-Download-OptionsZnoopen)r   Zforce_file_saver   r"   r#   r'   r&   r%   r4   r
   r
   r   ÚtestForceFileSave  s   z'TestTalismanExtension.testForceFileSavec                 C   s@   | j  d¡}|  |jd¡ | j jdddid}|  |jd¡ d S )Nz/bad_endpointr0   r-   r   r.   i”  )r   r"   r%   r1   r4   r
   r
   r   ÚtestBadEndpoint  s   ÿz%TestTalismanExtension.testBadEndpointc                 C   s¢   d| j jd< | jjdtd}|jd }|  d|¡ d| j jd< | jjdtd}|jd }|  d	|¡ t t	¡}t
|d
d | ¡ jdtd}|  d
|jd ¡ d S )Nz'none'Úgeolocationr   r   zFeature-Policyzgeolocation 'none'z'self' example.comÚ
fullscreenzfullscreen 'self' example.comzvibrate 'none')Úfeature_policy)r   rT   r   r"   r#   r&   r'   r   r   r   r   r   )r   r(   rT   r   r
   r
   r   ÚtestFeaturePolicy  s   


z'TestTalismanExtension.testFeaturePolicyc                 C   sö   d| j jd< | jjdtd}|jd }|  d|¡ |  d|¡ d| j jd< d| j jd	< | jjdtd}|jd }|  d|¡ |  d
|¡ i | j _| jjdtd}|j d¡}|  d |¡ t 	t
¡}t|dd | ¡ jdtd}|  d|jd ¡ d S )Nz()rR   r   r   zPermissions-Policyzbrowsing-topics=()zgeolocation=()z(self, "https://example.com")rS   z8geolocation=(), fullscreen=(self, "https://example.com")zvibrate=(), geolocation=())Úpermissions_policy)r   rV   r   r"   r#   r&   r'   r%   r   r   r   r   r   )r   r(   rV   r   r
   r
   r   ÚtestPermissionsPolicy.  s&   


z+TestTalismanExtension.testPermissionsPolicyc                 C   s®   d| j jd< | jjdtd}|jd }|  d|¡ d| j jd< d| j jd< | jjdtd}|jd }|  d|¡ t t	¡}t
|dd	 | ¡ jdtd}|  d|jd ¡ d S )
Nz?0zoversized-imagesr   r   zDocument-Policyzoversized-images=?0zdocument-writez&oversized-images=?0, document-write=?0)Údocument_policy)r   rX   r   r"   r#   r&   r'   r   r   r   r   r   )r   r(   rX   r   r
   r
   r   ÚtestDocumentPolicyH  s   


z(TestTalismanExtension.testDocumentPolicyN)r   Ú
__module__Ú__qualname__r   r,   r5   r8   r:   r<   rA   rD   rJ   rM   rO   rP   rQ   rU   rW   rY   r
   r
   r
   r   r   $   s"     1!
	r   )Ú
__future__r   Zunittestr   Zflask_talismanr   r   r   r   r#   r   r   ZTestCaser   r
   r
   r
   r   Ú<module>   s   