Clash.Meta/hub/hub.go

64 lines
1.5 KiB
Go
Raw Normal View History

2018-11-21 13:47:46 +08:00
package hub
import (
2023-11-03 21:01:45 +08:00
"github.com/metacubex/mihomo/config"
"github.com/metacubex/mihomo/hub/executor"
"github.com/metacubex/mihomo/hub/route"
"github.com/metacubex/mihomo/log"
2018-11-21 13:47:46 +08:00
)
type Option func(*config.Config)
func WithExternalUI(externalUI string) Option {
return func(cfg *config.Config) {
cfg.General.ExternalUI = externalUI
}
}
func WithExternalController(externalController string) Option {
return func(cfg *config.Config) {
cfg.General.ExternalController = externalController
}
}
func WithExternalControllerUnix(externalControllerUnix string) Option {
return func(cfg *config.Config) {
cfg.General.ExternalControllerUnix = externalControllerUnix
}
}
func WithSecret(secret string) Option {
return func(cfg *config.Config) {
cfg.General.Secret = secret
}
}
2023-11-03 21:01:45 +08:00
// Parse call at the beginning of mihomo
func Parse(options ...Option) error {
2018-11-21 13:47:46 +08:00
cfg, err := executor.Parse()
if err != nil {
return err
}
for _, option := range options {
option(cfg)
}
2018-12-20 01:29:13 +08:00
if cfg.General.ExternalUI != "" {
route.SetUIPath(cfg.General.ExternalUI)
}
2018-11-21 13:47:46 +08:00
if cfg.General.ExternalController != "" {
go route.Start(cfg.General.ExternalController, cfg.General.ExternalControllerTLS,
2024-07-23 00:01:41 +08:00
cfg.General.Secret, cfg.TLS.Certificate, cfg.TLS.PrivateKey, cfg.General.ExternalDohServer,
cfg.General.LogLevel == log.DEBUG)
2018-11-21 13:47:46 +08:00
}
if cfg.General.ExternalControllerUnix != "" {
2024-07-23 00:01:41 +08:00
go route.StartUnix(cfg.General.ExternalControllerUnix, cfg.General.ExternalDohServer, cfg.General.LogLevel == log.DEBUG)
}
2018-11-30 17:42:40 +08:00
executor.ApplyConfig(cfg, true)
2018-11-21 13:47:46 +08:00
return nil
}