feat: use wire

This commit is contained in:
Yuzuki616
2025-05-07 17:22:29 +09:00
parent 05a1e586ed
commit 9e18c06199
14 changed files with 418 additions and 222 deletions

21
boot/acme.go Normal file
View File

@@ -0,0 +1,21 @@
package boot
import (
"github.com/InazumaV/Ratte/acme"
"github.com/InazumaV/Ratte/conf"
log "github.com/sirupsen/logrus"
)
type AcmeGroup map[string]*acme.Acme
func initAcme(a []conf.ACME) AcmeGroup {
acmes := make(AcmeGroup, len(a))
for _, a := range a {
ac, err := acme.NewAcme(&a)
if err != nil {
log.WithError(err).Fatal("New acme failed")
}
acmes[a.Name] = ac
}
return acmes
}

50
boot/boot.go Normal file
View File

@@ -0,0 +1,50 @@
//go:build wireinject
package boot
import (
"github.com/InazumaV/Ratte/conf"
"github.com/google/wire"
)
var preSet = wire.NewSet(
wire.FieldsOf(new(*conf.Conf), "ACME", "Plugin"),
wire.FieldsOf(new(conf.Plugins), "Core", "Panel"),
initAcme,
initCores,
initPanels,
)
var mainSet = wire.NewSet(
wire.FieldsOf(new(*conf.Conf), "Node"),
initNode,
)
type Boot struct {
Acmes AcmeGroup
Cores CoreGroup
Panels PanelGroup
Node *NodeGroup
}
func (b *Boot) Start() error {
if err := b.Node.Start(); err != nil {
return err
}
return nil
}
func (b *Boot) Close() error {
b.Node.Close()
b.Cores.Close()
b.Panels.Close()
return nil
}
func InitBoot(c *conf.Conf) (*Boot, error) {
wire.Build(
preSet,
mainSet,
wire.Struct(new(Boot), "*"),
)
return nil, nil
}

40
boot/core.go Normal file
View File

@@ -0,0 +1,40 @@
package boot
import (
"fmt"
"github.com/InazumaV/Ratte-Interface/core"
"github.com/InazumaV/Ratte/conf"
"os/exec"
)
type CoreGroup map[string]*core.PluginClient
func (c CoreGroup) Get(name string) *core.PluginClient {
if co, ok := c[name]; ok {
return co
}
return nil
}
func (c CoreGroup) Close() {
for _, co := range c {
co.Close()
}
}
func initCores(cc []conf.CorePlugin) (CoreGroup, error) {
cores := make(CoreGroup, len(cc))
for _, co := range cc {
c, err := core.NewClient(nil, exec.Command(co.Path))
if err != nil {
return nil, fmt.Errorf("new core error: %w", err)
}
err = c.Start(co.DataPath, co.Config)
if err != nil {
return nil, fmt.Errorf("start core error: %w", err)
}
cores[co.Name] = c
break
}
return cores, nil
}

95
boot/node.go Normal file
View File

@@ -0,0 +1,95 @@
package boot
import (
"fmt"
"github.com/InazumaV/Ratte-Interface/core"
"github.com/InazumaV/Ratte-Interface/panel"
"github.com/InazumaV/Ratte/conf"
"github.com/InazumaV/Ratte/handler"
"github.com/InazumaV/Ratte/trigger"
log "github.com/sirupsen/logrus"
)
type NodeGroup struct {
t []*trigger.Trigger
h []*handler.Handler
}
func (n NodeGroup) Start() error {
for _, t := range n.t {
err := t.Start()
if err != nil {
return fmt.Errorf("start trigger error: %w", err)
}
}
return nil
}
func (n NodeGroup) Close() error {
for _, t := range n.t {
err := t.Close()
if err != nil {
log.WithError(err).Errorln("Close trigger error")
}
}
for _, h := range n.h {
err := h.Close()
if err != nil {
log.WithError(err).Errorln("Close handler error")
}
}
return nil
}
func initNode(
n []conf.Node,
acme AcmeGroup,
cores CoreGroup,
panels PanelGroup) (*NodeGroup, error) {
triggers := make([]*trigger.Trigger, 0, len(n))
handlers := make([]*handler.Handler, 0, len(n))
for _, nd := range n {
var co core.Core
if c, ok := cores[nd.Options.Core]; ok {
co = c
} else {
return nil, fmt.Errorf("unknown core name: %s", nd.Options.Core)
}
var pl panel.Panel
if p, ok := panels[nd.Options.Panel]; ok {
pl = p
} else {
return nil, fmt.Errorf("")
}
ac, e := acme[nd.Options.Acme]
if !e {
return nil, fmt.Errorf("unknown acme name: %s", nd.Options.Acme)
}
h := handler.New(co, pl, nd.Name, ac, log.WithFields(
map[string]interface{}{
"node": nd.Name,
"service": "handler",
},
), &nd.Options)
handlers = append(handlers, h)
tr, err := trigger.New(log.WithFields(
map[string]interface{}{
"node": nd.Name,
"service": "trigger",
},
), &nd.Trigger, h, pl, &nd.Remote)
if err != nil {
return nil, fmt.Errorf("new trigger error: %w", err)
}
triggers = append(triggers, tr)
err = tr.Start()
if err != nil {
return nil, fmt.Errorf("start trigger error: %w", err)
}
}
return &NodeGroup{
t: triggers,
h: handlers,
},
nil
}

40
boot/panel.go Normal file
View File

@@ -0,0 +1,40 @@
package boot
import (
"fmt"
"github.com/InazumaV/Ratte-Interface/panel"
"github.com/InazumaV/Ratte/conf"
log "github.com/sirupsen/logrus"
"os/exec"
)
type PanelGroup map[string]*panel.PluginClient
func (p *PanelGroup) Get(name string) *panel.PluginClient {
if pl, ok := (*p)[name]; ok {
return pl
}
return nil
}
func (p *PanelGroup) Close() error {
for _, pl := range *p {
err := pl.Close()
if err != nil {
log.WithError(err).Warn()
}
}
return nil
}
func initPanels(panelsP []conf.Plugin) (PanelGroup, error) {
panels := make(PanelGroup, len(panelsP))
for _, p := range panelsP {
pn, err := panel.NewClient(nil, exec.Command(p.Path))
if err != nil {
return nil, fmt.Errorf("new panel error: %w", err)
}
panels[p.Name] = pn
}
return panels, nil
}

72
boot/wire_gen.go Normal file
View File

@@ -0,0 +1,72 @@
// Code generated by Wire. DO NOT EDIT.
//go:generate go run -mod=mod github.com/google/wire/cmd/wire
//go:build !wireinject
// +build !wireinject
package boot
import (
"github.com/InazumaV/Ratte/conf"
"github.com/google/wire"
)
// Injectors from boot.go:
func InitBoot(c *conf.Conf) (*Boot, error) {
v := c.Acme
acmeGroup := initAcme(v)
plugins := c.Plugin
v2 := plugins.Core
coreGroup, err := initCores(v2)
if err != nil {
return nil, err
}
v3 := plugins.Panel
panelGroup, err := initPanels(v3)
if err != nil {
return nil, err
}
v4 := c.Node
nodeGroup, err := initNode(v4, acmeGroup, coreGroup, panelGroup)
if err != nil {
return nil, err
}
boot := &Boot{
Acmes: acmeGroup,
Cores: coreGroup,
Panels: panelGroup,
Node: nodeGroup,
}
return boot, nil
}
// boot.go:
var preSet = wire.NewSet(wire.FieldsOf(new(*conf.Conf), "ACME", "Plugin"), wire.FieldsOf(new(conf.Plugins), "Core", "Panel"), initAcme,
initCores,
initPanels,
)
var mainSet = wire.NewSet(wire.FieldsOf(new(*conf.Conf), "Node"), initNode)
type Boot struct {
Acmes AcmeGroup
Cores CoreGroup
Panels PanelGroup
Node *NodeGroup
}
func (b *Boot) Start() error {
if err := b.Node.Start(); err != nil {
return err
}
return nil
}
func (b *Boot) Close() error {
b.Node.Close()
b.Cores.Close()
b.Panels.Close()
return nil
}

View File

@@ -1,17 +1,11 @@
package main package main
import ( import (
"fmt" "github.com/InazumaV/Ratte/boot"
"github.com/InazumaV/Ratte-Interface/core"
"github.com/InazumaV/Ratte-Interface/panel"
"github.com/InazumaV/Ratte/acme"
"github.com/InazumaV/Ratte/conf" "github.com/InazumaV/Ratte/conf"
"github.com/InazumaV/Ratte/handler"
"github.com/InazumaV/Ratte/trigger"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"os" "os"
"os/exec"
"os/signal" "os/signal"
"runtime" "runtime"
"syscall" "syscall"
@@ -32,14 +26,6 @@ func init() {
command.AddCommand(&runCommand) command.AddCommand(&runCommand)
} }
var (
cores map[string]*core.PluginClient
panels map[string]*panel.PluginClient
acmes map[string]*acme.Acme
handlers []*handler.Handler
triggers []*trigger.Trigger
)
func runHandle(_ *cobra.Command, _ []string) { func runHandle(_ *cobra.Command, _ []string) {
c := conf.New(config) c := conf.New(config)
log.WithField("path", config).Info("Load config...") log.WithField("path", config).Info("Load config...")
@@ -49,74 +35,36 @@ func runHandle(_ *cobra.Command, _ []string) {
} }
log.WithField("path", config).Info("Loaded.") log.WithField("path", config).Info("Loaded.")
log.Info("Init core plugin...") log.Info("Init...")
err = startCores(c.Plugin.Core, c.Core) b, err := boot.InitBoot(c)
if err != nil { if err != nil {
log.WithError(err).Fatal("Init core plugin failed") log.WithError(err).Fatal("Init failed")
} }
log.Info("Done.") log.Info("Init done.")
log.Info("Init panel plugin...") log.Info("Start...")
err = startPanel(c.Plugin.Panel) err = b.Start()
if err != nil { if err != nil {
log.WithError(err).Fatal("Init panel plugin failed") log.WithError(err).Fatal("Start failed")
} }
log.Info("Done.")
log.Info("Init acme...")
// new acme
acmes = make(map[string]*acme.Acme)
for _, a := range c.Acme {
ac, err := acme.NewAcme(&a)
if err != nil {
log.WithError(err).Fatal("New acme failed")
}
acmes[a.Name] = ac
}
log.Info("Done.")
log.Info("Starting...")
// new node
err = startTriggerAndHandler(c.Node)
if err != nil {
log.WithError(err).Fatal("Start trigger and handler failed")
}
log.Info("Started.")
c.SetErrorHandler(func(err error) { c.SetErrorHandler(func(err error) {
log.WithFields(map[string]interface{}{ log.WithFields(map[string]interface{}{
"error": err, "error": err,
"Services": "ConfWatcher", "Services": "ConfWatcher",
}).Error("") }).Error("watch config error")
}) })
c.SetEventHandler(func(event uint, target ...string) { c.SetEventHandler(func(event uint, target ...string) {
l := log.WithFields(map[string]interface{}{ l := log.WithFields(map[string]interface{}{
"Service": "ConfWatcher", "Service": "ConfWatcher",
}) })
l.Info("Config changed, restart...") l.Info("Config changed, restart...")
err := closeTriggerAndHandler() b, err := boot.InitBoot(c)
if err != nil { if err != nil {
log.WithError(err).Fatal("Close trigger and handler failed") l.WithError(err).Fatal("Init boot failed")
} }
err = closeCore() err = b.Start()
if err != nil { if err != nil {
log.WithError(err).Fatal("Close core failed") l.WithError(err).Fatal("Start boot failed")
}
err = closePanel()
if err != nil {
log.WithError(err).Fatal("Close panel failed")
}
err = startCores(c.Plugin.Core, c.Core)
if err != nil {
log.WithError(err).Fatal("Start core failed")
}
err = startPanel(c.Plugin.Panel)
if err != nil {
log.WithError(err).Fatal("Start panel failed")
}
err = startTriggerAndHandler(c.Node)
if err != nil {
log.WithError(err).Fatal("Start trigger and handler failed")
} }
l.Info("Restart Done.") l.Info("Restart Done.")
}) })
@@ -124,145 +72,14 @@ func runHandle(_ *cobra.Command, _ []string) {
if err != nil { if err != nil {
log.WithError(err).Fatal("Watch config failed") log.WithError(err).Fatal("Watch config failed")
} }
log.Info("Start done.")
runtime.GC() runtime.GC()
sig := make(chan os.Signal, 0) sig := make(chan os.Signal)
signal.Notify(sig, syscall.SIGINT, syscall.SIGKILL, syscall.SIGTERM) signal.Notify(sig, syscall.SIGINT, syscall.SIGKILL, syscall.SIGTERM)
<-sig <-sig
// clear // clear
log.Info("Shutting down...") log.Info("Shutting down...")
err = closeTriggerAndHandler() b.Close()
if err != nil {
log.WithError(err).Fatal("Close trigger and handler failed")
}
err = closeCore()
if err != nil {
log.WithError(err).Fatal("Close core failed")
}
err = closePanel()
if err != nil {
log.WithError(err).Fatal("Close panel failed")
}
log.Info("Done.") log.Info("Done.")
} }
func startCores(coresP []conf.Plugin, cc []conf.Core) error {
// new cores
cores = make(map[string]*core.PluginClient, len(coresP))
for _, ccV := range cc {
for _, co := range coresP {
if co.Name != ccV.Type {
continue
}
c, err := core.NewClient(nil, exec.Command(co.Path))
if err != nil {
return fmt.Errorf("new core error: %w", err)
}
err = c.Start(ccV.DataPath, ccV.Config)
if err != nil {
return fmt.Errorf("start core error: %w", err)
}
cores[co.Name] = c
break
}
}
return nil
}
func closeCore() error {
for _, c := range cores {
err := c.Close()
if err != nil {
return err
}
}
return nil
}
func startPanel(panelsP []conf.Plugin) error {
panels = make(map[string]*panel.PluginClient, len(panelsP))
for _, p := range panelsP {
pn, err := panel.NewClient(nil, exec.Command(p.Path))
if err != nil {
return fmt.Errorf("new panel error: %w", err)
}
panels[p.Name] = pn
}
return nil
}
func closePanel() error {
for _, p := range panels {
err := p.Close()
if err != nil {
return err
}
}
return nil
}
func startTriggerAndHandler(c []conf.Node) error {
triggers = make([]*trigger.Trigger, 0, len(c))
handlers = make([]*handler.Handler, 0, len(c))
for _, nd := range c {
var co core.Core
if c, ok := cores[nd.Options.Core]; ok {
co = c
} else {
return fmt.Errorf("unknown core name: %s", nd.Options.Core)
}
var pl panel.Panel
if p, ok := panels[nd.Options.Panel]; ok {
pl = p
} else {
return fmt.Errorf("")
}
var ac *acme.Acme
if len(acmes) != 0 {
if a, ok := acmes[nd.Options.Acme]; ok {
ac = a
} else {
return fmt.Errorf("unknown acme name: %s", nd.Options.Acme)
}
}
h := handler.New(co, pl, nd.Name, ac, log.WithFields(
map[string]interface{}{
"node": nd.Name,
"service": "handler",
},
), &nd.Options)
handlers = append(handlers, h)
tr, err := trigger.NewTrigger(log.WithFields(
map[string]interface{}{
"node": nd.Name,
"service": "trigger",
},
), &nd.Trigger, h, pl, &nd.Remote)
if err != nil {
return fmt.Errorf("new trigger error: %w", err)
}
triggers = append(triggers, tr)
err = tr.Start()
if err != nil {
return fmt.Errorf("start trigger error: %w", err)
}
}
return nil
}
func closeTriggerAndHandler() error {
for _, t := range triggers {
err := t.Close()
if err != nil {
return fmt.Errorf("close trigger error: %w", err)
}
}
for _, h := range handlers {
err := h.Close()
if err != nil {
return fmt.Errorf("close handler error: %w", err)
}
}
return nil
}

48
common/starter/starter.go Normal file
View File

@@ -0,0 +1,48 @@
package starter
import "github.com/hashicorp/go-multierror"
type Starter interface {
Start() error
Close() error
}
type Group struct {
Starters []Starter
}
func NewGroup(starters ...Starter) *Group {
return &Group{
Starters: starters,
}
}
func (g *Group) Add(starter Starter) {
g.Starters = append(g.Starters, starter)
}
func (g *Group) Clear(len int) {
g.Starters = nil
}
func (g *Group) Start() error {
for _, starter := range g.Starters {
if err := starter.Start(); err != nil {
return err
}
}
return nil
}
func (g *Group) Close() error {
var errs error
for i := len(g.Starters) - 1; i >= 0; i-- {
if err := g.Starters[i].Close(); err != nil {
errs = multierror.Append(errs, err)
}
}
if errs != nil {
return errs
}
return nil
}

View File

@@ -22,7 +22,6 @@ type Conf struct {
Log Log `json:"Log,omitempty"` Log Log `json:"Log,omitempty"`
Watcher Watcher `json:"Watcher,omitempty"` Watcher Watcher `json:"Watcher,omitempty"`
Plugin Plugins `json:"Plugin,omitempty"` // Only accept from file path Plugin Plugins `json:"Plugin,omitempty"` // Only accept from file path
Core []Core `json:"Core,omitempty"`
Acme []ACME `json:"Acme,omitempty"` Acme []ACME `json:"Acme,omitempty"`
Node []Node `json:"Node,omitempty"` Node []Node `json:"Node,omitempty"`
} }
@@ -35,7 +34,6 @@ func New(path string) *Conf {
WatchRemoteConfig: true, WatchRemoteConfig: true,
}, },
Log: newLog(), Log: newLog(),
Core: make([]Core, 0),
Acme: make([]ACME, 0), Acme: make([]ACME, 0),
Plugin: Plugins{}, Plugin: Plugins{},
Node: make([]Node, 0), Node: make([]Node, 0),

View File

@@ -23,7 +23,7 @@ type Remote struct {
} }
type Options struct { type Options struct {
Core string `json:"Core"` Core string `json:"CorePlugin"`
Panel string `json:"Panel"` Panel string `json:"Panel"`
Acme string `json:"Acme"` Acme string `json:"Acme"`
Cert Cert `json:"Cert"` Cert Cert `json:"Cert"`

View File

@@ -5,14 +5,14 @@ import (
"github.com/goccy/go-json" "github.com/goccy/go-json"
) )
type Core struct { type CorePlugin struct {
Type string `json:"type"`
DataPath string `json:"DataPath,omitempty"` DataPath string `json:"DataPath,omitempty"`
Config json.RawMessage `json:"Config,omitempty"` Config json.RawMessage `json:"Config,omitempty"`
Plugin
} }
type _core Core type _core CorePlugin
func (c *Core) UnmarshalJSON(data []byte) error { func (c *CorePlugin) UnmarshalJSON(data []byte) error {
err := json.Unmarshal(data, (*_core)(c)) err := json.Unmarshal(data, (*_core)(c))
if err != nil { if err != nil {
return fmt.Errorf("failed to unmarshal core: %v", err) return fmt.Errorf("failed to unmarshal core: %v", err)
@@ -20,11 +20,16 @@ func (c *Core) UnmarshalJSON(data []byte) error {
if len(c.Config) == 0 { if len(c.Config) == 0 {
c.Config = data c.Config = data
} }
err = json.Unmarshal(c.Config, &c.Plugin)
if err != nil {
return fmt.Errorf("failed to unmarshal core config: %v", err)
}
return nil return nil
} }
type Plugins struct { type Plugins struct {
Core []Plugin `json:"core"` Core []CorePlugin `json:"core"`
Panel []Plugin `json:"panel"` Panel []Plugin `json:"panel"`
} }

7
go.mod
View File

@@ -6,10 +6,13 @@ toolchain go1.24.2
require ( require (
github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420021044-42b0d35bcd79 github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420021044-42b0d35bcd79
github.com/InazumaV/Ratte-Interface v0.0.0-20250505045058-84e4bf9f70e4 github.com/InazumaV/Ratte-Interface v0.0.0-20250505045848-a0068c2a9be9
github.com/InazumaV/Ratte-Panel-V2b v0.0.0-20250420013203-72f8abe3e919
github.com/fsnotify/fsnotify v1.7.0 github.com/fsnotify/fsnotify v1.7.0
github.com/go-acme/lego/v4 v4.18.0 github.com/go-acme/lego/v4 v4.18.0
github.com/goccy/go-json v0.10.3 github.com/goccy/go-json v0.10.3
github.com/google/wire v0.6.0
github.com/hashicorp/go-multierror v1.1.1
github.com/orcaman/concurrent-map/v2 v2.0.1 github.com/orcaman/concurrent-map/v2 v2.0.1
github.com/robfig/cron/v3 v3.0.1 github.com/robfig/cron/v3 v3.0.1
github.com/sirupsen/logrus v1.9.3 github.com/sirupsen/logrus v1.9.3
@@ -37,7 +40,6 @@ require (
github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect
github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect
github.com/InazumaV/Ratte-Panel-V2b v0.0.0-20250420013203-72f8abe3e919 // indirect
github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 // indirect github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 // indirect
github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 // indirect github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 // indirect
github.com/aliyun/alibaba-cloud-sdk-go v1.62.712 // indirect github.com/aliyun/alibaba-cloud-sdk-go v1.62.712 // indirect
@@ -100,7 +102,6 @@ require (
github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect

29
go.sum
View File

@@ -61,18 +61,10 @@ github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420011040-52d1e89f5633 h1:qkKD34l8OoRQIu0eQA0ddYgFIt7qtuhbUT4aNOJiY8Y=
github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420011040-52d1e89f5633/go.mod h1:ny/t4EsGaUHQMgCl99bAQ2WdXcg2k3exlaE9HxvU8aA=
github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420011803-b1920b6e161d h1:rZ8GsMw8sn9Ip9DdAkUPm/iWuoLwAMeWQg2IgWFKeiU=
github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420011803-b1920b6e161d/go.mod h1:ny/t4EsGaUHQMgCl99bAQ2WdXcg2k3exlaE9HxvU8aA=
github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420015806-459021c808f7 h1:+Lq4O0LMR00QYlmDwdGr/BToRoFEaAtpFqMG5XzyXkQ=
github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420015806-459021c808f7/go.mod h1:GGt1mWh9rdkPD9jT/iKM170Oqk1xm8s1ujH+QIW1nGk=
github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420021044-42b0d35bcd79 h1:PruEu6rjkVS0k877MzT5DdHxYdxoRtfotrr/e5XNofA= github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420021044-42b0d35bcd79 h1:PruEu6rjkVS0k877MzT5DdHxYdxoRtfotrr/e5XNofA=
github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420021044-42b0d35bcd79/go.mod h1:GGt1mWh9rdkPD9jT/iKM170Oqk1xm8s1ujH+QIW1nGk= github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420021044-42b0d35bcd79/go.mod h1:GGt1mWh9rdkPD9jT/iKM170Oqk1xm8s1ujH+QIW1nGk=
github.com/InazumaV/Ratte-Interface v0.0.0-20250420010428-f7d66abcc4f6 h1:JCFwQG45pQAo33l3/msmeo9v0/XWQCNofCqubAopWto= github.com/InazumaV/Ratte-Interface v0.0.0-20250505045848-a0068c2a9be9 h1:+adxGP0iY0EYP8iuva/q0IUgUSwIBEz8ZXWVuW8PTTA=
github.com/InazumaV/Ratte-Interface v0.0.0-20250420010428-f7d66abcc4f6/go.mod h1:UxqxslbpT8Q4qMldSNI6VCX5WFXWDbvE4fXpymp73kA= github.com/InazumaV/Ratte-Interface v0.0.0-20250505045848-a0068c2a9be9/go.mod h1:UxqxslbpT8Q4qMldSNI6VCX5WFXWDbvE4fXpymp73kA=
github.com/InazumaV/Ratte-Interface v0.0.0-20250505045058-84e4bf9f70e4 h1:0xrpixO7Ux3EAHqitA8JgxOqM28I7RGyXa3+yEacXCk=
github.com/InazumaV/Ratte-Interface v0.0.0-20250505045058-84e4bf9f70e4/go.mod h1:UxqxslbpT8Q4qMldSNI6VCX5WFXWDbvE4fXpymp73kA=
github.com/InazumaV/Ratte-Panel-V2b v0.0.0-20250420013203-72f8abe3e919 h1:+Fp5s8BVpk3vQC7N/x3a6sTRZNSU8Jd8G4MenyLnK3g= github.com/InazumaV/Ratte-Panel-V2b v0.0.0-20250420013203-72f8abe3e919 h1:+Fp5s8BVpk3vQC7N/x3a6sTRZNSU8Jd8G4MenyLnK3g=
github.com/InazumaV/Ratte-Panel-V2b v0.0.0-20250420013203-72f8abe3e919/go.mod h1:5EkRRTlqZqG3rp3aP6QiPlrPJKpWtwt5gBtJduFv35E= github.com/InazumaV/Ratte-Panel-V2b v0.0.0-20250420013203-72f8abe3e919/go.mod h1:5EkRRTlqZqG3rp3aP6QiPlrPJKpWtwt5gBtJduFv35E=
github.com/OmarTariq612/goech v0.0.0-20240405204721-8e2e1dafd3a0 h1:Wo41lDOevRJSGpevP+8Pk5bANX7fJacO2w04aqLiC5I= github.com/OmarTariq612/goech v0.0.0-20240405204721-8e2e1dafd3a0 h1:Wo41lDOevRJSGpevP+8Pk5bANX7fJacO2w04aqLiC5I=
@@ -324,11 +316,14 @@ github.com/google/pprof v0.0.0-20240528025155-186aa0362fba/go.mod h1:K1liHPHnj73
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/wire v0.6.0 h1:HBkoIh4BdSxoyo9PveV8giw7ZsaBOvzWKfcg/6MrVwI=
github.com/google/wire v0.6.0/go.mod h1:F4QhpQ9EDIdJ1Mbop/NZBRB+5yrR6qg3BnctaoUk6NA=
github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
@@ -805,8 +800,10 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -838,6 +835,8 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -870,7 +869,9 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -890,6 +891,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -945,8 +948,10 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
@@ -954,8 +959,10 @@ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9sn
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1007,6 +1014,8 @@ golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ=
golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

View File

@@ -21,7 +21,7 @@ type Trigger struct {
order chan int order chan int
} }
func NewTrigger( func New(
l *logrus.Entry, l *logrus.Entry,
tc *conf.Trigger, tc *conf.Trigger,
h *handler.Handler, h *handler.Handler,