mirror of
https://github.com/trufflesecurity/trufflehog.git
synced 2024-11-10 23:24:33 +00:00
81 lines
1.9 KiB
Go
81 lines
1.9 KiB
Go
package output
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/fatih/color"
|
|
"github.com/sirupsen/logrus"
|
|
"golang.org/x/text/cases"
|
|
"golang.org/x/text/language"
|
|
|
|
"github.com/trufflesecurity/trufflehog/v3/pkg/detectors"
|
|
"github.com/trufflesecurity/trufflehog/v3/pkg/pb/source_metadatapb"
|
|
)
|
|
|
|
var (
|
|
yellowPrinter = color.New(color.FgYellow)
|
|
greenPrinter = color.New(color.FgHiGreen)
|
|
whitePrinter = color.New(color.FgWhite)
|
|
)
|
|
|
|
func PrintPlainOutput(r *detectors.ResultWithMetadata) {
|
|
out := outputFormat{
|
|
DetectorType: r.Result.DetectorType.String(),
|
|
DecoderType: r.Result.DecoderType.String(),
|
|
Verified: r.Result.Verified,
|
|
MetaData: r.SourceMetadata,
|
|
Raw: strings.TrimSpace(string(r.Result.Raw)),
|
|
}
|
|
|
|
meta, err := structToMap(out.MetaData.Data)
|
|
if err != nil {
|
|
logrus.WithError(err).Fatal("could not marshal result")
|
|
}
|
|
|
|
printer := greenPrinter
|
|
|
|
if out.Verified {
|
|
yellowPrinter.Print("Found verified result 🐷🔑\n")
|
|
} else {
|
|
printer = whitePrinter
|
|
whitePrinter.Print("Found unverified result 🐷🔑❓\n")
|
|
}
|
|
printer.Printf("Detector Type: %s\n", out.DetectorType)
|
|
printer.Printf("Decoder Type: %s\n", out.DecoderType)
|
|
printer.Printf("Raw result: %s\n", whitePrinter.Sprint(out.Raw))
|
|
|
|
var aggregateData = make(map[string]interface{})
|
|
var aggregateDataKeys []string
|
|
|
|
for _, data := range meta {
|
|
for k, v := range data {
|
|
aggregateDataKeys = append(aggregateDataKeys, k)
|
|
aggregateData[k] = v
|
|
}
|
|
}
|
|
sort.Strings(aggregateDataKeys)
|
|
for _, k := range aggregateDataKeys {
|
|
printer.Printf("%s: %v\n", cases.Title(language.AmericanEnglish).String(k), aggregateData[k])
|
|
}
|
|
fmt.Println("")
|
|
}
|
|
|
|
func structToMap(obj interface{}) (m map[string]map[string]interface{}, err error) {
|
|
data, err := json.Marshal(obj)
|
|
if err != nil {
|
|
return
|
|
}
|
|
err = json.Unmarshal(data, &m)
|
|
return
|
|
}
|
|
|
|
type outputFormat struct {
|
|
DetectorType,
|
|
DecoderType string
|
|
Verified bool
|
|
Raw string
|
|
*source_metadatapb.MetaData
|
|
}
|