@@ -45,6 +45,7 @@ func NewCmdDelete(f *cmdutil.Factory) *cobra.Command {
|
||||
}
|
||||
|
||||
var confirmed bool
|
||||
|
||||
err := huh.NewConfirm().
|
||||
Title(fmt.Sprintf("Delete statement of applicability %s?", args[0])).
|
||||
Value(&confirmed).
|
||||
@@ -52,6 +53,7 @@ func NewCmdDelete(f *cmdutil.Factory) *cobra.Command {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !confirmed {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -108,6 +108,7 @@ func NewCmdList(f *cmdutil.Factory) *cobra.Command {
|
||||
if err := cmdutil.ValidateEnum("order-by", flagOrderBy, []string{"NAME", "CREATED_AT"}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
variables["orderBy"] = map[string]any{
|
||||
"field": flagOrderBy,
|
||||
"direction": flagOrderDir,
|
||||
@@ -129,12 +130,15 @@ func NewCmdList(f *cmdutil.Factory) *cobra.Command {
|
||||
if err := json.Unmarshal(data, &resp); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if resp.Node == nil {
|
||||
return nil, fmt.Errorf("organization %s not found", flagOrg)
|
||||
}
|
||||
|
||||
if resp.Node.Typename != "Organization" {
|
||||
return nil, fmt.Errorf("expected Organization node, got %s", resp.Node.Typename)
|
||||
}
|
||||
|
||||
return &resp.Node.StatementsOfApplicability, nil
|
||||
},
|
||||
)
|
||||
@@ -146,6 +150,7 @@ func NewCmdList(f *cmdutil.Factory) *cobra.Command {
|
||||
if soas == nil {
|
||||
soas = []statementOfApplicability{}
|
||||
}
|
||||
|
||||
return cmdutil.PrintJSON(f.IOStreams.Out, soas)
|
||||
}
|
||||
|
||||
|
||||
@@ -82,12 +82,14 @@ func NewCmdAdd(f *cmdutil.Factory) *cobra.Command {
|
||||
if flagApplicable && flagNotApplicable {
|
||||
return fmt.Errorf("cannot set both --applicable and --not-applicable")
|
||||
}
|
||||
|
||||
if !flagApplicable && !flagNotApplicable {
|
||||
if !f.IOStreams.IsInteractive() {
|
||||
return fmt.Errorf("either --applicable or --not-applicable is required")
|
||||
}
|
||||
|
||||
var choice string
|
||||
|
||||
err := huh.NewSelect[string]().
|
||||
Title("Is this control applicable?").
|
||||
Options(
|
||||
@@ -99,6 +101,7 @@ func NewCmdAdd(f *cmdutil.Factory) *cobra.Command {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
flagApplicable = choice == "applicable"
|
||||
}
|
||||
|
||||
@@ -154,10 +157,12 @@ func NewCmdAdd(f *cmdutil.Factory) *cobra.Command {
|
||||
}
|
||||
|
||||
s := resp.CreateApplicabilityStatement.ApplicabilityStatementEdge.Node
|
||||
|
||||
applicable := "not applicable"
|
||||
if s.Applicability {
|
||||
applicable = "applicable"
|
||||
}
|
||||
|
||||
_, _ = fmt.Fprintf(
|
||||
f.IOStreams.Out,
|
||||
"Added statement %s: control %s (%s) marked as %s\n",
|
||||
|
||||
@@ -107,6 +107,7 @@ func NewCmdList(f *cmdutil.Factory) *cobra.Command {
|
||||
if err := cmdutil.ValidateEnum("order-by", flagOrderBy, []string{"CREATED_AT", "CONTROL_SECTION_TITLE"}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
variables["orderBy"] = map[string]any{
|
||||
"field": flagOrderBy,
|
||||
"direction": flagOrderDir,
|
||||
@@ -128,12 +129,15 @@ func NewCmdList(f *cmdutil.Factory) *cobra.Command {
|
||||
if err := json.Unmarshal(data, &resp); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if resp.Node == nil {
|
||||
return nil, fmt.Errorf("statement of applicability %s not found", args[0])
|
||||
}
|
||||
|
||||
if resp.Node.Typename != "StatementOfApplicability" {
|
||||
return nil, fmt.Errorf("expected StatementOfApplicability node, got %s", resp.Node.Typename)
|
||||
}
|
||||
|
||||
return &resp.Node.ApplicabilityStatements, nil
|
||||
},
|
||||
)
|
||||
@@ -156,6 +160,7 @@ func NewCmdList(f *cmdutil.Factory) *cobra.Command {
|
||||
if s.Applicability {
|
||||
applicable = "Yes"
|
||||
}
|
||||
|
||||
rows = append(rows, []string{
|
||||
s.ID,
|
||||
s.Control.SectionTitle,
|
||||
|
||||
@@ -45,6 +45,7 @@ func NewCmdRemove(f *cmdutil.Factory) *cobra.Command {
|
||||
}
|
||||
|
||||
var confirmed bool
|
||||
|
||||
err := huh.NewConfirm().
|
||||
Title(fmt.Sprintf("Remove applicability statement %s?", args[0])).
|
||||
Value(&confirmed).
|
||||
@@ -52,6 +53,7 @@ func NewCmdRemove(f *cmdutil.Factory) *cobra.Command {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !confirmed {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -70,6 +70,7 @@ func NewCmdUpdate(f *cmdutil.Factory) *cobra.Command {
|
||||
if flagApplicable && flagNotApplicable {
|
||||
return fmt.Errorf("cannot set both --applicable and --not-applicable")
|
||||
}
|
||||
|
||||
if !flagApplicable && !flagNotApplicable && !cmd.Flags().Changed("justification") {
|
||||
return fmt.Errorf("at least one of --applicable, --not-applicable, or --justification is required")
|
||||
}
|
||||
@@ -118,10 +119,12 @@ func NewCmdUpdate(f *cmdutil.Factory) *cobra.Command {
|
||||
}
|
||||
|
||||
s := resp.UpdateApplicabilityStatement.ApplicabilityStatement
|
||||
|
||||
applicable := "not applicable"
|
||||
if s.Applicability {
|
||||
applicable = "applicable"
|
||||
}
|
||||
|
||||
_, _ = fmt.Fprintf(
|
||||
f.IOStreams.Out,
|
||||
"Updated statement %s: control %s (%s) marked as %s\n",
|
||||
|
||||
@@ -79,6 +79,7 @@ func NewCmdUpdate(f *cmdutil.Factory) *cobra.Command {
|
||||
if cmd.Flags().Changed("name") {
|
||||
input["name"] = flagName
|
||||
}
|
||||
|
||||
if cmd.Flags().Changed("owner") {
|
||||
if flagOwner == "" {
|
||||
input["ownerId"] = nil
|
||||
|
||||
Reference in New Issue
Block a user