Просмотр исходного кода

feat(server): Add Rustdesk Relay Server Commands

lejianwen 1 год назад
Родитель
Сommit
a5671e692d
4 измененных файлов с 67 добавлено и 16 удалено
  1. 1 1
      cmd/apimain.go
  2. 16 3
      http/controller/admin/rustdesk.go
  3. 44 7
      model/serverCmd.go
  4. 6 5
      service/serverCmd.go

+ 1 - 1
cmd/apimain.go

@@ -169,7 +169,7 @@ func InitGlobal() {
169 169
 	global.Lock = lock.NewLocal()
170 170
 }
171 171
 func DatabaseAutoUpdate() {
172
-	version := 251
172
+	version := 260
173 173
 
174 174
 	db := global.DB
175 175
 

+ 16 - 3
http/controller/admin/rustdesk.go

@@ -15,6 +15,7 @@ type Rustdesk struct {
15 15
 type RustdeskCmd struct {
16 16
 	Cmd    string `json:"cmd"`
17 17
 	Option string `json:"option"`
18
+	Target string `json:"target"`
18 19
 }
19 20
 
20 21
 func (r *Rustdesk) CmdList(c *gin.Context) {
@@ -26,7 +27,8 @@ func (r *Rustdesk) CmdList(c *gin.Context) {
26 27
 	res := service.AllService.ServerCmdService.List(q.Page, 9999)
27 28
 	//在列表前添加系统命令
28 29
 	list := make([]*model.ServerCmd, 0)
29
-	list = append(list, model.SysServerCmds...)
30
+	list = append(list, model.SysIdServerCmds...)
31
+	list = append(list, model.SysRelayServerCmds...)
30 32
 	list = append(list, res.ServerCmds...)
31 33
 	res.ServerCmds = list
32 34
 	response.Success(c, res)
@@ -101,12 +103,23 @@ func (r *Rustdesk) CmdUpdate(c *gin.Context) {
101 103
 
102 104
 func (r *Rustdesk) SendCmd(c *gin.Context) {
103 105
 	rc := &RustdeskCmd{}
104
-	c.ShouldBindJSON(rc)
106
+	if err := c.ShouldBindJSON(rc); err != nil {
107
+		response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
108
+		return
109
+	}
105 110
 	if rc.Cmd == "" {
106 111
 		response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
107 112
 		return
108 113
 	}
109
-	res, err := service.AllService.ServerCmdService.SendCmd(rc.Cmd, rc.Option)
114
+	if rc.Target == "" {
115
+		response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
116
+		return
117
+	}
118
+	if rc.Target != model.ServerCmdTargetIdServer && rc.Target != model.ServerCmdTargetRelayServer {
119
+		response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
120
+		return
121
+	}
122
+	res, err := service.AllService.ServerCmdService.SendCmd(rc.Target, rc.Cmd, rc.Option)
110 123
 	if err != nil {
111 124
 		response.Fail(c, 101, err.Error())
112 125
 		return

+ 44 - 7
model/serverCmd.go

@@ -6,6 +6,7 @@ type ServerCmd struct {
6 6
 	Alias   string `json:"alias" gorm:"default:'';not null;"`
7 7
 	Option  string `json:"option" gorm:"default:'';not null;"`
8 8
 	Explain string `json:"explain" gorm:"default:'';not null;"`
9
+	Target  string `json:"target" gorm:"default:'';not null;"`
9 10
 	TimeModel
10 11
 }
11 12
 
@@ -14,11 +15,47 @@ type ServerCmdList struct {
14 15
 	Pagination
15 16
 }
16 17
 
17
-var SysServerCmds = []*ServerCmd{
18
-	{Cmd: "h", Option: "", Explain: "show help"},
19
-	{Cmd: "relay-servers", Alias: "rs", Option: "<separated by ,>", Explain: "set or show relay servers"},
20
-	{Cmd: "ip-blocker", Alias: "ib", Option: "[<ip>|<number>] [-]", Explain: "block or unblock ip or show blocked ip"},
21
-	{Cmd: "ip-changes", Alias: "ic", Option: "[<id>|<number>] [-]", Explain: "ip-changes(ic) [<id>|<number>] [-]"},
22
-	{Cmd: "always-use-relay", Alias: "aur", Option: "[y|n]", Explain: "always use relay"},
23
-	{Cmd: "test-geo", Alias: "tg", Option: "<ip1> <ip2>", Explain: "test geo"},
18
+const (
19
+	ServerCmdTargetIdServer    = "21115"
20
+	ServerCmdTargetRelayServer = "21117"
21
+)
22
+
23
+var SysIdServerCmds = []*ServerCmd{
24
+	{Cmd: "h", Option: "", Explain: "show help", Target: ServerCmdTargetIdServer},
25
+	{Cmd: "relay-servers", Alias: "rs", Option: "<separated by ,>", Explain: "set or show relay servers", Target: ServerCmdTargetIdServer},
26
+	{Cmd: "ip-blocker", Alias: "ib", Option: "[<ip>|<number>] [-]", Explain: "block or unblock ip or show blocked ip", Target: ServerCmdTargetIdServer},
27
+	{Cmd: "ip-changes", Alias: "ic", Option: "[<id>|<number>] [-]", Explain: "ip-changes(ic) [<id>|<number>] [-]", Target: ServerCmdTargetIdServer},
28
+	{Cmd: "always-use-relay", Alias: "aur", Option: "[y|n]", Explain: "always use relay", Target: ServerCmdTargetIdServer},
29
+	{Cmd: "test-geo", Alias: "tg", Option: "<ip1> <ip2>", Explain: "test geo", Target: ServerCmdTargetIdServer},
30
+}
31
+
32
+/*
33
+"blacklist-add(ba) <ip>",
34
+"blacklist-remove(br) <ip>",
35
+"blacklist(b) <ip>",
36
+"blocklist-add(Ba) <ip>",
37
+"blocklist-remove(Br) <ip>",
38
+"blocklist(B) <ip>",
39
+"downgrade-threshold(dt) [value]",
40
+"downgrade-start-check(t) [value(second)]",
41
+"limit-speed(ls) [value(Mb/s)]",
42
+"total-bandwidth(tb) [value(Mb/s)]",
43
+"single-bandwidth(sb) [value(Mb/s)]",
44
+"usage(u)"
45
+*/
46
+
47
+var SysRelayServerCmds = []*ServerCmd{
48
+	{Cmd: "h", Option: "", Explain: "show help", Target: ServerCmdTargetRelayServer},
49
+	{Cmd: "blacklist-add", Alias: "ba", Option: "<ip>", Explain: "blacklist-add(ba) <ip>", Target: ServerCmdTargetRelayServer},
50
+	{Cmd: "blacklist-remove", Alias: "br", Option: "<ip>", Explain: "blacklist-remove(br) <ip>", Target: ServerCmdTargetRelayServer},
51
+	{Cmd: "blacklist", Alias: "b", Option: "<ip>", Explain: "blacklist(b) <ip>", Target: ServerCmdTargetRelayServer},
52
+	{Cmd: "blocklist-add", Alias: "Ba", Option: "<ip>", Explain: "blocklist-add(Ba) <ip>", Target: ServerCmdTargetRelayServer},
53
+	{Cmd: "blocklist-remove", Alias: "Br", Option: "<ip>", Explain: "blocklist-remove(Br) <ip>", Target: ServerCmdTargetRelayServer},
54
+	{Cmd: "blocklist", Alias: "B", Option: "<ip>", Explain: "blocklist(B) <ip>", Target: ServerCmdTargetRelayServer},
55
+	{Cmd: "downgrade-threshold", Alias: "dt", Option: "[value]", Explain: "downgrade-threshold(dt) [value]", Target: ServerCmdTargetRelayServer},
56
+	{Cmd: "downgrade-start-check", Alias: "t", Option: "[value(second)]", Explain: "downgrade-start-check(t) [value(second)]", Target: ServerCmdTargetRelayServer},
57
+	{Cmd: "limit-speed", Alias: "ls", Option: "[value(Mb/s)]", Explain: "limit-speed(ls) [value(Mb/s)]", Target: ServerCmdTargetRelayServer},
58
+	{Cmd: "total-bandwidth", Alias: "tb", Option: "[value(Mb/s)]", Explain: "total-bandwidth(tb) [value(Mb/s)]", Target: ServerCmdTargetRelayServer},
59
+	{Cmd: "single-bandwidth", Alias: "sb", Option: "[value(Mb/s)]", Explain: "single-bandwidth(sb) [value(Mb/s)]", Target: ServerCmdTargetRelayServer},
60
+	{Cmd: "usage", Alias: "u", Option: "", Explain: "usage(u)", Target: ServerCmdTargetRelayServer},
24 61
 }

+ 6 - 5
service/serverCmd.go

@@ -3,6 +3,7 @@ package service
3 3
 import (
4 4
 	"Gwen/global"
5 5
 	"Gwen/model"
6
+	"fmt"
6 7
 	"net"
7 8
 	"time"
8 9
 )
@@ -40,15 +41,15 @@ func (is *ServerCmdService) Create(u *model.ServerCmd) error {
40 41
 }
41 42
 
42 43
 // SendCmd 发送命令
43
-func (is *ServerCmdService) SendCmd(cmd string, arg string) (string, error) {
44
+func (is *ServerCmdService) SendCmd(port string, cmd string, arg string) (string, error) {
44 45
 	//组装命令
45 46
 	cmd = cmd + " " + arg
46
-	res, err := is.SendSocketCmd("v6", cmd)
47
+	res, err := is.SendSocketCmd("v6", port, cmd)
47 48
 	if err == nil {
48 49
 		return res, nil
49 50
 	}
50 51
 	//v6连接失败,尝试v4
51
-	res, err = is.SendSocketCmd("v4", cmd)
52
+	res, err = is.SendSocketCmd("v4", port, cmd)
52 53
 	if err == nil {
53 54
 		return res, nil
54 55
 	}
@@ -56,14 +57,14 @@ func (is *ServerCmdService) SendCmd(cmd string, arg string) (string, error) {
56 57
 }
57 58
 
58 59
 // SendSocketCmd
59
-func (is *ServerCmdService) SendSocketCmd(ty string, cmd string) (string, error) {
60
+func (is *ServerCmdService) SendSocketCmd(ty string, port string, cmd string) (string, error) {
60 61
 	addr := "[::1]"
61 62
 	tcp := "tcp6"
62 63
 	if ty == "v4" {
63 64
 		tcp = "tcp"
64 65
 		addr = "127.0.0.1"
65 66
 	}
66
-	conn, err := net.Dial(tcp, addr+":21115")
67
+	conn, err := net.Dial(tcp, fmt.Sprintf("%s:%s", addr, port))
67 68
 	if err != nil {
68 69
 		global.Logger.Debugf("%s connect to id server failed: %v", ty, err)
69 70
 		return "", err