This repository has been archived by the owner on Aug 20, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 23
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add sub commands for generate cmd (#62)
- Loading branch information
Showing
5 changed files
with
115 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
package generate | ||
|
||
import ( | ||
"encoding/json" | ||
"encoding/xml" | ||
"fmt" | ||
"io/ioutil" | ||
"os" | ||
|
||
"github.com/sirupsen/logrus" | ||
|
||
"github.com/docker/oscalkit/generator" | ||
"github.com/urfave/cli" | ||
) | ||
|
||
var isJSON bool | ||
|
||
// Catalog generates json/xml catalogs | ||
var Catalog = cli.Command{ | ||
Name: "catalogs", | ||
Usage: "generates json/xml catalogs provided profile", | ||
Flags: []cli.Flag{ | ||
cli.StringFlag{ | ||
Name: "profile, p", | ||
Usage: "profile to intersect against", | ||
Destination: &profilePath, | ||
}, | ||
cli.StringFlag{ | ||
Name: "output, o", | ||
Usage: "output filename", | ||
Destination: &outputFileName, | ||
Value: "output", | ||
}, | ||
cli.BoolFlag{ | ||
|
||
Name: "json, j", | ||
Usage: "flag for generating catalogs in json", | ||
Destination: &isJSON, | ||
}, | ||
}, | ||
Before: func(c *cli.Context) error { | ||
if profilePath == "" { | ||
return cli.NewExitError("oscalkit generate is missing the --profile flag", 1) | ||
} | ||
return nil | ||
}, | ||
Action: func(c *cli.Context) error { | ||
|
||
profilePath, err := generator.GetAbsolutePath(profilePath) | ||
if err != nil { | ||
return cli.NewExitError(fmt.Sprintf("cannot get absolute path, err: %v", err), 1) | ||
} | ||
|
||
_, err = os.Stat(profilePath) | ||
if err != nil { | ||
return cli.NewExitError(fmt.Sprintf("cannot fetch file, err %v", err), 1) | ||
} | ||
f, err := os.Open(profilePath) | ||
if err != nil { | ||
return cli.NewExitError(err, 1) | ||
} | ||
defer f.Close() | ||
|
||
profile, err := generator.ReadProfile(f) | ||
if err != nil { | ||
return cli.NewExitError(err, 1) | ||
} | ||
catalogs, err := generator.CreateCatalogsFromProfile(profile) | ||
if err != nil { | ||
return cli.NewExitError(fmt.Sprintf("cannot create catalogs from profile, err: %v", err), 1) | ||
} | ||
|
||
var bytes []byte | ||
if !isJSON { | ||
bytes, err = xml.MarshalIndent(catalogs, "", " ") | ||
if err != nil { | ||
return err | ||
} | ||
return ioutil.WriteFile(outputFileName+".xml", bytes, 0644) | ||
} | ||
bytes, err = json.MarshalIndent(catalogs, "", " ") | ||
if err != nil { | ||
return err | ||
} | ||
return ioutil.WriteFile(outputFileName+".json", bytes, 0644) | ||
|
||
}, | ||
After: func(c *cli.Context) error { | ||
logrus.Info("catalog file generated") | ||
return nil | ||
}, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package generate | ||
|
||
import ( | ||
"github.com/urfave/cli" | ||
) | ||
|
||
// Generate Cli command to generate go code for controls | ||
var Generate = cli.Command{ | ||
Name: "generate", | ||
Usage: "generates catalogs code/xml/json against provided profile", | ||
Subcommands: []cli.Command{ | ||
Catalog, | ||
Code, | ||
Implementation, | ||
}, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
package cmd | ||
package generate | ||
|
||
import ( | ||
"bytes" | ||
|