
    Ti%,                         d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	  ed      Z
d Ze
j                  d      d	        Zd
 Ze
j                  d      d        Ze
j                  d      d        Zy)uI  
SSL配置测试路由模块

本文件仅用于测试SSL证书配置是否正常工作，特别是在PyInstaller打包后的环境中。
主要解决调用外部API（如Replicate API）时出现的SSL证书验证失败问题。

提供的API端点：
- GET /api/test_ssl: 快速SSL测试，测试基本的HTTPS连接
- GET /api/test_ssl_full: 完整SSL测试，包括环境检查和多个API连接测试
- GET /api/ssl_status: SSL状态检查，仅检查本地配置，不进行网络连接

注意：此模块仅用于诊断和测试目的，不应在生产环境中频繁调用。
    )	APIRouterN)
HttpClientz/api)prefixc                    K   	 t        j                         4 d{   } | j                  dd       d{   }|j                  dk(  |j                  |j                  dk(  rdnd|j                   dcddd      d{    S 7 k7 R7 	# 1 d{  7  sw Y   yxY w# t        j
                  $ r}d	d
dt        |       dcY d}~S d}~wt        $ r}d	ddt        |       dcY d}~S d}~ww xY ww)zQuick SSL test for API endpointNhttps://httpbin.org/get   timeout   zSSL configuration is workingzUnexpected status: )ssl_workingstatus_codemessageF	SSL_ERRORz%SSL certificate verification failed: r   errorr   CONNECTION_ERRORzConnection failed: )r   creategetr   sslSSLErrorstr	Exception)clientresponsees      J/home/jay/workspace/tools/ai-image-gen/jaaz-app/server/routers/ssl_test.pyquick_ssl_testr      s    
$$& 	 	&#ZZ(A1ZMMH'33s:'33=E=Q=QUX=X9`st|  uI  uI  tJ  _K	 	 	M	 	 	 	 << 
  >s1vhG
 	

  
 ',SVH5
 	

s   C8B# BB# BB
>B6B# BB# C8B# 
BB# B BB B# C8 B# #C56CC5C8C5C0*C5+C80C55C8z	/test_sslc                     K   	 t                d{   } | S 7 # t        $ r}dddt        |       dcY d}~S d}~ww xY ww)z&API endpoint to test SSL configurationNF
TEST_ERRORSSL test failed: r   )r   r   r   resultr   s     r   test_ssl_endpointr#   2   sM     
%'' ( 
 !*3q6(3
 	

s4   A  A 	?:?A?Ac                    K   g t        t        dd      } d@fd	}	 ddl}|j                         }t        j
                  j                  |      }|rt        j
                  j                  |      nd} |d|xr |dkD  d|rdnd	 |||r| d
nd| d       	 t        j                         } |dddt        |j                        t        |j                        d       d}	 t        j                         }	d}
	 t        |	d      rt        |	j                         }
n!t        |	d      rt        |	j"                        }
 |dddt        t%        |	            |
d       |	j'                          d}|r/g d}d}|D ]  }	 t        j(                         4 d{   }|j+                  |d       d{   }|j,                  dv } |d| d|d |j,                   d!t        |j.                        i       |rd}	 ddd      d{     nddd      d{     	 t        j(                         4 d{   }|j+                  d"d#       d{   }|j,                  d$v } |d%|d&|rd'nd( d)|j,                   dd*|j,                  i       ddd      d{    |rl	 t        j4                         5 }|j+                  d-d      }|j,                  d.k(  } |d/|d0|rd'nd( d)|j,                   dd*|j,                  i       ddd       |r	 t        j4                         5 }|j+                  d1d#      }|j,                  d2v }|j,                  d3k(  rd4}n/|j,                  d$v rd5|j,                   d}nd6|j,                   d} |d7|||j,                  |j,                  d3k(  rd8ndd9       ddd       t7              }t9        d: D              }||k(  rd;}n
|dkD  rd<}nd(}|||||z
  t        j:                  | | rt        t        d=d      ndd>d?S # t        $ r!} |dddt        |              Y d}~d}~ww xY w# t        $ r#} |dddt        |              d}Y d}~d}~ww xY w#  d}
Y @xY w# t        $ r#} |dddt        |              d}Y d}~8d}~ww xY w7 7 7 7 # 1 d{  7  sw Y   xY w# t        $ r%} |d| dddt        |              Y d}~d}~ww xY w7 7 7 l# 1 d{  7  sw Y   }xY w# t0        j2                  $ r!} |d%dd+t        |              Y d}~d}~wt        $ r!} |d%dd,t        |              Y d}~d}~ww xY w# 1 sw Y   {xY w# t0        j2                  $ r!} |d/dd+t        |              Y d}~d}~wt        $ r!} |d/dd,t        |              Y d}~d}~ww xY w# 1 sw Y   <xY w# t0        j2                  $ r!} |d7dd+t        |              Y d}~nd}~wt        $ r!} |d7dd,t        |              Y d}~d}~ww xY ww)AzRun comprehensive SSL testsfrozenFNc                 :    j                  | |||xs i d       y )N)testsuccessr   details)append)	test_namer(   r   r)   test_resultss       r   
log_resultz*test_ssl_configuration.<locals>.log_resultE   s&    }"	
 	    r   zCertifi Packagez
CA bundle foundz	not foundz byteszN/A)pathexistssize
is_bundledzError: zSSL Context CreationTz SSL context created successfully)protocolverify_modezFailed: zSSL context configured_verifyverifyzSSL verification enabledzhttpx Client Creationz*httpx client with SSL created successfully)client_typeverify_info)r   zhttps://www.google.comzhttps://api.github.com
   r	   )r   i-  i.  zHTTPS Test ()zStatus: urlzhttps://api.replicate.com   )r         zReplicate API SSLzSSL verification 
successfulfailedz
 (Status: r   zSSL Error: zConnection Error: r   r   zhttpx HTTPS Testzhttpx SSL connection zhttps://api.openai.com)r   r>   r?   r@     rC   zASSL verification successful (HTTP/2 misdirected request - normal)z%SSL verification successful (Status: z!SSL verification failed (Status: zOpenAI API SSL (httpx)z1421 status is normal for OpenAI API with HTTP/1.1)r   notec              3   ,   K   | ]  }|d    s	d  yw)r(      N ).0r"   s     r   	<genexpr>z)test_ssl_configuration.<locals>.<genexpr>   s     IVvi7HqIs   
r(   partial_MEIPASSpython_versionr3   bundle_path)statustotalpassedrB   resultsenvironment)N)getattrsyscertifiwhereosr0   r1   getsizer   r   r   _get_ssl_contextr4   r5   create_sync_clienthasattrr6   r7   typecloser   r   r   r<   r   r   create_synclensumversion)r3   r-   rV   ca_path	ca_existsca_sizer   ssl_contextssl_context_okhttpx_clientr9   httpx_ok	test_urlshttps_okr<   r   r   r(   r   total_testspassed_testsrO   r,   s                         @r   test_ssl_configurationrn   @   s    Lh.JA--/GGNN7+	.7"''//'*Q%'A+I;?@#.77)6*U(		
	
 113". 4 45";#:#:;		
 !446 /	5|Y/!,"6"67x0!,"5"56 	#8"4#56*		
 	 
	  	NCN%,,.  &%+ZZRZ%@@H&22oEG&se1-"8#7#7"89HLL 12	 #'    	N$	6!((*  f!',GQS!TT"..2FF''X'NjYaYmYmXnnop"H$8$89	   	6'') 	V!::&?:L"..#5&+GL+RR\]e]q]q\rrst"H$8$89			" 	6'') V!::&>:K #..2KK''3.aG))-AA EhFZFZE[[\]G A(BVBVAWWXYG,'/';';W_WkWkorWr Sx|	> l#KI|IIL{"		 ,!kk$=G73
D9T
 y  A$ews1vh-?@@A   )5HSVH2EF 	54K  *EXc!fX3FG@      N\#a0%8CF89LMMN
T    || 	K*E[Q3IJJ 	6*E+CF846 6	6	 	 || 	J)5KAx2HII 	6)5+CF846 6	6 0 || 	P/+c!fX8NOO 	6/+CF846 6	6su  YA;P A
Q	 %R <AQ8 ?2R 1Y SR1SR=3R44AR=<SR7SYSR:SY!T# 9T:T# =TT>TT# T
T# #Y&V :AV	V YW; (BW.4W; <A Y	Q%Q;YQY		Q5Q0*Y0Q55Y8Q?<R 	R.R)#Y)R..Y1S4R=7S:S=S	SS	S	TS<6Y<TYT# T
T# T TT T# #U?6UYU?U:4Y:U??YVV W+"V>8Y>W+
W& Y&W++Y.W83W; ;YX*$Y*Y6YYYYz/test_ssl_fullc                     K   	 t                d{   } | S 7 # t        $ r}ddt        |       dcY d}~S d}~ww xY ww)z"API endpoint to run full SSL testsNr   r    )rO   r   )rn   r   r   r!   s     r   test_ssl_full_endpointrp   	  sJ     
-// 0 
*3q6(3
 	

s4   A  A 	>9>A>Az/ssl_statusc                    K   	 ddl } ddl}ddl}ddl}t	        |dd      }|j                         }|j                  j                  |      }|r|j                  j                  |      nd}d}d}		  | j                  |j                               }
d}|j                  ||rt	        |dd      ndd|||d	||	d
|r|rddS ddS # t        $ r}t        |      }	Y d}~Ld}~ww xY w# t        $ r}dt        |      dcY d}~S d}~ww xY ww)z:Get SSL configuration status without running network testsr   Nr%   F)cafileTrK   rL   )rc   rd   re   )creation_okr   okr   )rS   rV   rf   overall_status)ru   r   )r   rV   rU   rX   rT   rW   r0   r1   rY   create_default_contextr   r   rb   )r   rV   rU   rX   r3   rc   rd   re   rg   	ssl_errorrf   r   s               r   ssl_status_endpointrx     s*    +
 S(E2
--/GGNN7+	.7"''//'*Q 		4#44GMMOLK!N #&++(AKwsJ=QU #&"  ." '5d
 	
 IP
 	
  	AI	*  
%V
 	

sk   DA+C' 0#C .C' DC' D	C$CC' C$$C' '	D0D=D>DDD)__doc__fastapir   	tracebackasyncior   rU   rX   utils.http_clientr   routerr   r   r#   rn   rp   rx   rG   r.   r   <module>r      s       
 
 	 (	&	!
0 K

 

FR 	
 	
 M-
 -
r.   