дȫÏîĿÉó²éÎÊÌⲢ·¢²¼ v1.1.9
¸ÄÓñ¾»ú¶ÀÁ¢ CA£¬»ָ´ CLI TLS УÑ飬±£»¤ƾ¾ÝÓëÅäÖò¢·¢±£´档 д Cursor Êý¾ݡ¢»Ự·¾¶¡¢´úÀíÉúÃüÖÜÆڡ¢ģÐÍÇëÇóÓë Skills Îļþ²Ù×÷¡£ Ϊ¶ÀÁ¢ Tab ·þÎñÔö¼ӿͻ§¶˼øȨ£¬Éý¼¶ÒÀÀµÓ빤¾ßÁ´£¬ÍêÉƷ¢²¼ԪÐÅϢͬ²½¡£ Ñé֤£ºÁ½¸ö Go ģ¿éµIJâÊÔ/vet¡¢¹ؼüģ¿é race¡¢ǰ¶˲âÊÔ/Éú²ú¹¹½¨/Éó¼ơ¢ Go ¿ɴï©¶´ɨÃèÓë macOS/Linux ¿ÉÐÐģ¿齻²æ±àÒë¾ùͨ¹ý¡£ Windows ¸ôÀëÆô¶¯ͨ¹ý£»δÍê³ɵĵã»÷ðÑ̺ÍԭÉúƽ̨Ñé֤¼ûÉó²鱨¸档
This commit is contained in:
@@ -29,6 +29,7 @@ const (
|
||||
|
||||
// ProxyService 定义了当前模块中的 ProxyService 类型。
|
||||
type ProxyService struct {
|
||||
lifecycleMu sync.Mutex
|
||||
// proxy 表示 IDE 版 MITM 代理。
|
||||
proxy *mitm.ProxyServer
|
||||
// certManager 用于在代理监听地址变化时重建 MITM 服务,同时为 CLI HTTPS 监听器签发证书。
|
||||
@@ -98,34 +99,44 @@ func (s *ProxyService) ensureBackendHost() error {
|
||||
if s == nil {
|
||||
return nil
|
||||
}
|
||||
if s.backendHost != nil {
|
||||
s.configMu.Lock()
|
||||
defer s.configMu.Unlock()
|
||||
if s == nil {
|
||||
return nil
|
||||
}
|
||||
if s.backend() != nil {
|
||||
return nil
|
||||
}
|
||||
host, err := backend.NewHost(s.store, s.certManager)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
s.backendHost = host
|
||||
s.setBackend(host)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *ProxyService) ensureProxy(cfg serverconfig.Config) error {
|
||||
if s == nil {
|
||||
return nil
|
||||
}
|
||||
s.configMu.Lock()
|
||||
defer s.configMu.Unlock()
|
||||
if s == nil {
|
||||
return nil
|
||||
}
|
||||
baseURL := ""
|
||||
if s.backendHost != nil {
|
||||
baseURL = s.backendHost.BaseURL()
|
||||
if s.backend() != nil {
|
||||
baseURL = s.backend().BaseURL()
|
||||
}
|
||||
if baseURL == "" {
|
||||
baseURL = "http://" + cfg.BackendListenAddr
|
||||
}
|
||||
listenAddr := cfg.ProxyListenAddr
|
||||
|
||||
if s.proxy != nil {
|
||||
snapshot := s.proxy.Snapshot()
|
||||
if s.proxyServer() != nil {
|
||||
snapshot := s.proxyServer().Snapshot()
|
||||
if snapshot.ListenAddr == listenAddr {
|
||||
return s.proxy.UpdateBaseURL(baseURL)
|
||||
return s.proxyServer().UpdateBaseURL(baseURL)
|
||||
}
|
||||
if snapshot.Running {
|
||||
return fmt.Errorf("代理正在运行,不能从 %s 切换到 %s,请先停止服务", snapshot.ListenAddr, listenAddr)
|
||||
@@ -136,12 +147,12 @@ func (s *ProxyService) ensureProxy(cfg serverconfig.Config) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
s.proxy = proxyServer
|
||||
s.setProxy(proxyServer)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *ProxyService) waitForBackend(ctx context.Context) error {
|
||||
if s == nil || s.backendHost == nil {
|
||||
if s == nil || s.backend() == nil {
|
||||
return nil
|
||||
}
|
||||
ticker := time.NewTicker(backendHealthCheckInterval)
|
||||
@@ -149,7 +160,7 @@ func (s *ProxyService) waitForBackend(ctx context.Context) error {
|
||||
var lastErr error
|
||||
for {
|
||||
healthCtx, healthCancel := context.WithTimeout(ctx, backendHealthCheckAttemptTimeout)
|
||||
err := s.backendHost.HealthCheck(healthCtx)
|
||||
err := s.backend().HealthCheck(healthCtx)
|
||||
healthCancel()
|
||||
if err == nil {
|
||||
return nil
|
||||
@@ -165,3 +176,24 @@ func (s *ProxyService) waitForBackend(ctx context.Context) error {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *ProxyService) backend() *backend.Host {
|
||||
s.mu.RLock()
|
||||
defer s.mu.RUnlock()
|
||||
return s.backendHost
|
||||
}
|
||||
func (s *ProxyService) proxyServer() *mitm.ProxyServer {
|
||||
s.mu.RLock()
|
||||
defer s.mu.RUnlock()
|
||||
return s.proxy
|
||||
}
|
||||
func (s *ProxyService) setBackend(host *backend.Host) {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
s.backendHost = host
|
||||
}
|
||||
func (s *ProxyService) setProxy(proxy *mitm.ProxyServer) {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
s.proxy = proxy
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user