mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2024-12-22 23:57:26 +08:00
91 lines
2.2 KiB
Go
91 lines
2.2 KiB
Go
package hub
|
|
|
|
import (
|
|
"github.com/metacubex/mihomo/config"
|
|
"github.com/metacubex/mihomo/hub/executor"
|
|
"github.com/metacubex/mihomo/hub/route"
|
|
"github.com/metacubex/mihomo/log"
|
|
)
|
|
|
|
type Option func(*config.Config)
|
|
|
|
func WithExternalUI(externalUI string) Option {
|
|
return func(cfg *config.Config) {
|
|
cfg.Controller.ExternalUI = externalUI
|
|
}
|
|
}
|
|
|
|
func WithExternalController(externalController string) Option {
|
|
return func(cfg *config.Config) {
|
|
cfg.Controller.ExternalController = externalController
|
|
}
|
|
}
|
|
|
|
func WithExternalControllerUnix(externalControllerUnix string) Option {
|
|
return func(cfg *config.Config) {
|
|
cfg.Controller.ExternalControllerUnix = externalControllerUnix
|
|
}
|
|
}
|
|
|
|
func WithExternalControllerPipe(externalControllerPipe string) Option {
|
|
return func(cfg *config.Config) {
|
|
cfg.Controller.ExternalControllerPipe = externalControllerPipe
|
|
}
|
|
}
|
|
|
|
func WithSecret(secret string) Option {
|
|
return func(cfg *config.Config) {
|
|
cfg.Controller.Secret = secret
|
|
}
|
|
}
|
|
|
|
// ApplyConfig dispatch configure to all parts include ExternalController
|
|
func ApplyConfig(cfg *config.Config) {
|
|
applyRoute(cfg)
|
|
executor.ApplyConfig(cfg, true)
|
|
}
|
|
|
|
func applyRoute(cfg *config.Config) {
|
|
if cfg.Controller.ExternalUI != "" {
|
|
route.SetUIPath(cfg.Controller.ExternalUI)
|
|
}
|
|
route.ReCreateServer(&route.Config{
|
|
Addr: cfg.Controller.ExternalController,
|
|
TLSAddr: cfg.Controller.ExternalControllerTLS,
|
|
UnixAddr: cfg.Controller.ExternalControllerUnix,
|
|
PipeAddr: cfg.Controller.ExternalControllerPipe,
|
|
Secret: cfg.Controller.Secret,
|
|
Certificate: cfg.TLS.Certificate,
|
|
PrivateKey: cfg.TLS.PrivateKey,
|
|
DohServer: cfg.Controller.ExternalDohServer,
|
|
IsDebug: cfg.General.LogLevel == log.DEBUG,
|
|
Cors: route.Cors{
|
|
AllowOrigins: cfg.Controller.Cors.AllowOrigins,
|
|
AllowPrivateNetwork: cfg.Controller.Cors.AllowPrivateNetwork,
|
|
},
|
|
})
|
|
}
|
|
|
|
// Parse call at the beginning of mihomo
|
|
func Parse(configBytes []byte, options ...Option) error {
|
|
var cfg *config.Config
|
|
var err error
|
|
|
|
if len(configBytes) != 0 {
|
|
cfg, err = executor.ParseWithBytes(configBytes)
|
|
} else {
|
|
cfg, err = executor.Parse()
|
|
}
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, option := range options {
|
|
option(cfg)
|
|
}
|
|
|
|
ApplyConfig(cfg)
|
|
return nil
|
|
}
|