
    27Ej'%                       S SK Jr  S SKrS SKJs  Jr  S SKrS SK	r	S SK
Jr  S SKJrJrJr  S SKr\	R"                  R%                  S \" \" \5      R+                  5       R,                  S   S-  5      5        S SKJrJr  \R4                  S 5       r\R4                  S	 5       r\" S
5      \" S5      \" S5      \" S5      \" SSS9\" S\S9\" SSS9\" S5      \" S5      \" S5      S 5       5       5       5       5       5       5       5       5       5       r\" S
5      \" S5      \" S5      \" S5      \" SSS9\" S\S9\" SSS9S 5       5       5       5       5       5       5       r\" S
5      \" S5      \" S5      \" S5      \" SSS9\" S\S9\" SSS9S 5       5       5       5       5       5       5       r\" S
5      \" S5      \" S5      \" S5      \" SSS9\" S\S9\" SSS9S 5       5       5       5       5       5       5       r S r!\" SSS9\" SSS9\" S
5      \" S5      \" S5      \" S S!/S9\" S"5      S# 5       5       5       5       5       5       5       r"\" S"5      S$ 5       r#g)%    )annotationsN)Path)	MagicMock	mock_openpatch   src)handle_site_createhandle_site_deletec                 6    [        5       n SU l        SU l        U $ )NTzhttp://localhost:8000)r   api_mockapi_url)cfgs    =D:\Programs\laragon\www\wolf\agent\tests\test_actions_site.pymock_configr      s    
+CCL)CKJ    c                 8    [        5       n [        5       U l        U $ )N)r   update_site_status)clients    r   mock_api_clientr      s    [F )FMr   zsubprocess.runzos.makedirsz
os.symlinkz	os.unlinkzos.path.lexistsF)return_valuezbuiltins.open)new_callablezactions.site.load_agent_token
test-tokenzactions.site.handle_sftp_createz#actions.site.handle_database_createz actions.site.handle_ssl_generatec           	     8   [        SSSS9U	l        SSSSS	SSSS
.S.n[        XU5      nUS   nSoUL nU(       do  [        R                  " SU4SX45      [        R
                  " U5      [        R
                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=nnUS   nSoU:H  nU(       do  [        R                  " SU4SX45      [        R
                  " U5      [        R
                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=nnUR                  SSS9  U	R                  / SQSSS9  U	R                  / SQSSS9  UR                  [        R                  R                  S5      SSS9  UR                  SSSS9  UR                  SS5        UR                  S S!SS".5        UR                  S#S 05        U R                  SS$S%S&.5        UR                  R                  SS'S S(.S)5        g )*Nr   	syntax ok 
returncodestdoutstderr*   zexample.comTz/var/www/example.com/publicstatic)sftpdatabasessl)site_iddomain	www_aliasdocrootruntimestarter_packagesuccessisz%(py1)s is %(py4)spy1py4assert %(py6)spy6r'   )==)z%(py1)s == %(py4)s)exist_ok)chownzwww-data:www-data/var/www/example.comFshellcheck)chmod755r8   z&/var/www/example.com/public/index.htmlwutf-8encodingz+/etc/nginx/sites-available/example.com.confz)/etc/nginx/sites-enabled/example.com.confexample_comWolf_example_com_2026)username_suffixpasswordhome_directorynamezadmin@example.comletsencrypt)r'   emailprovideractivestatuserrorr   )r   r   r
   
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationassert_any_callospathnormpathassert_called_once_withr   )mock_sslmock_db	mock_sftp
mock_tokenmock_file_openmock_lexistsmock_unlinkmock_symlinkmock_makedirsmock_runr   r   payloadres@py_assert0@py_assert3@py_assert2@py_format5@py_format7s                      r   test_site_create_static_successrj      s     &;rRH 0
G W?
CCy>!T!T!!!!!>!!!>!!!T!!!!!!!x=)M)M)))))=)))=)))M))))))) !!"?$!O S[`hlmEUZ^_ ""277#3#34\#]_bmt"u ""#PRU`g"h(()V  YD  E %%(+7' 
 ##%  $$$!&  &&>>
x$/r   c	                   [        SSSS9Ul        SSSSS	S
0 S.n	[        XU5      n
U
S   nSoUL o(       do  [        R                  " SU4SX45      [        R
                  " U5      [        R
                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pUR                  SSSS9  UR                  / SQSSS9  g )Nr   r   r   r   +   zmy-php-site.orgFz/var/www/my-php-site.orgphp8.2)r&   r'   r(   r)   r*   php_versionr+   r,   Tr-   r/   r0   r3   r4   z,/etc/php/8.2/fpm/pool.d/my-php-site.org.confr>   r?   r@   )	systemctlreload
php8.2-fpmr9   )	r   r   r
   rO   rP   rQ   rR   rS   rT   r\   r]   r^   r_   r`   ra   rb   r   r   rc   rd   re   rf   rg   rh   ri   s                   r   test_site_create_php_runtimert   e   s     &;rRH #-G W?
CCy>!T!T!!!!!>!!!>!!!T!!!!!!! ""#QSVah"iB%W[\r   c	                   S n	Xl         SSSSSSS.n
[        XU5      nUS	   nS
oUL o(       do  [        R                  " SU4SX45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pUR                  R                  SSS S.S5        g )Nc                N    SU ;   a  [         R                  SU SS9e[        SSSS9$ )Nrr   r   zreload failed)r    r   r   r   )
subprocessCalledProcessErrorr   )cmdargskwargss      r   run_side_effectKtest_site_create_php_fpm_reload_failure_soft_fails.<locals>.run_side_effect   s1    3//3/OOAb<<r   ,   zphp-fail.comFz/var/www/php-fail.comrm   rn   )r&   r'   r(   r)   r*   ro   r,   Tr-   r/   r0   r3   r4   rK   rL   r   )	side_effectr
   rO   rP   rQ   rR   rS   r   assert_called_with)r\   r]   r^   r_   r`   ra   rb   r   r   r|   rc   rd   re   rf   rg   rh   ri   s                    r   2test_site_create_php_fpm_reload_failure_soft_failsr      s    =
 +  *G W?
CC y>!T!T!!!!!>!!!>!!!T!!!!!!!&&99
x$/r   Tc	                   [        SSSS9Ul        SSSSS	S
.n	[        XU5      n
U
S   nSoUL o(       do  [        R                  " SU4SX45      [        R
                  " U5      [        R
                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pSoS   oU;   o(       do  [        R                  " SU4SX45      [        R
                  " U5      [        R
                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pUR                  S5        UR                  R                  SSU
S   S.S5        g )Nr   r   znginx emerg syntax errorr   -   zbad-nginx.comTz/var/www/bad-nginx.comr"   )r&   r'   r(   r)   r*   r,   Fr-   r/   r0   r3   r4   zNginx configuration test failedrN   in)z%(py1)s in %(py4)sz+/etc/nginx/sites-enabled/bad-nginx.com.conffailedrL   r   )r   r   r
   rO   rP   rQ   rR   rS   rT   r   rX   rs   s                   r   0test_site_create_nginx_test_failure_raises_errorr      s    &2F`aH !+G W?
CC y>"U"U""""">""">"""U""""""",<G<<<<<<,<<<,<<<<<<<<<<  MN &&>>
x#g,7r   c                   SSSS.SSSS.SSSS.SSSS./nU GH  n[        X0U5      nUS	   nS
oeUL ow(       do  [        R                  " SU4SXV45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n	[	        [        R
                  " U	5      5      eS =n=pv/ n
SotS   oU;   oo\(       d  SoS   oU;   onU(       Gd
  [        R                  " SU4SX{45      [        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  nU
R                  U5        U(       db  [        R                  " SW4SWW45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  nU
R                  U5        [        R                  " U
S5      0 -  nSSU0-  n[	        [        R
                  " U5      5      eS =n=n
=n=n=n=n=pGM     g )Nz
../outsidez/var/www/outsider   )r'   r)   r&   zsite.com
/etc/nginxz/var/www/../../etc/nginxzd:/programs/var/www/siter,   Fr-   r/   r0   r3   r4   Invalid domainrN   zmust be under /var/wwwr   z%(py3)s in %(py6)spy3r4   %(py8)spy8z%(py11)s in %(py14)spy11py14%(py16)spy16assert %(py19)spy19)r
   rO   rP   rQ   rR   rS   append_format_boolop)r   r   payloadsprd   re   rf   rg   rh   ri   @py_assert1@py_assert5@py_assert4@py_assert10@py_assert13@py_assert12@py_format9@py_format15@py_format17@py_format18@py_format20s                        r   1test_site_create_validation_blocks_path_traversalr      sQ   ,>1M,1E*DQRS*DQRS	H  A9~&&&&&&&~&&&~&&&&&&&&&&] ]L]L0]4L]T[P\]P\4\]]]] ]]] ]]]L]]]]]]]]4LP\]]]4L]]]P\]]]]]]]]]]]]]]] r   zos.path.existsz	os.removez	glob.glob$/etc/php/8.2/fpm/pool.d/del.com.confzshutil.rmtreec	                   [        SS9Ul        SSS.n	[        XU5      n
U
S   nSoUL o(       do  [        R                  " SU4S	X45      [        R
                  " U5      [        R
                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pUR                  S5        UR                  S5        UR                  S5        U R                  SSS9  UR                  / SQSSS9  g )Nr   )r   del.com/var/www/del.comr'   r)   r,   Tr-   r/   r0   r3   r4   z%/etc/nginx/sites-enabled/del.com.confz'/etc/nginx/sites-available/del.com.confr   )ignore_errors)rp   rq   nginxFr9   )
r   r   r   rO   rP   rQ   rR   rS   rX   rT   )mock_rmtree	mock_globmock_remover_   rb   r^   mock_existsr   r   rc   rd   re   rf   rg   rh   ri   s                   r   test_site_delete_successr      s     &3H %G
 W?
CCy>!T!T!!!!!>!!!>!!!T!!!!!!! ''(OP IJ  FG ''(:$'O $$%EUZ^$_r   c                    SSS.SSS.SSS.SSS./nU GH  n[        XAU5      nUS   nS	ovUL o(       do  [        R                  " S
U4SXg45      [        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[	        [        R
                  " U
5      5      eS =n=p/ nSoS   oU;   oom(       d  SoS   oU;   nUnU(       Gd
  [        R                  " SU4SX45      [        R                  " U5      [        R                  " U5      S.-  n
SSU
0-  nUR                  U5        U(       db  [        R                  " SW4SWW45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  nUR                  U5        [        R                  " US5      0 -  nSSU0-  n[	        [        R
                  " U5      5      eS =n=n=n=n=n=n=nnGM     U R                  5         g )Nz../etcr   r   r   z/var/wwwz	/var/www/r   r,   Fr-   r/   r0   r3   r4   r   rN   zmust be strictly under /var/wwwr   r   r   r   r   r   r   r   r   r   r   r   )	r   rO   rP   rQ   rR   rS   r   r   assert_not_called)r   r   r   invalid_payloadsr   rd   re   rf   rg   rh   ri   r   r   r   r   r   r   r   r   r   r   r   s                         r   &test_site_delete_security_restrictionsr     sV    (:;456	  A9~&&&&&&&~&&&~&&&&&&&&&&f fLfL0f4Uf]dYefYe4effff fff fffLffffffff4UYefff4UfffYefffffffffffffff 
 !!#r   )$
__future__r   builtins@py_builtins_pytest.assertion.rewrite	assertionrewriterO   rU   syspathlibr   unittest.mockr   r   r   pytestrV   insertstr__file__resolveparentsactions.siter
   r   fixturer   r   rj   rt   r   r   r   r   r    r   r   <module>r      s   "   	 
  5 5  3tH~--/77:UBC D ?     }|{u-Y/&\B(),-)*: + . * C 0 .    :z }|{u-Y/&\B] C 0 .    ]6 }|{u-Y/&\B C 0 .    > }|{t,Y/&\B C 0 -    <^ d+t,{{{"H!IJ`  K    - ,`: $ $r   