summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--main.go57
1 files changed, 57 insertions, 0 deletions
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..5a102b4
--- /dev/null
+++ b/main.go
@@ -0,0 +1,57 @@
+package main
+
+import (
+	"fmt"
+	"os"
+	"os/exec"
+)
+
+var (
+	version = "v0.1.0"
+
+	cmd   Config
+	flags []string
+)
+
+func main() {
+	initPledge()
+	initUnveil()
+
+	if len(os.Args) == 1 {
+		fmt.Println("Usage: pavo <command> <flags>")
+		os.Exit(1)
+	}
+
+	if os.Args[1] == "version" {
+		fmt.Println("Pavo", version)
+		os.Exit(0)
+	}
+
+	// Parse the config file.
+	parseConfig()
+
+	// Block futher unveil calls.
+	blockUnveil()
+
+	// Get path of command.
+	cmdPath, err := exec.LookPath(cmd.Command)
+	if err != nil {
+		fmt.Printf("%s %s :: %s\n",
+			cmd.Command,
+			"not found in $PATH",
+			err.Error())
+		os.Exit(1)
+	}
+
+	// TODO: Make the output realtime.
+	out, err := exec.Command(cmdPath, flags...).Output()
+	if err != nil {
+		err = fmt.Errorf("%s :: %s",
+			"Failed to execute command",
+			err.Error())
+		os.Exit(1)
+	}
+
+	// Print the output.
+	fmt.Printf(string(out))
+}