From 1363e16312f89f3fc43c05a810e26b0aa2982f20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Wed, 9 Aug 2023 09:55:40 +0800 Subject: [PATCH] platform: Enable Clash API support by default --- box.go | 6 +++--- experimental/clashapi/server.go | 26 +++++++++++++++----------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/box.go b/box.go index 3ceb7a55..34ac5470 100644 --- a/box.go +++ b/box.go @@ -51,7 +51,7 @@ func New(options Options) (*Box, error) { applyDebugOptions(common.PtrValueOrDefault(experimentalOptions.Debug)) var needClashAPI bool var needV2RayAPI bool - if experimentalOptions.ClashAPI != nil && experimentalOptions.ClashAPI.ExternalController != "" { + if experimentalOptions.ClashAPI != nil || options.PlatformInterface != nil { needClashAPI = true } if experimentalOptions.V2RayAPI != nil && experimentalOptions.V2RayAPI.Listen != "" { @@ -143,7 +143,7 @@ func New(options Options) (*Box, error) { preServices := make(map[string]adapter.Service) postServices := make(map[string]adapter.Service) if needClashAPI { - clashServer, err := experimental.NewClashServer(ctx, router, logFactory.(log.ObservableFactory), common.PtrValueOrDefault(options.Experimental.ClashAPI)) + clashServer, err := experimental.NewClashServer(ctx, router, logFactory.(log.ObservableFactory), common.PtrValueOrDefault(experimentalOptions.ClashAPI)) if err != nil { return nil, E.Cause(err, "create clash api server") } @@ -151,7 +151,7 @@ func New(options Options) (*Box, error) { preServices["clash api"] = clashServer } if needV2RayAPI { - v2rayServer, err := experimental.NewV2RayServer(logFactory.NewLogger("v2ray-api"), common.PtrValueOrDefault(options.Experimental.V2RayAPI)) + v2rayServer, err := experimental.NewV2RayServer(logFactory.NewLogger("v2ray-api"), common.PtrValueOrDefault(experimentalOptions.V2RayAPI)) if err != nil { return nil, E.Cause(err, "create v2ray api server") } diff --git a/experimental/clashapi/server.go b/experimental/clashapi/server.go index 2c422b9d..b1e8f181 100644 --- a/experimental/clashapi/server.go +++ b/experimental/clashapi/server.go @@ -52,6 +52,7 @@ type Server struct { cacheID string cacheFile adapter.ClashCacheFile + externalController bool externalUI string externalUIDownloadURL string externalUIDownloadDetour string @@ -71,6 +72,7 @@ func NewServer(ctx context.Context, router adapter.Router, logFactory log.Observ trafficManager: trafficManager, mode: strings.ToLower(options.DefaultMode), storeSelected: options.StoreSelected, + externalController: options.ExternalController != "", storeFakeIP: options.StoreFakeIP, externalUIDownloadURL: options.ExternalUIDownloadURL, externalUIDownloadDetour: options.ExternalUIDownloadDetour, @@ -146,18 +148,20 @@ func (s *Server) PreStart() error { } func (s *Server) Start() error { - s.checkAndDownloadExternalUI() - listener, err := net.Listen("tcp", s.httpServer.Addr) - if err != nil { - return E.Cause(err, "external controller listen error") - } - s.logger.Info("restful api listening at ", listener.Addr()) - go func() { - err = s.httpServer.Serve(listener) - if err != nil && !errors.Is(err, http.ErrServerClosed) { - s.logger.Error("external controller serve error: ", err) + if s.externalController { + s.checkAndDownloadExternalUI() + listener, err := net.Listen("tcp", s.httpServer.Addr) + if err != nil { + return E.Cause(err, "external controller listen error") } - }() + s.logger.Info("restful api listening at ", listener.Addr()) + go func() { + err = s.httpServer.Serve(listener) + if err != nil && !errors.Is(err, http.ErrServerClosed) { + s.logger.Error("external controller serve error: ", err) + } + }() + } return nil }