ó
    ëDj–  ã                  óx   • S SK Jr  S SKrS SKrS SKrS SKrS SKJr  \" S5      rSr	S
S jr
SS jrSS jrSS	 jrg)é    )ÚannotationsN)Ú
get_loggerzactions.nginxz
/etc/nginxc                ó$  • U (       d  [        S5      e[        R                  R                  U 5      n[        R                  R                  [        5      nUR                  U[        R                  -   5      (       d  X:w  a  [        SU  S35      eU$ )z`Resolve the real path and verify it is strictly within NGINX_BASE_DIR to prevent path traversal.zconfig_path is requiredzAccess denied: z% is outside of Nginx config directory)Ú
ValueErrorÚosÚpathÚrealpathÚNGINX_BASE_DIRÚ
startswithÚsepÚPermissionError)Úconfig_pathÚresolved_pathÚ
nginx_bases      Ú7D:\Programs\laragon\www\wolf\agent\src\actions\nginx.pyÚ_verify_safe_pathr      ss   € æÜÐ2Ó3Ð3ä—G‘G×$Ñ$ [Ó1€Mä—‘×!Ñ!¤.Ó1€Jà×#Ñ# J´·±Ñ$7×8Ñ8¸]Ó=XÜ °¨}Ð<aÐbÓcÐcàÐó    c                óò  •  U R                  SS5      n[        U5      n[        R                  R	                  U5      (       d  [        SU 35      e[        R                  R                  U5      nUS:”  a  [        S5      e[        USSSS	9 nUR                  5       nS
S
S
5        SWUUS.$ ! , (       d  f       N= f! [         a.  n[        R                  SU5        S[        U5      S.s S
nA$ S
nAff = f)z/Read Nginx configuration file content securely.r   Ú zConfiguration file not found: é   z0Configuration file exceeds maximum size of 512KBÚrúutf-8Úignore)ÚencodingÚerrorsNT)ÚsuccessÚcontentr   Ú
size_byteszNginx config read failed: %sF©r   Úerror)Úgetr   r   r   ÚisfileÚFileNotFoundErrorÚgetsizer   ÚopenÚreadÚ	ExceptionÚlogr    Ústr)Úpayloadr   r   Ú	file_sizeÚfr   Úexcs          r   Úhandle_nginx_config_readr.      sä   € ð
Ø—k‘k -°Ó4ˆÜ)¨+Ó6ˆä�w‰w�~‰~˜m×,Ñ,Ü#Ð&DÀ[ÀMÐ$RÓSÐSä—G‘G—O‘O MÓ2ˆ	Ø�zÓ!ÜÐOÓPÐPä�- ¨w¸xÒHÈAØ—f‘f“hˆG÷ Ið ØØØ#ñ	
ð 	
÷ IÕHûô ó 
Ü�	‰	Ð0°#Ô6àÜ˜“Xñ
õ 	
ûð
ús6   ‚BB> ÂB-ÂB> Â-
B;Â7B> Â>
C6Ã#C1Ã+C6Ã1C6c                ór	  ^• SnSnSnSn U R                  SS5      nU R                  S5      nUc  [        S5      e[        U5      n[        UR	                  S5      5      S:”  a  [        S	5      e[
        R                  R                  [
        R                  R                  [        S
5      5      [
        R                  R                  [
        R                  R                  [        S5      5      /n[
        R                  R                  U5      m[        U4S jU 5       5      (       d  [        S5      e[
        R                  R                  U5      nU(       a9  U S[        [        R                  " 5       5       3n[         R"                  " X5        U S3n[%        USSS9 n	U	R'                  U5        SSS5        U S3nU(       a  [
        R(                  " X5        [
        R(                  " X�5         [*        R,                  " / SQSSSSS9n
U
R.                  S:H  nSU
R0                   SU
R2                   3nU(       aG  U(       a:  [
        R                  R                  U5      (       a  [
        R8                  " U5        SSUS.$ [
        R                  R                  U5      (       a  [
        R8                  " U5        U(       a;  [
        R                  R                  U5      (       a  [
        R(                  " X15        OAU(       a:  [
        R                  R                  U5      (       a  [         R"                  " X!5        SSUS.$ ! , (       d  f       GNž= f! [4         a  nSnS[7        U5       3n SnAGNCSnAff = f! [4         Ga#  n[:        R=                  SU5         U(       a¿  U S3n[
        R                  R                  U5      (       a  [
        R8                  " U5        U S3nU(       at  [
        R                  R                  U5      (       aP  [
        R                  R                  U5      (       a  [
        R8                  " U5        [
        R(                  " X15        O-! [4         a   n[:        R=                  SU5         SnAOSnAff = fS[7        U5      S .s SnA$ SnAff = f)!zVWrite Nginx configuration file content securely with validation, backup, and rollback.NFr   r   r   zcontent is requiredr   r   z3Configuration content exceeds maximum size of 512KBzsites-availablezconf.dc              3  ó~   >#   • U H3  nTR                  U[        R                  -   5      =(       d    TU:H  v •  M5     g 7f)N)r   r   r   )Ú.0ÚdÚ
parent_dirs     €r   Ú	<genexpr>Ú,handle_nginx_config_write.<locals>.<genexpr>W   s2   øé € Ð^ÑQ]ÈA�:×(Ñ(¨¬R¯V©V©Ó4×G¸
Àa¹ÔGÒQ]ùs   ƒ:=z8Directory is not allowed for writing configuration filesz.wolfpanel.bak.z.tmpÚw)r   z
.orig_temp)Únginxz-tz-cz/etc/nginx/nginx.confT©Úcapture_outputÚtextÚshellÚcheckr   zstdout:
z	
stderr:
z%Nginx test command execution failed: z6Nginx configuration written successfully and tested OK)r   Úmessager   Únginx_test_failed)r   r    Únginx_outputzNginx config write failed: %sz:Nginx rollback failed during general exception handler: %sr   )r!   r   r   ÚlenÚencoder   r   r	   Újoinr
   ÚdirnameÚanyr   ÚexistsÚintÚtimeÚshutilÚcopy2r%   ÚwriteÚrenameÚ
subprocessÚrunÚ
returncodeÚstdoutÚstderrr'   r)   Úremover(   r    )r*   r   Úbackup_pathÚorig_temp_pathÚoriginal_existedr   r   Úallowed_dirsÚtmp_pathr,   ÚresÚtest_successr?   Úer-   Úrollback_excr3   s                   @r   Úhandle_nginx_config_writer[   <   sœ  ø€ à€MØ€KØ€NØÐðc
Ø—k‘k -°Ó4ˆØ—+‘+˜iÓ(ˆà‰?ÜÐ2Ó3Ð3ô *¨+Ó6ˆô ˆw�~‰~˜gÓ&Ó'¨*Ó4ÜÐRÓSÐSô �G‰G×ÑœRŸW™WŸ\™\¬.Ð:KÓLÓMÜ�G‰G×ÑœRŸW™WŸ\™\¬.¸(ÓCÓDð
ˆô —W‘W—_‘_ ]Ó3ˆ
ÜÔ^ÑQ]Ó^×^Ñ^Ü!Ð"\Ó]Ð]ô Ÿ7™7Ÿ>™>¨-Ó8ÐÞØ*˜O¨?¼3¼t¿yºy»{Ó;KÐ:LÐMˆKÜ�LŠL˜Ô4ð $�_ DÐ)ˆÜ�(˜C¨'Ò2°aØ�G‰G�GÔ÷ 3ð *˜?¨*Ð5ˆÞÜ�IŠI�mÔ4Ü
�	Š	�(Ô*ð	LÜ—.’.Ú>Ø#ØØØñˆCð  ŸN™N¨aÑ/ˆLØ& s§z¡z l°+¸c¿j¹j¸\ÐJˆLö æ¤B§G¡G§N¡N°>×$BÑ$BÜ—	’	˜.Ô)àØSØ#ñð ô �w‰w�~‰~˜m×,Ñ,Ü—	’	˜-Ô(Þ¤B§G¡G§N¡N°>×$BÑ$BÜ—	’	˜.Õ8Þ¤§¡§¡°×!<Ñ!<Ü—’˜[Ô8ð !Ø,Ø ,ñð ÷W 3Ö2ûô( ó 	LØ ˆLØBÄ3ÀqÃ6À(ÐKŽLûð	Lûô: ô 
Ü�	‰	Ð1°3Ô7ð	bÞØ+˜_¨DÐ1�Ü—7‘7—>‘> (×+Ñ+Ü—I’I˜hÔ'Ø$1 ?°*Ð!=�Þ#¬¯©¯©°~×(FÑ(FÜ—w‘w—~‘~ m×4Ñ4ÜŸ	š	 -Ô0Ü—I’I˜nÔ<ùÜó 	bÜ�I‰IÐRÐT`×aÑaûð	búð Ü˜“Xñ
õ 	
ûð!
ús•   ‹FN Æ%MÆ7A N Ç8AM  È=AN ÊCN Í
MÍN Í 
NÍ*N Í:N Î NÎN ÎR6ÎR1Î*CQ1Ñ0R1Ñ1
RÑ;RÒR1ÒRÒR1Ò+R6Ò1R6c                óð  •  [         R                  " / SQSSSSS9nUR                  S:X  a,  SSUR                  =(       d    UR                  =(       d    SS.$ [         R                  " / SQSSSSS9nS	UR                   S
UR                   SUR                   SUR                   3nSSSUS.$ ! [
         a<  n[        R                  SU5        SS[        U5      S[        U5       3S.s SnA$ SnAff = f)z2Reload Nginx service using systemctl reload nginx.)Ú	systemctlÚreloadr7   TFr8   r   z$Nginx service reloaded successfully.)r   ÚreloadedÚoutput)r]   Ústatusr7   zReload failed (code z):
z
Service Status:
Ú
Úreload_failed)r   r_   r    r`   zNginx reload failed: %sz*Exception occurred while reloading Nginx: N)	rL   rM   rN   rO   rP   r'   r(   r    r)   )r*   rW   Ú
status_resÚcombined_outputr-   s        r   Úhandle_nginx_service_reloadrf   ©   s  € ð'
Ü�nŠnÚ,ØØØØñ
ˆð �>‰>˜QÓàØ ØŸ*™*×\¨¯
©
×\Ð6\ñð ô $ŸšÚ0Ø#ØØØñˆJð ' s§~¡~Ð&6°d¸3¿:¹:¸,ð G$Ø$.×$5Ñ$5Ð#6°b¸×9JÑ9JÐ8KðMð ð
 !Ø!Ø(Ø)ñ	ð øô ó 
Ü�	‰	Ð+¨SÔ1àØÜ˜“XØBÄ3ÀsÃ8À*ÐMñ	
õ 	
ûð
ús%   ‚AB/ ÁAB/ Â/
C5Â91C0Ã*C5Ã0C5)r   r)   Úreturnr)   )r*   Údictrg   rh   )Ú
__future__r   r   rH   rG   rL   Úloggerr   r(   r
   r   r.   r[   rf   © r   r   Ú<module>rl      s>   ðÝ "ã 	Û Û Û Ý á�Ó!€ð €ôô
ô<j
õZ)
r   