Files
MonkeyCode/backend/pkg/scan/scan.go
2025-08-20 16:25:32 +08:00

56 lines
1.1 KiB
Go

package scan
import (
"encoding/json"
"fmt"
"log"
"os"
"os/exec"
"strings"
)
func Scan(id string, workspace, rule string) (*Result, error) {
if _, err := os.Stat(workspace); err != nil {
return nil, fmt.Errorf("failed to stat workspace: %w", err)
}
output := fmt.Sprintf("/tmp/%s.json", id)
cmd := exec.Command(
"/app/assets/sgp/sgp",
"--metrics=off",
"--disable-version-check",
"--disable-nosem",
"--confidence=HIGH",
"--confidence=MEDIUM",
"--impact=HIGH",
"--impact=MEDIUM",
"--time",
"--json",
"--output", output,
"--config", rule,
workspace,
)
defer os.Remove(output)
log.Printf("[Scan] Executing command: %s %s", cmd.Path, strings.Join(cmd.Args[1:], " "))
out, err := cmd.CombinedOutput()
if err != nil {
return nil, fmt.Errorf("failed to run command: %w out: %s", err, string(out))
}
b, err := os.ReadFile(output)
if err != nil {
return nil, fmt.Errorf("failed to read output file: %w", err)
}
var r Result
if err := json.Unmarshal(b, &r); err != nil {
return nil, fmt.Errorf("failed to unmarshal JSON: %w", err)
}
r.ID = id
r.Output = string(out)
return &r, nil
}