
    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    77??7#++D#6D
4y1}aCABx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   kk)$G[[2&FK.Ikk)R(Gkk)X.G++m,KK(Ikk"34:Ow
RXX&96BB9::233)'2&&z22!"QRR 	Gd+1!4nEUZ^_7uDQ WW%%bggll7L&IJ
*cG4GGHI 5 4=&vh/&h  

 
L  !JKK  

 	' (3m5 AL  **$D  % &*F +L 4WI>??6vheD26(%@ 	BGGOON3dC
BGGOOL1DA.#8AGGL! 9 77??<((IIl#


><0  ^^WdODt[`a
  A%ww|,,		,'=j>O>O>U>U>W=XYZZ eW"#F8 , "]%x 0
 (}LN	BGGOOI6F)S7;qGGK( < X[M7NOW\dhi
 	7uDQ NN3,	 v&&S'0"'	{% 8&- 
 #<0
 z**RIcrN
 'z2
 u%%O$%fX. -
 $K0
 !(%%g(T/RTYZ vh&;<	
 	
_ 54| 98< <;  WJFTUVVW$  SNPQRRS  RMqQQR  OJANNO  
c(		,g6	Q$V,E))'hQX3Y[`a 	QII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X5         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kk)R(G0
RXX&96BB9::233)'299#>&&z22lF_6_!"Z[[ 36(%@77??<((IIl# 7vheD77>>.))IIn% YY!7xuEF
AO		!  	7uDQ 	gT2 vh&;<
 	
  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   