4
0

csv.go 976 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package report
  2. import (
  3. "encoding/csv"
  4. "io"
  5. "strconv"
  6. "strings"
  7. )
  8. type CsvReporter struct {
  9. }
  10. var _ Reporter = (*CsvReporter)(nil)
  11. func (r *CsvReporter) Write(w io.WriteCloser, findings []Finding) error {
  12. if len(findings) == 0 {
  13. return nil
  14. }
  15. cw := csv.NewWriter(w)
  16. err := cw.Write([]string{"RuleID",
  17. "Commit",
  18. "File",
  19. "SymlinkFile",
  20. "Secret",
  21. "Match",
  22. "StartLine",
  23. "EndLine",
  24. "StartColumn",
  25. "EndColumn",
  26. "Author",
  27. "Message",
  28. "Date",
  29. "Email",
  30. "Fingerprint",
  31. "Tags",
  32. })
  33. if err != nil {
  34. return err
  35. }
  36. for _, f := range findings {
  37. err = cw.Write([]string{f.RuleID,
  38. f.Commit,
  39. f.File,
  40. f.SymlinkFile,
  41. f.Secret,
  42. f.Match,
  43. strconv.Itoa(f.StartLine),
  44. strconv.Itoa(f.EndLine),
  45. strconv.Itoa(f.StartColumn),
  46. strconv.Itoa(f.EndColumn),
  47. f.Author,
  48. f.Message,
  49. f.Date,
  50. f.Email,
  51. f.Fingerprint,
  52. strings.Join(f.Tags, " "),
  53. })
  54. if err != nil {
  55. return err
  56. }
  57. }
  58. cw.Flush()
  59. return cw.Error()
  60. }