gosec/report/formatter.go

85 lines
2.6 KiB
Go
Raw Normal View History

// (c) Copyright 2016 Hewlett Packard Enterprise Development LP
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package report
import (
"github.com/securego/gosec/v2"
"github.com/securego/gosec/v2/report/core"
"github.com/securego/gosec/v2/report/csv"
"github.com/securego/gosec/v2/report/golint"
"github.com/securego/gosec/v2/report/html"
"github.com/securego/gosec/v2/report/json"
"github.com/securego/gosec/v2/report/junit"
"github.com/securego/gosec/v2/report/sarif"
"github.com/securego/gosec/v2/report/sonar"
"github.com/securego/gosec/v2/report/text"
"github.com/securego/gosec/v2/report/yaml"
"io"
)
// Format enumerates the output format for reported issues
type Format int
const (
// ReportText is the default format that writes to stdout
ReportText Format = iota // Plain text format
// ReportJSON set the output format to json
ReportJSON // Json format
// ReportCSV set the output format to csv
ReportCSV // CSV format
// ReportJUnitXML set the output format to junit xml
ReportJUnitXML // JUnit XML format
// ReportSARIF set the output format to SARIF
ReportSARIF // SARIF format
)
// CreateReport generates a report based for the supplied issues and metrics given
// the specified format. The formats currently accepted are: json, yaml, csv, junit-xml, html, sonarqube, golint and text.
func CreateReport(w io.Writer, format string, enableColor bool, rootPaths []string, issues []*gosec.Issue, metrics *gosec.Metrics, errors map[string][]gosec.Error) error {
data := &core.ReportInfo{
Errors: errors,
Issues: issues,
Stats: metrics,
}
var err error
switch format {
case "json":
err = json.WriteReport(w, data)
case "yaml":
err = yaml.WriteReport(w, data)
case "csv":
err = csv.WriteReport(w, data)
case "junit-xml":
err = junit.WriteReport(w, data)
case "html":
err = html.WriteReport(w, data)
case "text":
err = text.WriteReport(w, data, enableColor)
case "sonarqube":
err = sonar.WriteReport(w, data, rootPaths)
case "golint":
err = golint.WriteReport(w, data)
case "sarif":
err = sarif.WriteReport(w, data, rootPaths)
default:
err = text.WriteReport(w, data, enableColor)
}
return err
}