github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/flag/rego_flags.go (about)

     1  package flag
     2  
     3  // e.g. config yaml:
     4  //
     5  //	rego:
     6  //	  trace: true
     7  //	  config-policy: "custom-policy/policy"
     8  //	  policy-namespaces: "user"
     9  var (
    10  	SkipPolicyUpdateFlag = Flag{
    11  		Name:       "skip-policy-update",
    12  		ConfigName: "rego.skip-policy-update",
    13  		Default:    false,
    14  		Usage:      "skip fetching rego policy updates",
    15  	}
    16  	TraceFlag = Flag{
    17  		Name:       "trace",
    18  		ConfigName: "rego.trace",
    19  		Default:    false,
    20  		Usage:      "enable more verbose trace output for custom queries",
    21  	}
    22  	ConfigPolicyFlag = Flag{
    23  		Name:       "config-policy",
    24  		ConfigName: "rego.policy",
    25  		Default:    []string{},
    26  		Usage:      "specify the paths to the Rego policy files or to the directories containing them, applying config files",
    27  		Aliases: []Alias{
    28  			{Name: "policy"},
    29  		},
    30  	}
    31  	ConfigDataFlag = Flag{
    32  		Name:       "config-data",
    33  		ConfigName: "rego.data",
    34  		Default:    []string{},
    35  		Usage:      "specify paths from which data for the Rego policies will be recursively loaded",
    36  		Aliases: []Alias{
    37  			{Name: "data"},
    38  		},
    39  	}
    40  	PolicyNamespaceFlag = Flag{
    41  		Name:       "policy-namespaces",
    42  		ConfigName: "rego.namespaces",
    43  		Default:    []string{},
    44  		Usage:      "Rego namespaces",
    45  		Aliases: []Alias{
    46  			{Name: "namespaces"},
    47  		},
    48  	}
    49  )
    50  
    51  // RegoFlagGroup composes common printer flag structs used for commands providing misconfinguration scanning.
    52  type RegoFlagGroup struct {
    53  	SkipPolicyUpdate *Flag
    54  	Trace            *Flag
    55  	PolicyPaths      *Flag
    56  	DataPaths        *Flag
    57  	PolicyNamespaces *Flag
    58  }
    59  
    60  type RegoOptions struct {
    61  	SkipPolicyUpdate bool
    62  	Trace            bool
    63  	PolicyPaths      []string
    64  	DataPaths        []string
    65  	PolicyNamespaces []string
    66  }
    67  
    68  func NewRegoFlagGroup() *RegoFlagGroup {
    69  	return &RegoFlagGroup{
    70  		SkipPolicyUpdate: &SkipPolicyUpdateFlag,
    71  		Trace:            &TraceFlag,
    72  		PolicyPaths:      &ConfigPolicyFlag,
    73  		DataPaths:        &ConfigDataFlag,
    74  		PolicyNamespaces: &PolicyNamespaceFlag,
    75  	}
    76  }
    77  
    78  func (f *RegoFlagGroup) Name() string {
    79  	return "Rego"
    80  }
    81  
    82  func (f *RegoFlagGroup) Flags() []*Flag {
    83  	return []*Flag{
    84  		f.SkipPolicyUpdate,
    85  		f.Trace,
    86  		f.PolicyPaths,
    87  		f.DataPaths,
    88  		f.PolicyNamespaces,
    89  	}
    90  }
    91  
    92  func (f *RegoFlagGroup) ToOptions() (RegoOptions, error) {
    93  	return RegoOptions{
    94  		SkipPolicyUpdate: getBool(f.SkipPolicyUpdate),
    95  		Trace:            getBool(f.Trace),
    96  		PolicyPaths:      getStringSlice(f.PolicyPaths),
    97  		DataPaths:        getStringSlice(f.DataPaths),
    98  		PolicyNamespaces: getStringSlice(f.PolicyNamespaces),
    99  	}, nil
   100  }