feat(backend): use interpreters service for jobs handlers

This commit is contained in:
2026-04-04 16:38:29 +03:00
parent f5b9b32a9f
commit 9ede6257f8
2 changed files with 31 additions and 8 deletions
+8
View File
@@ -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")
{
+22 -7
View File
@@ -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 {