
    -Ej{                    t    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	S jr	S
S jr
S
S jrS
S jrg)    )annotationsN)
get_loggerzactions.sslc                    U (       a  [        U [        5      (       d  g[        U 5      S:  a  g[        R                  " SU 5      (       d  gg)N)Fz'Domain is required and must be a string   )Fz/Domain exceeds maximum length of 253 charactersz^[a-zA-Z0-9.-]+$)Fz"Domain contains invalid characters)T )
isinstancestrlenrematch)domains    5D:\Programs\laragon\www\wolf\agent\src\actions\ssl.py_validate_domainr      s;    FC00?
6{SG88'00:    c           
         U R                  S5      nU R                  S5      nU R                  SS5      n[        U5      u  pEU(       d  SSUS.$ U(       a@  [        U[        5      (       a+  [        R
                  " SU5      (       a  [        U5      S	:  a  SS
SS.$ [        R                  " S5      (       d  SSSS.$ SSSSUSSSUS/
n[        R                  " USSSSS9nSU S3nUR                  S:X  a  SSUUR                  UR                  S.$ SSSUR                   3UR                  UR                  S .$ ! [        R                   a8  n	SS!S"U	R                  =(       d    S#U	R                  =(       d    S#S .s S$n	A	$ S$n	A	f[         a2  n	[         R#                  S%U	5        SS&S'[        U	5       3S.s S$n	A	$ S$n	A	ff = f)(z;Generate Let's Encrypt / ZeroSSL certificate using Certbot.r   emailproviderletsencryptFinvalid_domainsuccesserrormessagez^[^@\s]+@[^@\s]+$   invalid_emailzEmail is invalid or missingcertbotcertbot_not_found-Certbot binary is not installed on the systemcertonlyz--nginxz-d--non-interactivez--agree-tosz-mz--no-eff-emailTx   capture_outputtextshelltimeout/etc/letsencrypt/live/z/fullchain.pemr   z&SSL certificate generated successfully)r   r   	cert_pathstdoutstderrcertbot_failedz(Certbot execution failed with exit code r   r   r   r)   r*   r&   z6Certbot generation command timed out after 120 secondsr   NzSSL generate action failed: %sexecution_failedz#Failed to execute certbot command: )getr   r   r	   r   r   r
   shutilwhich
subprocessrun
returncoder)   r*   TimeoutExpired	Exceptionlogr   )
payloadr   r   r   is_valid_domainerr_msgcmdresr(   excs
             r   handle_ssl_generater=      s   R
X&G$;;z=9 $4F#;  )"  Juc22"((CWY^:_:_cfglcmpscs (8  ||I&& ,J  z&%
 nn
 -VHNC	>>QC&****  !)EcnnEUV****  $$ 
Ojj&Bjj&B
 	
  
		2C8'<SXJG
 	

sJ   AD= AD=  D= >AD= (D= =G-F>GG'F>8G>Gc                    U R                  S5      n[        U5      u  p#U(       d  SSUS.$ [        R                  " S5      (       d  SSSS.$ SSS	US
/n[        R
                  " USSSSS9nUR                  S:X  a  SSUR                  UR                  S.$ SSSUR                   3UR                  UR                  S.$ ! [        R                   a8  nSSSUR                  =(       d    SUR                  =(       d    SS.s SnA$ SnAf[         a2  n[        R                  SU5        SSS[        U5       3S.s SnA$ SnAff = f)z6Renew existing certificate by cert-name using Certbot.r   Fr   r   r   r   r   renew--cert-namer    Tr!   r"   r   z$SSL certificate renewed successfullyr   r   r)   r*   r+   z.Certbot renew execution failed with exit code r,   r&   z1Certbot renew command timed out after 120 secondsr   NzSSL renew action failed: %sr-   z)Failed to execute certbot renew command: )r.   r   r/   r0   r1   r2   r3   r)   r*   r4   r5   r6   r   r	   )r7   r   r8   r9   r:   r;   r<   s          r   handle_ssl_renewrB   m   sj   @
X& $4F#;  )"  ||I&& ,J  w6
 nn
 >>QA****	  !)KCNNK[\****  $$ 
Jjj&Bjj&B
 	
  
		/5'B3s8*M
 	

sA   *C  C A	C (C E-DEE'E<EEc                    U R                  S5      n[        U5      u  p#U(       d  SSUS.$ SU 3n[        R                  R	                  U5      (       d
  SSSU S3S.$ [
        R                  " S	5      (       d  SS
SS.$ S	SSUS/n[        R                  " USSSSS9nUR                  S:X  a  SSUR                  UR                  S.$ SSSUR                   3UR                  UR                  S.$ ! [        R                   a8  nSSSUR                  =(       d    SUR                  =(       d    SS.s SnA$ SnAf[         a2  n[        R                  SU5        SSS[!        U5       3S.s SnA$ SnAff = f)z4Delete certificate files by cert-name using Certbot.r   Fr   r   r'   cert_not_foundzNo certificate named z# found under /etc/letsencrypt/live/r   r   r   deleter@   r    Tr!   r"   r   z$SSL certificate deleted successfullyrA   r+   z/Certbot delete execution failed with exit code r,   r&   z2Certbot delete command timed out after 120 secondsr   NzSSL delete action failed: %sr-   z*Failed to execute certbot delete command: )r.   r   ospathexistsr/   r0   r1   r2   r3   r)   r*   r4   r5   r6   r   r	   )r7   r   r8   r9   live_dirr:   r;   r<   s           r   handle_ssl_deleterJ      s   I
X& $4F#;  )"  ,F84ww~~h'' )26(:]^  ||I&& ,J  x6
 nn
 >>QA****	  !)LS^^L\]****  $$ 
Kjj&Bjj&B
 	
  
		0#6'CCH:N
 	

sG   *C4 2C4   C4 A	C4 (C4 4E:-D;5E:;E:'E5/E:5E:)r   z
str | Nonereturnztuple[bool, str])r7   dictrK   rL   )
__future__r   rF   r   r/   r1   loggerr   r6   r   r=   rB   rJ    r   r   <module>rP      s:    " 	 	   T
nB
JK
r   