From a5671e692d9a13f47ba89c8f3781206cab7b55f4 Mon Sep 17 00:00:00 2001 From: lejianwen <84855512@qq.com> Date: Sat, 4 Jan 2025 20:49:44 +0800 Subject: [PATCH] feat(server): Add Rustdesk Relay Server Commands --- cmd/apimain.go | 2 +- http/controller/admin/rustdesk.go | 19 ++++++++++-- model/serverCmd.go | 51 ++++++++++++++++++++++++++----- service/serverCmd.go | 11 ++++--- 4 files changed, 67 insertions(+), 16 deletions(-) diff --git a/cmd/apimain.go b/cmd/apimain.go index 87d7b65..b35a8c5 100644 --- a/cmd/apimain.go +++ b/cmd/apimain.go @@ -169,7 +169,7 @@ func InitGlobal() { global.Lock = lock.NewLocal() } func DatabaseAutoUpdate() { - version := 251 + version := 260 db := global.DB diff --git a/http/controller/admin/rustdesk.go b/http/controller/admin/rustdesk.go index c8afdb6..de3ed43 100644 --- a/http/controller/admin/rustdesk.go +++ b/http/controller/admin/rustdesk.go @@ -15,6 +15,7 @@ type Rustdesk struct { type RustdeskCmd struct { Cmd string `json:"cmd"` Option string `json:"option"` + Target string `json:"target"` } func (r *Rustdesk) CmdList(c *gin.Context) { @@ -26,7 +27,8 @@ func (r *Rustdesk) CmdList(c *gin.Context) { res := service.AllService.ServerCmdService.List(q.Page, 9999) //在列表前添加系统命令 list := make([]*model.ServerCmd, 0) - list = append(list, model.SysServerCmds...) + list = append(list, model.SysIdServerCmds...) + list = append(list, model.SysRelayServerCmds...) list = append(list, res.ServerCmds...) res.ServerCmds = list response.Success(c, res) @@ -101,12 +103,23 @@ func (r *Rustdesk) CmdUpdate(c *gin.Context) { func (r *Rustdesk) SendCmd(c *gin.Context) { rc := &RustdeskCmd{} - c.ShouldBindJSON(rc) + if err := c.ShouldBindJSON(rc); err != nil { + response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error()) + return + } if rc.Cmd == "" { response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")) return } - res, err := service.AllService.ServerCmdService.SendCmd(rc.Cmd, rc.Option) + if rc.Target == "" { + response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")) + return + } + if rc.Target != model.ServerCmdTargetIdServer && rc.Target != model.ServerCmdTargetRelayServer { + response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")) + return + } + res, err := service.AllService.ServerCmdService.SendCmd(rc.Target, rc.Cmd, rc.Option) if err != nil { response.Fail(c, 101, err.Error()) return diff --git a/model/serverCmd.go b/model/serverCmd.go index 525a890..a728b35 100644 --- a/model/serverCmd.go +++ b/model/serverCmd.go @@ -6,6 +6,7 @@ type ServerCmd struct { Alias string `json:"alias" gorm:"default:'';not null;"` Option string `json:"option" gorm:"default:'';not null;"` Explain string `json:"explain" gorm:"default:'';not null;"` + Target string `json:"target" gorm:"default:'';not null;"` TimeModel } @@ -14,11 +15,47 @@ type ServerCmdList struct { Pagination } -var SysServerCmds = []*ServerCmd{ - {Cmd: "h", Option: "", Explain: "show help"}, - {Cmd: "relay-servers", Alias: "rs", Option: "", Explain: "set or show relay servers"}, - {Cmd: "ip-blocker", Alias: "ib", Option: "[|] [-]", Explain: "block or unblock ip or show blocked ip"}, - {Cmd: "ip-changes", Alias: "ic", Option: "[|] [-]", Explain: "ip-changes(ic) [|] [-]"}, - {Cmd: "always-use-relay", Alias: "aur", Option: "[y|n]", Explain: "always use relay"}, - {Cmd: "test-geo", Alias: "tg", Option: " ", Explain: "test geo"}, +const ( + ServerCmdTargetIdServer = "21115" + ServerCmdTargetRelayServer = "21117" +) + +var SysIdServerCmds = []*ServerCmd{ + {Cmd: "h", Option: "", Explain: "show help", Target: ServerCmdTargetIdServer}, + {Cmd: "relay-servers", Alias: "rs", Option: "", Explain: "set or show relay servers", Target: ServerCmdTargetIdServer}, + {Cmd: "ip-blocker", Alias: "ib", Option: "[|] [-]", Explain: "block or unblock ip or show blocked ip", Target: ServerCmdTargetIdServer}, + {Cmd: "ip-changes", Alias: "ic", Option: "[|] [-]", Explain: "ip-changes(ic) [|] [-]", Target: ServerCmdTargetIdServer}, + {Cmd: "always-use-relay", Alias: "aur", Option: "[y|n]", Explain: "always use relay", Target: ServerCmdTargetIdServer}, + {Cmd: "test-geo", Alias: "tg", Option: " ", Explain: "test geo", Target: ServerCmdTargetIdServer}, +} + +/* +"blacklist-add(ba) ", +"blacklist-remove(br) ", +"blacklist(b) ", +"blocklist-add(Ba) ", +"blocklist-remove(Br) ", +"blocklist(B) ", +"downgrade-threshold(dt) [value]", +"downgrade-start-check(t) [value(second)]", +"limit-speed(ls) [value(Mb/s)]", +"total-bandwidth(tb) [value(Mb/s)]", +"single-bandwidth(sb) [value(Mb/s)]", +"usage(u)" +*/ + +var SysRelayServerCmds = []*ServerCmd{ + {Cmd: "h", Option: "", Explain: "show help", Target: ServerCmdTargetRelayServer}, + {Cmd: "blacklist-add", Alias: "ba", Option: "", Explain: "blacklist-add(ba) ", Target: ServerCmdTargetRelayServer}, + {Cmd: "blacklist-remove", Alias: "br", Option: "", Explain: "blacklist-remove(br) ", Target: ServerCmdTargetRelayServer}, + {Cmd: "blacklist", Alias: "b", Option: "", Explain: "blacklist(b) ", Target: ServerCmdTargetRelayServer}, + {Cmd: "blocklist-add", Alias: "Ba", Option: "", Explain: "blocklist-add(Ba) ", Target: ServerCmdTargetRelayServer}, + {Cmd: "blocklist-remove", Alias: "Br", Option: "", Explain: "blocklist-remove(Br) ", Target: ServerCmdTargetRelayServer}, + {Cmd: "blocklist", Alias: "B", Option: "", Explain: "blocklist(B) ", Target: ServerCmdTargetRelayServer}, + {Cmd: "downgrade-threshold", Alias: "dt", Option: "[value]", Explain: "downgrade-threshold(dt) [value]", Target: ServerCmdTargetRelayServer}, + {Cmd: "downgrade-start-check", Alias: "t", Option: "[value(second)]", Explain: "downgrade-start-check(t) [value(second)]", Target: ServerCmdTargetRelayServer}, + {Cmd: "limit-speed", Alias: "ls", Option: "[value(Mb/s)]", Explain: "limit-speed(ls) [value(Mb/s)]", Target: ServerCmdTargetRelayServer}, + {Cmd: "total-bandwidth", Alias: "tb", Option: "[value(Mb/s)]", Explain: "total-bandwidth(tb) [value(Mb/s)]", Target: ServerCmdTargetRelayServer}, + {Cmd: "single-bandwidth", Alias: "sb", Option: "[value(Mb/s)]", Explain: "single-bandwidth(sb) [value(Mb/s)]", Target: ServerCmdTargetRelayServer}, + {Cmd: "usage", Alias: "u", Option: "", Explain: "usage(u)", Target: ServerCmdTargetRelayServer}, } diff --git a/service/serverCmd.go b/service/serverCmd.go index 02e45b1..179b92e 100644 --- a/service/serverCmd.go +++ b/service/serverCmd.go @@ -3,6 +3,7 @@ package service import ( "Gwen/global" "Gwen/model" + "fmt" "net" "time" ) @@ -40,15 +41,15 @@ func (is *ServerCmdService) Create(u *model.ServerCmd) error { } // SendCmd 发送命令 -func (is *ServerCmdService) SendCmd(cmd string, arg string) (string, error) { +func (is *ServerCmdService) SendCmd(port string, cmd string, arg string) (string, error) { //组装命令 cmd = cmd + " " + arg - res, err := is.SendSocketCmd("v6", cmd) + res, err := is.SendSocketCmd("v6", port, cmd) if err == nil { return res, nil } //v6连接失败,尝试v4 - res, err = is.SendSocketCmd("v4", cmd) + res, err = is.SendSocketCmd("v4", port, cmd) if err == nil { return res, nil } @@ -56,14 +57,14 @@ func (is *ServerCmdService) SendCmd(cmd string, arg string) (string, error) { } // SendSocketCmd -func (is *ServerCmdService) SendSocketCmd(ty string, cmd string) (string, error) { +func (is *ServerCmdService) SendSocketCmd(ty string, port string, cmd string) (string, error) { addr := "[::1]" tcp := "tcp6" if ty == "v4" { tcp = "tcp" addr = "127.0.0.1" } - conn, err := net.Dial(tcp, addr+":21115") + conn, err := net.Dial(tcp, fmt.Sprintf("%s:%s", addr, port)) if err != nil { global.Logger.Debugf("%s connect to id server failed: %v", ty, err) return "", err