@@ -11,15 +11,26 @@ import (
1111 "strings"
1212 "text/template"
1313
14+ "gopkg.in/yaml.v3"
15+
1416 "github.com/aquasecurity/avd-generator/menu"
1517 "github.com/aquasecurity/avd-generator/util"
1618 "github.com/aquasecurity/trivy/pkg/iac/framework"
1719 "github.com/aquasecurity/trivy/pkg/iac/rego"
1820 "github.com/aquasecurity/trivy/pkg/iac/rules"
1921 "github.com/aquasecurity/trivy/pkg/iac/scan"
20- "gopkg.in/yaml.v3"
2122)
2223
24+ func registerChecks (fsys fs.FS ) error {
25+ rules .Reset ()
26+ modules , err := rego .LoadPoliciesFromDirs (fsys , "checks" , "lib" )
27+ if err != nil {
28+ return fmt .Errorf ("load checks: %w" , err )
29+ }
30+ rego .RegisterRegoRules (modules )
31+ return nil
32+ }
33+
2334type DefsecComplianceSpec struct {
2435 Spec struct {
2536 ID string `yaml:"id"`
@@ -42,26 +53,12 @@ type DefsecComplianceSpec struct {
4253 } `yaml:"spec"`
4354}
4455
45- var funcMap = template.FuncMap {
46- "toLower" : strings .ToLower ,
47- "toUpper" : strings .ToUpper ,
48- "toTitle" : strings .Title ,
49- "getSummary" : getSummary ,
50- }
51-
52- var registeredRulesSummaries = make (map [string ]string )
53-
54- func init () {
55- rules .Reset ()
56-
57- rego .LoadAndRegister ()
56+ func generateDefsecComplianceSpecPages (specDir , contentDir string ) {
5857
58+ ruleSummaries := make (map [string ]string )
5959 for _ , rule := range rules .GetRegistered (framework .ALL ) {
60- registeredRulesSummaries [rule .GetRule ().AVDID ] = rule .GetRule ().Summary
60+ ruleSummaries [rule .GetRule ().AVDID ] = rule .GetRule ().Summary
6161 }
62- }
63-
64- func generateDefsecComplianceSpecPages (specDir , contentDir string ) {
6562
6663 if err := filepath .Walk (specDir , func (path string , info fs.FileInfo , err error ) error {
6764 if err != nil {
@@ -92,27 +89,16 @@ func generateDefsecComplianceSpecPages(specDir, contentDir string) {
9289 []menu.BreadCrumb {{Name : "Compliance" , Url : "/compliance" },
9390 {Name : strings .Title (spec .Spec .Category ), Url : fmt .Sprintf ("/compliance/%s" , spec .Spec .Category )}}, spec .Spec .Category , true )
9491
95- return generateDefsecComplianceSpecPage (spec , contentDir )
92+ return generateDefsecComplianceSpecPage (spec , contentDir , ruleSummaries )
9693
9794 }); err != nil {
9895 fmt .Println (err )
9996 }
10097
10198}
10299
103- func getSummary (id string ) string {
104- if summary , ok := registeredRulesSummaries [id ]; ok {
105- return fmt .Sprintf (" - %s" , summary )
106- }
107-
108- return ""
109-
110- }
111-
112- func generateDefsecComplianceSpecPage (spec DefsecComplianceSpec , contentDir string ) error {
113-
100+ func generateDefsecComplianceSpecPage (spec DefsecComplianceSpec , contentDir string , ruleSummaries map [string ]string ) error {
114101 for _ , control := range spec .Spec .Controls {
115-
116102 outputFilePath := filepath .Join (contentDir , spec .Spec .Category , fmt .Sprintf ("%s-%s" , spec .Spec .Title , spec .Spec .Version ), fmt .Sprintf ("%s.md" , control .ID ))
117103
118104 if err := os .MkdirAll (filepath .Dir (outputFilePath ), 0755 ); err != nil {
@@ -124,7 +110,19 @@ func generateDefsecComplianceSpecPage(spec DefsecComplianceSpec, contentDir stri
124110 return err
125111 }
126112
127- t := template .Must (template .New ("defsecPost" ).Funcs (funcMap ).Parse (defsecComplianceTemplate ))
113+ funcs := template.FuncMap {
114+ "toLower" : strings .ToLower ,
115+ "toUpper" : strings .ToUpper ,
116+ "toTitle" : strings .Title ,
117+ "getSummary" : func (id string ) string {
118+ if summary , ok := ruleSummaries [id ]; ok {
119+ return fmt .Sprintf (" - %s" , summary )
120+ }
121+ return ""
122+ },
123+ }
124+
125+ t := template .Must (template .New ("defsecPost" ).Funcs (funcs ).Parse (defsecComplianceTemplate ))
128126 if err := t .Execute (outputFile , map [string ]interface {}{
129127 "ID" : spec .Spec .ID ,
130128 "Version" : spec .Spec .Version ,
@@ -145,7 +143,6 @@ func generateDefsecComplianceSpecPage(spec DefsecComplianceSpec, contentDir stri
145143
146144func generateDefsecPages (remediationDir , contentDir string ) {
147145 for _ , r := range rules .GetRegistered (framework .ALL ) {
148-
149146 avdId := r .GetRule ().AVDID
150147 topLevelID := strings .ToLower (r .GetRule ().Provider .ConstName ())
151148 branchID := r .GetRule ().Service
0 commit comments