/
command.go
85 lines (75 loc) · 2.45 KB
/
command.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package http_handler
import (
"github.com/bytedance/Elkeid/server/agent_center/common/ylog"
"github.com/bytedance/Elkeid/server/agent_center/grpctrans/grpc_handler"
pb "github.com/bytedance/Elkeid/server/agent_center/grpctrans/proto"
"github.com/gin-gonic/gin"
)
type CommandRequest struct {
AgentID string `json:"agent_id" bson:"agent_id" binding:"required"`
Command CommandDetail `json:"command" bson:"command" binding:"required"`
}
type CommandDetail struct {
AgentCtrl int32 `json:"agent_ctrl,omitempty"`
Task *TaskMsg `json:"task,omitempty"`
Config []ConfigMsg `json:"config,omitempty"`
}
type TaskMsg struct {
DataType int32 `json:"data_type,omitempty"`
Name string `json:"name,omitempty"`
Data string `json:"data,omitempty"`
Token string `json:"token,omitempty"`
}
type ConfigMsg struct {
Name string `json:"name,omitempty"`
Type string `json:"type,omitempty"`
Version string `json:"version,omitempty"`
SHA256 string `json:"sha256,omitempty"`
Signature string `json:"signature,omitempty"`
DownloadURL []string `json:"download_url,omitempty"`
Detail string `json:"detail,omitempty"`
}
func PostCommand(c *gin.Context) {
var taskModel CommandRequest
err := c.BindJSON(&taskModel)
if err != nil {
CreateResponse(c, ParamInvalidErrorCode, err.Error())
ylog.Errorf("PostCommand", ">>>>ConnReset Parse para error : %s", err.Error())
return
}
mgCommand := &pb.Command{
AgentCtrl: taskModel.Command.AgentCtrl,
}
if taskModel.Command.Config != nil {
mgCommand.Config = make([]*pb.ConfigItem, 0, len(taskModel.Command.Config))
for _, v := range taskModel.Command.Config {
tmp := &pb.ConfigItem{
Name: v.Name,
Version: v.Version,
DownloadURL: v.DownloadURL,
SHA256: v.SHA256,
Detail: v.Detail,
Type: v.Type,
Signature: v.Signature,
}
mgCommand.Config = append(mgCommand.Config, tmp)
}
}
if taskModel.Command.Task != nil {
task := pb.PluginTask{
Name: taskModel.Command.Task.Name,
DataType: taskModel.Command.Task.DataType,
Data: taskModel.Command.Task.Data,
Token: taskModel.Command.Task.Token,
}
mgCommand.Task = &task
}
err = grpc_handler.GlobalGRPCPool.PostCommand(taskModel.AgentID, mgCommand)
if err != nil {
CreateResponse(c, UnknownErrorCode, err.Error())
ylog.Errorf("PostCommand", "error : %s", err.Error())
return
}
CreateResponse(c, SuccessCode, "")
return
}