ó
    Ó-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;   € Þœ F¬C×0Ñ0Ø?Ü
ˆ6ƒ{�SÓØGÜ�8Š8Ð'¨×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-emailTéx   ©Ú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ˆô $4°FÓ#;Ñ ˆÞà Ø)Ø"ñð ö œJ u¬c×2Ñ2¼"¿(º(ÐCWÐY^×:_Ñ:_ÔcfÐglÓcmÐpsÓcsà Ø(Ø8ñð ô �|Š|˜I×&Ñ&à Ø,ØJñð ð �zØØ�&ØØØ�%Øð
ˆô �nŠnØØØØØñ
ˆð -¨V¨H°NÐCˆ	à�>‰>˜QÓàØCØ&ØŸ*™*ØŸ*™*ñð ð !Ø)ØEÀcÇnÁnÐEUÐVØŸ*™*ØŸ*™*ñð øô ×$Ñ$ó 
àØØOØ—j‘j×& BØ—j‘j×& Bñ
õ 	
ûô ó 
Ü�	‰	Ð2°CÔ8àØ'Ø<¼SÀ»X¸JÐ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Ó&ˆô $4°FÓ#;Ñ ˆÞà Ø)Ø"ñð ô �|Š|˜I×&Ñ&à Ø,ØJñð ð �wØ˜6Øð
ˆô �nŠnØØØØØñ
ˆð �>‰>˜QÓàØAØŸ*™*ØŸ*™*ñ	ð ð !Ø)ØKÈCÏNÉNÐK[Ð\ØŸ*™*ØŸ*™*ñð øô ×$Ñ$ó 
àØØJØ—j‘j×& BØ—j‘j×& Bñ
õ 	
ûô ó 
Ü�	‰	Ð/°Ô5àØ'ØBÄ3ÀsÃ8À*Ð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Ó&ˆô $4°FÓ#;Ñ ˆÞà Ø)Ø"ñð ð ,¨F¨8Ð4ˆÜ�w‰w�~‰~˜h×'Ñ'à Ø)Ø2°6°(Ð:]Ð^ñð ô �|Š|˜I×&Ñ&à Ø,ØJñð ð �xØ˜6Øð
ˆô �nŠnØØØØØñ
ˆð �>‰>˜QÓàØAØŸ*™*ØŸ*™*ñ	ð ð !Ø)ØLÈSÏ^É^ÐL\Ð]ØŸ*™*ØŸ*™*ñð øô ×$Ñ$ó 
àØØKØ—j‘j×& BØ—j‘j×& Bñ
õ 	
ûô ó 
Ü�	‰	Ð0°#Ô6àØ'ØCÄCÈÃ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   