diff --git a/README.md b/README.md index 986564b..49c9bda 100644 --- a/README.md +++ b/README.md @@ -91,9 +91,11 @@ plugins: - "AWS_VPC_004" ``` + + ## AWS - 51 Checks -### ACM +### AWS Certificate Manager - AWS_ACM_001 ACM Valid - AWS_ACM_002 Certificate Expires in 90 Days - AWS_ACM_003 ACM In Use @@ -178,6 +180,7 @@ plugins: - AWS_VPC_005 At least 2 subnets - AWS_VPC_006 Subnets in different zone + ## How to add a new test ? diff --git a/internal/report/parser.go b/internal/report/parser.go index e9c31be..15f0668 100644 --- a/internal/report/parser.go +++ b/internal/report/parser.go @@ -3,8 +3,10 @@ package report import ( "fmt" "io/ioutil" + "regexp" "strings" + "github.com/stangirard/yatas/internal/helpers" "github.com/stangirard/yatas/internal/results" "gopkg.in/yaml.v3" ) @@ -19,11 +21,30 @@ func parseReportYaml(filename string) ([]results.Tests, error) { return report, err } -func GenerateReadme(filename string) error { - report, err := parseReportYaml(filename) +func WriteReadme(readmeFile string, resultFile string) error { + // Open the readme File + file, err := helpers.ReadFile(readmeFile) if err != nil { return err } + readme := GenerateReadme(resultFile) + + re := regexp.MustCompile("(?s)(?:)(.*)(?:)") + s := re.ReplaceAllString(string(file), fmt.Sprintf("\n%s\n", readme)) + err = ioutil.WriteFile(readmeFile, []byte(s), 0644) + if err != nil { + return err + } + return nil + +} + +func GenerateReadme(filename string) string { + report, err := parseReportYaml(filename) + readme := "" + if err != nil { + panic(err) + } splitFirst := "" splitSecond := "" splitFirstMap := make(map[string]int) @@ -36,23 +57,23 @@ func GenerateReadme(filename string) error { split := strings.Split(check.Id, "_") if split[0] != splitFirst { splitFirst = split[0] - fmt.Printf("\n## %s - %d Checks\n", split[0], splitFirstMap[split[0]]) + readme += fmt.Sprintf("\n## %s - %d Checks\n", split[0], splitFirstMap[split[0]]) } if split[1] != splitSecond { splitSecond = split[1] // If split is in fullName map then use fullName as name if fullName, ok := fullName[split[1]]; ok { - fmt.Printf("\n### %s\n", fullName) + readme += fmt.Sprintf("\n### %s\n", fullName) } else { - fmt.Printf("\n### %s\n", split[1]) + readme += fmt.Sprintf("\n### %s\n", split[1]) } } - fmt.Printf("- %s %s\n", check.Id, check.Name) + readme += fmt.Sprintf("- %s %s\n", check.Id, check.Name) } break } - return nil + return readme } var fullName = map[string]string{ @@ -73,4 +94,5 @@ var fullName = map[string]string{ "ELB": "LoadBalancer", "GDT": "GuardDuty", "SHU": "SecurityHub", + "ACM": "AWS Certificate Manager", } diff --git a/internal/report/parser_test.go b/internal/report/parser_test.go index 612baab..ffd00fd 100644 --- a/internal/report/parser_test.go +++ b/internal/report/parser_test.go @@ -37,10 +37,7 @@ func TestGenerateReadme(t *testing.T) { old := os.Stdout r, w, _ := os.Pipe() os.Stdout = w - err := GenerateReadme("../testdata/results_data.yaml") - if err != nil { - t.Error(err) - } + readme := GenerateReadme("../testdata/results_data.yaml") w.Close() os.Stdout = old @@ -53,9 +50,9 @@ func TestGenerateReadme(t *testing.T) { // Replace all \n and space with nothing in data and out variables data = []byte(strings.Replace(string(data), "\n", "", -1)) data = []byte(strings.Replace(string(data), " ", "", -1)) - out = []byte(strings.Replace(string(out), "\n", "", -1)) - out = []byte(strings.Replace(string(out), " ", "", -1)) - if string(out) != string(data) { + readme = strings.Replace(readme, "\n", "", -1) + readme = strings.Replace(readme, " ", "", -1) + if string(data) != string(readme) { t.Error("Expected:\n", string(data), "\nGot:\n", string(out)) } diff --git a/main.go b/main.go index 22e540d..d64ad83 100644 --- a/main.go +++ b/main.go @@ -26,7 +26,7 @@ func run() error { flag.Parse() if *generateReadme { - return report.GenerateReadme("results.yaml") + return report.WriteReadme("README.md", "results.yaml") } if err := cmd.Execute(); err != nil { return err