ó
    C7Ej&  ã                  ó¢   • S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJr  \" S5      rSS	 jrSS
 jrSS jrg)é    )ÚannotationsN)Úhandle_database_create)Úhandle_sftp_create)Úhandle_ssl_generate)Úload_agent_token)Ú
get_loggerzactions.sitec                óž   • [         R                  R                  U 5      R                  SS5      n[	        U5      S:”  a  US   S:X  a  USS  nU$ )NÚ\Ú/é   Ú:é   )ÚosÚpathÚabspathÚreplaceÚlen)ÚdocrootÚnorms     Ú6D:\Programs\laragon\www\wolf\agent\src\actions\site.pyÚ_normalize_docrootr      sF   € ä�7‰7�?‰?˜7Ó#×+Ñ+¨D°#Ó6€Dä
ˆ4ƒy�1ƒ}˜˜a™ C›Ø�A�BˆxˆØ€Kó    c           	     ó  • U R                  S5      nU R                  SS5      nU R                  SS5      nU R                  SS5      nU R                  SS5      nU R                  S	5      nU R                  S
5      n	U R                  S5      =(       d    0 n
 U(       a  [        R                  " SU5      (       d  [        S5      eU(       d  [        S5      e[	        U5      nUR                  S5      (       d  [        S5      e[        R                  " USS9  [        R                  R                  U5      n[        R                  " SSU/SSS9  [        R                  " SSU/SSS9  [        R                  R                  [        R                  R                  US5      5      n[        USSS9 nUR!                  S5        SSS5        U(       a  U SU 3OUnUS:X  a
  SU S U S!3nOQUS":X  a"  U(       d  [        S#5      eSU S U S$U S%U S&3	nO)US';   a  U	=(       d    S(nSU S)U S*3nO[        S+U 35      eS,U S-3nS.U S-3n[        R                  " [        R                  R                  U5      SS9  [        R                  " [        R                  R                  U5      SS9  [        USSS9 nUR!                  U5        SSS5        [        R                  R#                  U5      (       a  [        R$                  " U5        [        R&                  " UU5        [        R                  " S/S0/SSSS19nUR(                  S2:w  a`  [        R                  R#                  U5      (       a  [        R$                  " U5        [+        S3UR,                  R/                  5        35      eUS":X  aŠ   S4U S5U S%U S63nS7U S8U S-3n[        R                  " [        R                  R                  U5      SS9  [        USSS9 nUR!                  U5        SSS5        [        R                  " S9S:S"U S;3/SSS9  [        R                  " / S=QSSS9  UR7                  S>S?5      nU
R                  S@5      (       a   USAU SB3USC.n[9        U5        U
R                  SE5      (       a   SFUSSG 0n[;        U5        U
R                  SI5      (       a   USJU 3SKSL.n[=        U5        [?        U5      nURA                  USNSSO.U5        SSPU SQ3UUSR.$ ! , (       d  f       GNU= f! , (       d  f       GNa= f! , (       d  f       GN&= f! [0         a"  n[2        R5                  S<UU5         SnAGN3SnAff = f! [0         a!  n[2        R5                  SDU5         SnAGNSnAff = f! [0         a!  n[2        R5                  SHU5         SnAGNSnAff = f! [0         a!  n[2        R5                  SMU5         SnAGNSnAff = f! [0         a€  n[C        U5      n[2        RE                  SSU5         [?        U5      nURA                  USTUSO.U5        O-! [0         a   n[2        RE                  SUU5         SnAOSnAff = fSUSV.s SnA$ SnAff = f)WzQCreate a new site, write Nginx vhosts, configure PHP-FPM, and notify the backend.Úsite_idÚdomainÚ Ú	www_aliasTr   ÚruntimeÚstaticÚphp_versionÚ	node_portÚstarter_packageú^[a-zA-Z0-9.-]+$úInvalid domain name formatúdocroot is requiredú/var/wwwz-Access denied: docroot must be under /var/www)Úexist_okÚchownzwww-data:www-dataF©ÚshellÚcheckÚchmodÚ755z
index.htmlÚwzutf-8)Úencodingu2   Site hazÄ±r â€” WolfPanel tarafÄ±ndan oluÅŸturulduNz www.z(server {
    listen 80;
    server_name z;
    root z_;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}
Úphpz'php_version is required for PHP runtimezå;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/phpz-fpm-z.sock;
    }
}
)ÚnodeÚpythoni¸  z8;

    location / {
        proxy_pass http://127.0.0.1:zÙ;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
zUnsupported runtime: ú/etc/nginx/sites-available/ú.confú/etc/nginx/sites-enabled/Únginxz-t)Úcapture_outputÚtextr*   r   z!Nginx configuration test failed: Ú[z8]
user = www-data
group = www-data
listen = /run/php/phpzŒ.sock
listen.owner = www-data
listen.group = www-data
pm = ondemand
pm.max_children = 5
pm.process_idle_timeout = 10s
pm.max_requests = 500
z	/etc/php/z/fpm/pool.d/Ú	systemctlÚreloadz-fpmz,Soft fail setting up PHP-FPM pool for %s: %s©r:   r;   r6   Ú.Ú_ÚsftpÚWolf_Ú_2026)Úusername_suffixÚpasswordÚhome_directoryz0Soft fail creating starter package SFTP user: %sÚdatabaseÚnameé   z/Soft fail creating starter package Database: %sÚsslzadmin@Úletsencrypt)r   ÚemailÚproviderz,Soft fail generating starter package SSL: %sÚactive)ÚstatusÚerrorúSite z created successfully)ÚsuccessÚmessager   r   zSite creation failed: %sÚfailedz)Failed to notify backend site failure: %s©rP   rN   )#ÚgetÚreÚmatchÚ
ValueErrorr   Ú
startswithÚPermissionErrorr   Úmakedirsr   ÚdirnameÚ
subprocessÚrunÚnormpathÚjoinÚopenÚwriteÚlexistsÚunlinkÚsymlinkÚ
returncodeÚOSErrorÚstderrÚstripÚ	ExceptionÚlogÚwarningr   r   r   r   r   Úupdate_site_statusÚstrrN   ) ÚpayloadÚconfigÚ
api_clientr   r   r   r   r   r    r!   r"   Únorm_docrootÚdocroot_parentÚ
index_pathÚfÚserver_namesÚnginx_configÚportÚavailable_pathÚenabled_pathÚ
nginx_testÚpool_configÚ	pool_pathÚeÚ	db_suffixÚsftp_payloadÚ
db_payloadÚssl_payloadÚtokenÚexcÚerr_msgÚcallback_excs                                    r   Úhandle_site_creater†      sR  € à�k‰k˜)Ó$€GØ�[‰[˜ 2Ó&€FØ—‘˜K¨Ó.€IØ�k‰k˜) RÓ(€GØ�k‰k˜) XÓ.€GØ—+‘+˜mÓ,€KØ—‘˜KÓ(€IØ—k‘kÐ"3Ó4×:¸€Oðw
æœRŸXšXÐ&9¸6×BÑBÜÐ9Ó:Ð:æÜÐ2Ó3Ð3ä)¨'Ó2ˆØ×&Ñ& z×2Ñ2Ü!Ð"QÓRÐRô 	�Š�G dÒ+ÜŸ™Ÿ™¨Ó1ˆÜ�Š˜Ð!4°nÐEÈUÐZ^Ò_Ü�Š˜ ¨Ð7¸uÈDÒQô —W‘W×%Ñ%¤b§g¡g§l¡l°7¸LÓ&IÓJˆ
Ü�*˜c¨GÒ4¸Ø�G‰GÐHÔI÷ 5ö 4=˜&˜  v hÑ/À&ˆà�hÓð à�ð 
Ø
ˆð ð
‰Lð ˜ÓÞÜ Ð!JÓKÐKð à�ð 
Ø
ˆð 	'ð (3 m°5¸¸ð Að‰Lð  Ð*Ó*Ø×$ ˆDð à�ð %ð &* Fð +ð‰Lô Ð4°W°IÐ>Ó?Ð?à6°v°h¸eÐDˆØ2°6°(¸%Ð@ˆô 	�Š”B—G‘G—O‘O NÓ3¸dÒCÜ
�Š”B—G‘G—O‘O LÓ1¸DÒAä�. #°Ò8¸AØ�G‰G�LÔ!÷ 9ô �7‰7�?‰?˜<×(Ñ(Ü�IŠI�lÔ#Ü
�
Š
�> <Ô0ô  —^’^ W¨d OÀDÈtÐ[`Ñaˆ
Ø× Ñ  AÓ%Ü�w‰w�‰˜|×,Ñ,Ü—	’	˜,Ô'ÜÐ=¸j×>OÑ>O×>UÑ>UÓ>WÐ=XÐYÓZÐZð �eÓðWØ"# F 8ð ,ð "�] %¨ xð 0ð
�ð (¨ }°LÀÀÈÐN�	Ü—’œBŸG™GŸO™O¨IÓ6ÀÒFÜ˜) S°7Ò;¸qØ—G‘G˜KÔ(÷ <ô —’ ¨X¸¸[¸MÈÐ7NÐOÐW\ÐdhÒiô
 	�ŠÒ7¸uÈDÒQð —N‘N 3¨Ó,ˆ	ð ×Ñ˜v×&Ñ&ðSà'0Ø"'¨	 {°%Ð 8Ø&-ñ �ô
 # <Ô0ð
 ×Ñ˜z×*Ñ*ðRà˜I c r˜Nð�
ô ' zÔ2ð
 ×Ñ˜u×%Ñ%ðOà$Ø% f XÐ.Ø -ñ�ô
 $ KÔ0ô
 ! Ó(ˆØ×%Ñ% g¸(ÈTÑ/RÐTYÔZð Ø˜v˜hÐ&;Ð<ØØñ	
ð 	
÷_ 5Ö4ú÷| 9Ö8ú÷< <Ö;ûô ó WÜ—‘ÐJÈFÐTU×VÒVûðWûô$ ó SÜ—‘ÐNÐPQ×RÒRûðSûô ó RÜ—‘ÐMÈq×QÒQûðRûô ó OÜ—‘ÐJÈA×NÒNûðOûô ó 
Ü�c“(ˆÜ�	‰	Ð,¨gÔ6ð	QÜ$ VÓ,ˆEØ×)Ñ)¨'¸hÐQXÑ3YÐ[`ÕaøÜó 	QÜ�I‰IÐAÀ<×PÑPûð	Qúð Øñ
õ 	
ûð
ús=  ÂDX  Æ1TÇC4X  Ê7T#Ë	C(X  Î2AU ÐT5Ð%U Ð;A X  Ñ<U6 ÒX  Ò(V$ Ò:X  ÓW Ó%+X  Ô
T ÔX  Ô#
T2Ô-X  Ô5
UÔ?U Õ
U3ÕU.Õ(X  Õ.U3Õ3X  Õ6
V!Ö VÖX  ÖV!Ö!X  Ö$
WÖ.W
×X  ×
W×X  ×
W=×W8×2X  ×8W=×=X  Ø 
Z
Ø
!ZØ,!YÙZÙ
Y8ÙY3Ù.ZÙ3Y8Ù8ZÙ?Z
ÚZ
c                ó  • U R                  SS5      nU R                  SS5      n U(       a  [        R                  " SU5      (       d  [        S5      eU(       d  [        S5      e[	        U5      R                  S5      nUR                  S5      (       a  US	;   a  [        S
5      eSU S3n[        R                  R                  U5      (       a  [        R                  " U5        SU S3n[        R                  R                  U5      (       a  [        R                  " U5        [        R                  " SU S35      nU H  n	 [        R                  " U	5        M     [$        R&                  " / SQSSS9  [(        R*                  " USS9  SSU S3US.$ ! [         a!  n
[         R#                  SXš5         Sn
A
M{  Sn
A
ff = f! [         a0  n[-        U5      n[         R/                  SU5        SUS.s SnA$ SnAff = f)zODelete site Nginx config, PHP pool, reload Nginx, and delete docroot directory.r   r   r   r#   r$   r%   r   r&   )r&   z	/var/www/z6Access denied: docroot must be strictly under /var/wwwr5   r4   r3   z/etc/php/*/fpm/pool.d/z)Failed to delete PHP-FPM pool file %s: %sNr<   FTr)   )Úignore_errorsrO   z deleted successfully)rP   rQ   r   zSite deletion failed: %srS   )rT   rU   rV   rW   r   ÚrstriprX   rY   r   r   rb   rc   ÚexistsÚremoveÚglobri   rj   rk   r\   r]   ÚshutilÚrmtreerm   rN   )rn   ro   rp   r   r   rq   ry   rx   Ú
pool_pathsÚpr}   rƒ   r„   s                r   Úhandle_site_deleter‘   ß   sÄ  € à�[‰[˜ 2Ó&€FØ�k‰k˜) RÓ(€Gð0
æœRŸXšXÐ&9¸6×BÑBÜÐ9Ó:Ð:æÜÐ2Ó3Ð3ä)¨'Ó2×9Ñ9¸#Ó>ˆØ×&Ñ& z×2Ñ2°lÐF_Ó6_Ü!Ð"ZÓ[Ð[ð 3°6°(¸%Ð@ˆÜ�7‰7�?‰?˜<×(Ñ(Ü�IŠI�lÔ#ð 7°v°h¸eÐDˆÜ�7‰7�>‰>˜.×)Ñ)Ü�IŠI�nÔ%ô —Y’YÐ!7¸°x¸uÐEÓFˆ
ÛˆAðOÜ—	’	˜!–ñ ô 	�ŠÒ7¸uÈDÒQô 	�Š�g¨TÒ2ð Ø˜v˜hÐ&;Ð<Øñ
ð 	
øô ó OÜ—‘ÐGÈ×NÒNûðOûô ó 
Ü�c“(ˆÜ�	‰	Ð,¨gÔ6àØñ
õ 	
ûð
úsH   ¦D G ÅFÅ:G Æ
GÆ"F>Æ8G Æ>GÇG Ç
H Ç%G;Ç5H Ç;H )r   rm   Úreturnrm   )rn   Údictr’   r“   )Ú
__future__r   rŒ   r   rU   r�   r\   Úactions.databaser   Úactions.sftpr   Úactions.sslr   Úidentityr   Úloggerr   rj   r   r†   r‘   © r   r   Ú<module>r›      sA   ðÝ "ã Û 	Û 	Û Û Ý 3Ý +Ý +Ý %Ý á�Ó €ôôB
õJ5
r   