diff --git a/correlation/rules/update.go b/correlation/rules/update.go index 170ccc415..327a07837 100644 --- a/correlation/rules/update.go +++ b/correlation/rules/update.go @@ -4,7 +4,6 @@ import ( "errors" "log" "os" - "os/exec" "time" "github.com/utmstack/UTMStack/correlation/utils" @@ -19,25 +18,20 @@ func Update(updateReady chan bool) { f, err := os.Stat(cnf.RulesFolder + "system") if err != nil { if !errors.Is(err, os.ErrNotExist) { - log.Printf("Could not get rules folder: %v", err) - os.Exit(1) + log.Fatalf("Could not get rules folder: %v", err) } } - if f != nil && (f.IsDir() || f.Name() == "system") { - rm := exec.Command("rm", "-R", cnf.RulesFolder+"system") - err = rm.Run() + if f != nil { + err := utils.RunCommand("rm", "-R", cnf.RulesFolder+"system") if err != nil { - log.Printf("Could not remove rules folder: %v", err) - os.Exit(1) + log.Fatalf("Could not remove rules folder: %v", err) } } - clone := exec.Command("git", "clone", "https://github.com/utmstack/rules.git", cnf.RulesFolder+"system") - err = clone.Run() + err = utils.RunCommand("git", "clone", "https://github.com/utmstack/rules.git", cnf.RulesFolder+"system") if err != nil { - log.Printf("Could not clone rules: %v", err) - os.Exit(1) + log.Fatalf("Could not clone rules: %v", err) } if first { diff --git a/correlation/utils/os.go b/correlation/utils/os.go new file mode 100644 index 000000000..4046b35c4 --- /dev/null +++ b/correlation/utils/os.go @@ -0,0 +1,39 @@ +package utils + +import ( + "io" + "log" + "os/exec" +) + +func RunCommand(command ...string) error { + cmd := exec.Command(command[0], command[1:]...) + output, err := cmd.StdoutPipe() + if err != nil { + return err + } + + err = cmd.Start() + if err != nil { + return err + } + + err = cmd.Wait() + if err != nil { + return err + } + + bytesRead, err := io.ReadAll(output) + if err != nil { + return err + } + + err = output.Close() + if err != nil { + return err + } + + log.Println(string(bytesRead)) + + return nil +}