Ë
    Ì
âiÚ  ã                   óD   — d Z ddlmZ ddlmZ ddlZddlZ G d„ d«      Zy)z!
SSL/Let's Encrypt checks module
é    )ÚLogger)ÚDockerUtilsNc                   ó†   — e Zd ZdZddededefd„Zdefd„Z	defd	„Z
defd
„Zdefd„Zdefd„Zdededdfd„Zdedefd„Zy)Ú	SSLChecksz<Check SSL certificate status and Let's Encrypt configurationNÚloggerÚdocker_utilsÚdomainc                 ó.   — || _         || _        || _        y ©N)r   r   r	   )Úselfr   r   r	   s       ú7/home/factor_ks/STREAMA2026/tests/modules/ssl_checks.pyÚ__init__zSSLChecks.__init__   s   € ØˆŒØ(ˆÔØˆ�ó    Úreturnc                 óv  — | j                   j                  d«       d}| j                  «       sd}| j                  «       sd}| j                  r| j                  «       sd}n| j                   j                  dd«       |r| j                   j                  dd«       |S | j                   j                  dd«       |S )zRun all SSL checkszSSL Certificate CheckTFÚSSLz5No domain configured - skipping SSL certificate checkzAll SSL checks passedzSome SSL checks failed)	r   Ú	subheaderÚ_check_domain_configuredÚ_check_caddy_runningr	   Ú_check_ssl_certificateÚwarningÚsuccessÚerror)r   Úall_oks     r   Úrun_all_checkszSSLChecks.run_all_checks   sª   € à�‰×ÑÐ5Ô6àˆð ×,Ñ,Ô.ØˆFð ×(Ñ(Ô*ØˆFð �;Š;Ø×.Ñ.Ô0Ø‘à�K‰K×Ñ Ð'^Ô_áØ�K‰K×Ñ Ð'>Ô?ð ˆð �K‰K×Ñ˜eÐ%=Ô>àˆr   c                 óâ   — | j                   j                  dd«       | j                  r+| j                   j                  dd| j                  › d�«       y| j                   j	                  dd«       y)zCheck if domain is configuredr   z Checking domain configuration...zDomain configured: õ    âœ“Tz&No domain configured (using localhost))r   Úinfor	   r   r   )r   s    r   r   z"SSLChecks._check_domain_configured.   s[   € à�‰×Ñ˜Ð BÔCà�;Š;Ø�K‰K×Ñ Ð)<¸T¿[¹[¸MÈÐ'NÔOØà�K‰K×Ñ Ð'OÔPØr   c                 ó2  — | j                   j                  dd«       | j                  j                  d«      }|dk(  r| j                   j	                  dd«       y|r | j                   j                  dd|› �«       y| j                   j                  dd	«       y)
z#Check if Caddy container is runningr   z"Checking Caddy container status...ústreama2026-caddyÚrunningu   Caddy container: running âœ“TzCaddy container: FzCaddy container: not found)r   r   r   Úget_container_statusr   r   )r   Ústatuss     r   r   zSSLChecks._check_caddy_running9   sˆ   € à�‰×Ñ˜Ð DÔEà×"Ñ"×7Ñ7Ð8KÓLˆà�YÒØ�K‰K×Ñ Ð'EÔFØÙØ�K‰K×Ñ˜eÐ'8¸¸Ð%AÔBØà�K‰K×Ñ˜eÐ%AÔBØr   c                 óô  — | j                   j                  dd| j                  › d�«       | j                  j	                  dd¬«      }d}d}g d	¢}|D ]B  }|j                  «       |j                  «       v sŒ$d
}| j                   j                  dd«        n g d¢}|D ]J  }t        j                  ||t        j                  «      sŒ)|}| j                   j                  dd|› �«        n | j                  «       }|s|r+| j                   j                  dd| j                  › d�«       y
|r2| j                   j                  dd|› �«       | j                  ||«       y| j                   j                  dd«       y
)zCheck SSL certificate statusr   zChecking SSL certificate for z...r    éd   )ÚtailFN)z!certificate obtained successfullyzobtaining certificatez-enabling automatic TLS certificate managementz certificate renewed successfullyztls handshake successfulTu+   Certificate obtained from Let's Encrypt âœ“)úacme:.*errorzfailed to obtain certificatezcertificate request failedúno solution foundztoo many certificatesú
rate limitzCertificate error detected: zSSL certificate for u    is active âœ“z"SSL certificate failed to obtain: z-Certificate status unknown - check Caddy logs)r   r   r	   r   Úget_container_logsÚlowerr   ÚreÚsearchÚ
IGNORECASEr   Ú_check_https_accessibleÚ_explain_certificate_errorr   )r   ÚlogsÚcert_obtainedÚ
cert_errorÚsuccess_patternsÚpatternÚerror_patternsÚhttps_accessibles           r   r   z SSLChecks._check_ssl_certificateI   sp  € à�‰×Ñ˜Ð"?ÀÇÁ¸}ÈCÐ PÔQð × Ñ ×3Ñ3Ð4GÈcÐ3ÓRˆð ˆØˆ
ò
Ðð (ò 	ˆGØ�}‰}‹ $§*¡*£,Ò.Ø $�Ø—‘×#Ñ# EÐ+XÔYÙð		ò
ˆð &ò 	ˆGÜ�y‰y˜ $¬¯©Õ6Ø$�
Ø—‘×!Ñ! %Ð+GÈÀyÐ)QÔRÙð		ð  ×7Ñ7Ó9Ðñ Ñ,Ø�K‰K×Ñ Ð)=¸d¿k¹k¸]È.Ð'YÔZØÙØ�K‰K×Ñ˜eÐ'IÈ*ÈÐ%VÔWØ×+Ñ+¨D°*Ô=Øà�K‰K×Ñ Ð'VÔWØr   c                 ó‚  — 	 d| j                   › �}t        j                  |dd¬«      }|j                  dk(  r!| j                  j                  dd|› d�«       y	| j                  j                  dd
|j                  › �«       y# t        $ r2}| j                  j                  ddt        |«      › �«       Y d}~yd}~ww xY w)z%Check if HTTPS is actually accessiblezhttps://é   F)ÚtimeoutÚverifyéÈ   r   zHTTPS accessible at r   TzHTTPS returned status zHTTPS not accessible: N)	r	   ÚrequestsÚgetÚstatus_coder   r   r   Ú	ExceptionÚstr)r   ÚurlÚresponseÚes       r   r/   z!SSLChecks._check_https_accessible‚   s±   € ð	Ø˜TŸ[™[˜MÐ*ˆCä—|‘| C°¸5ÔAˆHØ×#Ñ# sÒ*Ø—‘×#Ñ# EÐ-AÀ#ÀÀdÐ+KÔLØà—‘×#Ñ# EÐ-CÀH×DXÑDXÐCYÐ+ZÔ[ØøÜò 	Ø�K‰K×Ñ Ð)?ÄÀAÃ¸xÐ'HÔIÜûð	ús   ‚AB Á)B Â	B>Â(B9Â9B>r1   r   c                 óÄ  — | j                   j                  dd«       d|j                  «       v r9| j                   j                  dd«       | j                   j                  dd«       n•d|j                  «       v r9| j                   j                  dd«       | j                   j                  dd«       nJd	|j                  «       v r8| j                   j                  dd
«       | j                   j                  dd«       | j                   j                  dd«       | j	                  |«      }|dd D ]/  }| j                   j                  dd|j                  «       › �«       Œ1 y)z0Explain certificate errors and provide solutionsr   zAnalyzing certificate error...r)   z!Let's Encrypt rate limit exceededz&Wait 7 days or use staging environmentr(   zDNS record not found for domainz(Ensure A/AAAA record points to server IPr'   zACME protocol errorz)Check ACME_EMAIL and DOMAIN configurationzRecent Caddy logs:Nr9   z  )r   r   r+   r   Ú_extract_relevant_logsÚstrip)r   r1   r   Úrelevant_logsÚlines        r   r0   z$SSLChecks._explain_certificate_error’   s  € à�‰×Ñ˜Ð @ÔAà˜5Ÿ;™;›=Ñ(Ø�K‰K×Ñ˜eÐ%HÔIØ�K‰K×Ñ˜UÐ$LÕMØ  E§K¡K£MÑ1Ø�K‰K×Ñ˜eÐ%FÔGØ�K‰K×Ñ˜UÐ$NÕOØ˜uŸ{™{›}Ñ,Ø�K‰K×Ñ˜eÐ%:Ô;Ø�K‰K×Ñ˜UÐ$OÔPð 	�‰×Ñ˜Ð 4Ô5Ø×3Ñ3°DÓ9ˆØ! " 1Ð%ò 	9ˆDØ�K‰K×Ñ˜U b¨¯©«¨Ð$7Õ8ñ	9r   c                 óŽ   ‡— |j                  d«      }g }|D ](  Št        ˆfd„dD «       «      sŒ|j                  ‰«       Œ* |dd S )z4Extract log lines related to certificate acquisitionÚ
c              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­wr   )r+   )Ú.0ÚkeywordrI   s     €r   ú	<genexpr>z3SSLChecks._extract_relevant_logs.<locals>.<genexpr>¬   s   øè ø€ Òs¨w�7˜dŸj™j›lÔ*Ñsùs   ƒ)ÚcertificateÚacmeÚtlsÚsslÚobtainr   iöÿÿÿN)ÚsplitÚanyÚappend)r   r1   ÚlinesÚrelevantrI   s       @r   rF   z SSLChecks._extract_relevant_logs¦   sN   ø€ à—
‘
˜4Ó ˆØˆàò 	&ˆDÜÓsÐ:rÔsÕsØ—‘ Õ%ð	&ð ˜˜ˆ~Ðr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   rA   r   Úboolr   r   r   r   r/   r0   ÚlistrF   © r   r   r   r   
   s‰   „ ÙFñ˜vð °[ð È#ó ð
 ó ð8	¨$ó 	ð dó ð 7¨ó 7ðr¨ó ð 9¨sð 9¸3ð 9À4ó 9ð(	¨3ð 	°4ô 	r   r   )r]   Útests.utils.loggerr   Útests.utils.docker_utilsr   r,   r=   r   r`   r   r   ú<module>rc      s$   ðñõ &Ý 0Û 	Û ÷eò er   