Skip to content

Commit c4b54da

Browse files
authored
chore: load checks from repo (#114)
Signed-off-by: Nikita Pivkin <nikita.pivkin@smartforce.io>
1 parent d574a01 commit c4b54da

File tree

3 files changed

+40
-37
lines changed

3 files changed

+40
-37
lines changed

docGen/defsec.go

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
2334
type 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

146144
func 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

docGen/defsec_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,20 @@ import (
77

88
"github.com/stretchr/testify/assert"
99
"github.com/stretchr/testify/require"
10+
11+
"github.com/aquasecurity/trivy/pkg/iac/rego"
1012
)
1113

1214
func TestLoadsAsExpected(t *testing.T) {
15+
rego.LoadAndRegister()
1316

14-
tempDir := t.TempDir()
15-
16-
generateDefsecPages("../goldens/defsec/md", tempDir)
17+
outputDir := t.TempDir()
18+
generateDefsecPages("../goldens/defsec/md", outputDir)
1719

1820
ids := []string{"avd-aws-0018"}
1921

2022
for _, id := range ids {
21-
content, err := os.ReadFile(fmt.Sprintf("%s/aws/code-build/%s.md", tempDir, id))
23+
content, err := os.ReadFile(fmt.Sprintf("%s/aws/code-build/%s.md", outputDir, id))
2224
require.NoError(t, err)
2325

2426
expected, err := os.ReadFile(fmt.Sprintf("../goldens/defsec/expected/%s.md", id))

docGen/main.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ func main() {
4040
Years = append(Years, strconv.Itoa(y))
4141
}
4242

43+
if err := registerChecks(os.DirFS("../avd-repo/trivy-policies-repo")); err != nil {
44+
fail(err)
45+
}
46+
4347
generateChainBenchPages("../avd-repo/chain-bench-repo/internal/checks", "../avd-repo/content/compliance")
4448
generateKubeBenchPages("../avd-repo/kube-bench-repo/cfg", "../avd-repo/content/compliance")
4549
generateDefsecComplianceSpecPages("../avd-repo/trivy-policies-repo/pkg/specs/compliance", "../avd-repo/content/compliance")

0 commit comments

Comments
 (0)