add hook for handler
change map to cmap for Trigger.hashs
This commit is contained in:
Yuzuki616
2024-10-30 01:07:17 +09:00
parent 3ff99d4fd1
commit ffcbec4ede
8 changed files with 75 additions and 10 deletions

View File

@@ -42,6 +42,16 @@ func New(
func (h *Handler) Close() error {
if h.nodeAdded.Load() {
err := h.execHookCmd(h.Hook.BeforeDelNode, h.nodeName)
if err != nil {
h.l.WithError(err).Warn("Exec before del node hook failed")
}
defer func() {
err = h.execHookCmd(h.Hook.AfterDelNode, h.nodeName)
if err != nil {
h.l.WithError(err).Warn("Exec after del node hook failed")
}
}()
return h.c.DelNode(h.nodeName)
}
return nil

18
handler/hook.go Normal file
View File

@@ -0,0 +1,18 @@
package handler
import (
"os"
"os/exec"
)
func (h *Handler) execHookCmd(cmd string, ares ...string) error {
c := exec.Command(cmd, ares...)
c.Stdin = os.Stdin
c.Stdout = os.Stdout
c.Stderr = os.Stderr
err := c.Run()
if err != nil {
return err
}
return nil
}

View File

@@ -20,11 +20,34 @@ func (h *Handler) PullNodeHandle(n *panel.NodeInfo) error {
return fmt.Errorf("create cert error: %w", err)
}
}
err := h.c.AddNode(&core.AddNodeParams{
var protocol, port string
switch n.Type {
case "vmess":
protocol = "vmess"
port = n.VMess.Port
case "vless":
protocol = "vless"
port = n.VLess.Port
case "shadowsocks":
protocol = "shadowsocks"
port = n.Shadowsocks.Port
case "trojan":
protocol = "trojana"
port = n.Trojan.Port
case "other":
protocol = "other"
port = n.Other.Port
}
err := h.execHookCmd(h.Hook.BeforeAddNode, h.nodeName, protocol, port)
if err != nil {
h.l.WithError(err).Error("Exec before add node hook failed")
}
err = h.c.AddNode(&core.AddNodeParams{
NodeInfo: core.NodeInfo{
CommonNodeInfo: params.CommonNodeInfo{
Type: n.Type,
VMess: n.VMess,
VLess: n.VLess,
Shadowsocks: n.Shadowsocks,
Trojan: n.Trojan,
Hysteria: n.Hysteria,
@@ -43,6 +66,10 @@ func (h *Handler) PullNodeHandle(n *panel.NodeInfo) error {
if err != nil {
return fmt.Errorf("add node error: %w", err)
}
err = h.execHookCmd(h.Hook.AfterAddNode, h.nodeName, protocol, port)
if err != nil {
h.l.WithError(err).Warn("Exec after add node hook failed")
}
if h.nodeAdded.Load() {
h.nodeAdded.Store(true)
}