From 9ede6257f880ea35d064ac43f55d239dcd6afe72 Mon Sep 17 00:00:00 2001 From: "zero@thinky" Date: Sat, 4 Apr 2026 16:38:29 +0300 Subject: [PATCH] feat(backend): use interpreters service for jobs handlers --- backend/cmd/main.go | 10 +++++++++- backend/internal/handlers/jobs.go | 29 ++++++++++++++++++++++------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/backend/cmd/main.go b/backend/cmd/main.go index 5538628..6baebd0 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -94,6 +94,7 @@ func main() { } scriptSvc := service.NewScriptService(scriptRepo) scriptHandlers := handlers.NewScriptHandlers(scriptSvc, cmdr) + jobsHandlers := handlers.NewJobsHandlers(cmdr, scriptSvc) agents := handlers.NewAgentsGroup(h, coll) auth := handlers.AuthGroup{Handlers: h} @@ -173,6 +174,13 @@ func main() { agentsGroup.GET("", agents.List) } + // Jobs (requires admin permission) + jobsGroup := v1.Group("/jobs") + jobsGroup.Use(auth.AuthMiddleware(), handlers.RequireAdmin()) + { + jobsGroup.POST("", jobsHandlers.AddJob) + } + // Agent registration agentRegGroup := v1.Group("/agents") { @@ -291,4 +299,4 @@ func main() { if err := g.Wait(); err != nil { log.Fatalf("Server error: %v", err) } -} \ No newline at end of file +} diff --git a/backend/internal/handlers/jobs.go b/backend/internal/handlers/jobs.go index 643b05f..b4f63e1 100644 --- a/backend/internal/handlers/jobs.go +++ b/backend/internal/handlers/jobs.go @@ -5,23 +5,26 @@ import ( "gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/grpcsrv/commander" "gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/models" + "gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/service" "github.com/gin-gonic/gin" ) type JobsHandlers struct { cmder *commander.Commander + svc *service.ScriptService } -func NewJobsHandlers(cmder *commander.Commander) JobsHandlers { - return JobsHandlers{cmder} +func NewJobsHandlers(cmder *commander.Commander, svc *service.ScriptService) JobsHandlers { + return JobsHandlers{cmder: cmder, svc: svc} } 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"` + Command string `json:"command"` + InterpreterID int64 `json:"interpreter_id"` + Stdin *string `json:"stdin"` + AID string `json:"agent_id"` } var in In if err := c.Bind(&in); err != nil { @@ -30,10 +33,22 @@ func (self *JobsHandlers) AddJob(c *gin.Context) { agent, ok := self.cmder.GetAgent(in.AID) if !ok { c.Status(404) - return fmt.Errorf("Agent not found") + return fmt.Errorf("agent not found") } + + var command []string + if in.InterpreterID == 0 { + command = []string{"sh", "-c", in.Command} + } else { + var err error + command, err = self.svc.ResolveCommand(c.Request.Context(), in.InterpreterID, in.Command) + if err != nil { + return err + } + } + jid, err := agent.AddJob(models.JobForInsert{ - Command: in.Command, + Command: command, Stdin: in.Stdin, }) if err != nil {