Skip to content

Commit

Permalink
Merge pull request #310 from jmpsec/more-cli-improvements
Browse files Browse the repository at this point in the history
Better errors in `osctrl-cli`
  • Loading branch information
javuto authored Oct 16, 2022
2 parents ffebb04 + 274555d commit bfca823
Show file tree
Hide file tree
Showing 7 changed files with 110 additions and 63 deletions.
20 changes: 11 additions & 9 deletions cli/carve.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ func listCarves(c *cli.Context) error {
}
env := c.String("env")
if env == "" {
fmt.Println("Environment is required")
fmt.Println("❌ environment is required")
os.Exit(1)
}
// Retrieve data
Expand Down Expand Up @@ -125,12 +125,12 @@ func completeCarve(c *cli.Context) error {
// Get values from flags
name := c.String("name")
if name == "" {
fmt.Println("Query name is required")
fmt.Println("❌ carve name is required")
os.Exit(1)
}
env := c.String("env")
if env == "" {
fmt.Println("Environment is required")
fmt.Println("❌ environment is required")
os.Exit(1)
}
if dbFlag {
Expand All @@ -149,12 +149,12 @@ func deleteCarve(c *cli.Context) error {
// Get values from flags
name := c.String("name")
if name == "" {
fmt.Println("Query name is required")
fmt.Println("❌ carve name is required")
os.Exit(1)
}
env := c.String("env")
if env == "" {
fmt.Println("Environment is required")
fmt.Println("❌ environment is required")
os.Exit(1)
}
if dbFlag {
Expand All @@ -173,17 +173,17 @@ func runCarve(c *cli.Context) error {
// Get values from flags
path := c.String("path")
if path == "" {
fmt.Println("Path is required")
fmt.Println("❌ path is required")
os.Exit(1)
}
env := c.String("env")
if env == "" {
fmt.Println("Environment is required")
fmt.Println("❌ environment is required")
os.Exit(1)
}
uuid := c.String("uuid")
if uuid == "" {
fmt.Println("UUID is required")
fmt.Println("UUID is required")
os.Exit(1)
}
if dbFlag {
Expand Down Expand Up @@ -222,7 +222,9 @@ func runCarve(c *cli.Context) error {
if err != nil {
return err
}
fmt.Printf("✅ Carve %s created successfully", c.Name)
if !silentFlag {
fmt.Printf("✅ carve %s created successfully", c.Name)
}
}
return nil
}
4 changes: 2 additions & 2 deletions cli/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ func addEnvironment(c *cli.Context) error {
// Get environment name
envName := c.String("name")
if envName == "" {
fmt.Println("Environment name is required")
fmt.Println("Environment name is required")
os.Exit(1)
}
// Get environment hostname
envHost := c.String("hostname")
if envHost == "" {
fmt.Println("Environment hostname is required")
fmt.Println("Environment hostname is required")
os.Exit(1)
}
// Get certificate
Expand Down
8 changes: 8 additions & 0 deletions cli/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ var (
jsonFlag bool
csvFlag bool
prettyFlag bool
silentFlag bool
insecureFlag bool
dbConfigFile string
apiConfigFile string
Expand Down Expand Up @@ -197,6 +198,13 @@ func init() {
Usage: "Print output in pretty format (table)",
Destination: &prettyFlag,
},
&cli.BoolFlag{
Name: "silent",
Aliases: []string{"s"},
Value: false,
Usage: "Silent mode",
Destination: &prettyFlag,
},
}
// Initialize CLI flags commands
commands = []*cli.Command{
Expand Down
14 changes: 8 additions & 6 deletions cli/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func listNodes(c *cli.Context) error {
}
env := c.String("env")
if env == "" {
fmt.Println("Environment is required")
fmt.Println("❌ environment is required")
os.Exit(1)
}
// Retrieve data
Expand Down Expand Up @@ -111,12 +111,12 @@ func deleteNode(c *cli.Context) error {
// Get values from flags
uuid := c.String("uuid")
if uuid == "" {
fmt.Println("uuid is required")
fmt.Println("uuid is required")
os.Exit(1)
}
env := c.String("name")
if env == "" {
fmt.Println("Environment is required")
fmt.Println("❌ environment is required")
os.Exit(1)
}
if dbFlag {
Expand All @@ -126,20 +126,22 @@ func deleteNode(c *cli.Context) error {
} else if apiFlag {

}
fmt.Println("✅ Node has been deleted")
if !silentFlag {
fmt.Println("✅ node was deleted successfully")
}
return nil
}

func showNode(c *cli.Context) error {
// Get values from flags
uuid := c.String("uuid")
if uuid == "" {
fmt.Println("UUID is required")
fmt.Println("UUID is required")
os.Exit(1)
}
env := c.String("env")
if env == "" {
fmt.Println("Environment is required")
fmt.Println("❌ environment is required")
os.Exit(1)
}
var node nodes.OsqueryNode
Expand Down
67 changes: 43 additions & 24 deletions cli/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,24 +65,24 @@ func listQueries(c *cli.Context) error {
}
env := c.String("env")
if env == "" {
fmt.Println("Environment is required")
fmt.Println("❌ environment is required")
os.Exit(1)
}
// Retrieve data
var qs []queries.DistributedQuery
if dbFlag {
e, err := envs.Get(env)
if err != nil {
return err
return fmt.Errorf("❌ error env get - %s", err)
}
qs, err = queriesmgr.GetQueries(target, e.ID)
if err != nil {
return err
return fmt.Errorf("❌ error get queries - %s", err)
}
} else if apiFlag {
qs, err = osctrlAPI.GetQueries(env)
if err != nil {
return err
return fmt.Errorf("❌ error get queries - %s", err)
}
}
header := []string{
Expand All @@ -101,14 +101,14 @@ func listQueries(c *cli.Context) error {
if jsonFlag {
jsonRaw, err := json.Marshal(qs)
if err != nil {
return err
return fmt.Errorf("❌ error json marshal - %s", err)
}
fmt.Println(string(jsonRaw))
} else if csvFlag {
data := queriesToData(qs, header)
w := csv.NewWriter(os.Stdout)
if err := w.WriteAll(data); err != nil {
return err
return fmt.Errorf("❌ error csv writeall - %s", err)
}
} else if prettyFlag {
table := tablewriter.NewWriter(os.Stdout)
Expand All @@ -129,22 +129,29 @@ func completeQuery(c *cli.Context) error {
// Get values from flags
name := c.String("name")
if name == "" {
fmt.Println("Query name is required")
fmt.Println("❌ query name is required")
os.Exit(1)
}
env := c.String("env")
if env == "" {
fmt.Println("Environment is required")
fmt.Println("❌ environment is required")
os.Exit(1)
}
if dbFlag {
e, err := envs.Get(env)
if err != nil {
return err
return fmt.Errorf("❌ error env get - %s", err)
}
if err := queriesmgr.Complete(name, e.ID); err != nil {
return fmt.Errorf("❌ error query complete - %s", err)
}
return queriesmgr.Complete(name, e.ID)
} else if apiFlag {
return osctrlAPI.CompleteQuery(env, name)
if err := osctrlAPI.CompleteQuery(env, name); err != nil {
return fmt.Errorf("❌ error complete query - %s", err)
}
}
if !silentFlag {
fmt.Printf("✅ query %s completed successfully", name)
}
return nil
}
Expand All @@ -153,22 +160,29 @@ func deleteQuery(c *cli.Context) error {
// Get values from flags
name := c.String("name")
if name == "" {
fmt.Println("Query name is required")
fmt.Println("❌ query name is required")
os.Exit(1)
}
env := c.String("env")
if env == "" {
fmt.Println("Environment is required")
fmt.Println("❌ environment is required")
os.Exit(1)
}
if dbFlag {
e, err := envs.Get(env)
if err != nil {
return err
}
return queriesmgr.Delete(name, e.ID)
if err := queriesmgr.Delete(name, e.ID); err != nil {
return fmt.Errorf("❌ error %s", err)
}
} else if apiFlag {
return osctrlAPI.DeleteQuery(env, name)
if err := osctrlAPI.DeleteQuery(env, name); err != nil {
return fmt.Errorf("❌ error %s", err)
}
}
if !silentFlag {
fmt.Printf("✅ query %s deleted successfully", name)
}
return nil
}
Expand All @@ -177,24 +191,24 @@ func runQuery(c *cli.Context) error {
// Get values from flags
query := c.String("query")
if query == "" {
fmt.Println("Query is required")
fmt.Println("❌ query is required")
os.Exit(1)
}
env := c.String("env")
if env == "" {
fmt.Println("Environment is required")
fmt.Println("❌ environment is required")
os.Exit(1)
}
uuid := c.String("uuid")
if uuid == "" {
fmt.Println("UUID is required")
fmt.Println("UUID is required")
os.Exit(1)
}
hidden := c.Bool("hidden")
if dbFlag {
e, err := envs.Get(env)
if err != nil {
return err
return fmt.Errorf("❌ error env get - %s", err)
}
queryName := queries.GenQueryName()
newQuery := queries.DistributedQuery{
Expand All @@ -211,23 +225,28 @@ func runQuery(c *cli.Context) error {
EnvironmentID: e.ID,
}
if err := queriesmgr.Create(newQuery); err != nil {
return err
return fmt.Errorf("❌ error query create - %s", err)
}
if (uuid != "") && nodesmgr.CheckByUUID(uuid) {
if err := queriesmgr.CreateTarget(queryName, queries.QueryTargetUUID, uuid); err != nil {
return err
return fmt.Errorf("❌ error create target - %s", err)
}
}
if err := queriesmgr.SetExpected(queryName, 1, e.ID); err != nil {
return err
return fmt.Errorf("❌ error set expected - %s", err)
}
if !silentFlag {
fmt.Printf("✅ query %s created successfully", queryName)
}
return nil
} else if apiFlag {
q, err := osctrlAPI.RunQuery(env, uuid, query, hidden)
if err != nil {
return err
return fmt.Errorf("❌ error run query - %s", err)
}
if !silentFlag {
fmt.Printf("✅ query %s created successfully", q.Name)
}
fmt.Printf("✅ Query %s created successfully", q.Name)
}
return nil
}
Loading

0 comments on commit bfca823

Please sign in to comment.