package handlers import ( "fmt" "gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/grpcsrv/commander" "gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/models" "github.com/gin-gonic/gin" ) type JobsHandlers struct { cmder *commander.Commander } func NewJobsHandlers(cmder *commander.Commander) JobsHandlers { return JobsHandlers{cmder} } func (self *JobsHandlers) AddJob(c *gin.Context) { err := func() error { type In struct { Command []string `json:"command"` Stdin *string `json:"stdin"` AID string `json:"agent_id"` } var in In if err := c.Bind(&in); err != nil { return err } agent, ok := self.cmder.GetAgent(in.AID) if !ok { c.Status(404) return fmt.Errorf("Agent not found") } jid, err := agent.AddJob(models.JobForInsert{ Command: in.Command, Stdin: in.Stdin, }) if err != nil { return err } job, err := agent.WaitJob(jid) if err != nil { return err } type Out struct { ID int64 `json:"id"` Command []string `json:"command"` Stdin *string `json:"stdin"` Stdout string `json:"stdout"` Stderr string `json:"stderr"` Status int32 `json:"status"` } c.JSON(201, Out{ ID: job.ID, Command: job.Command, Stdin: job.Stdin, Stdout: job.Stdout, Stderr: job.Stderr, Status: job.Status, }) return nil }() if err != nil { c.Error(err) } }