From e3f398d515c540b1e25fcd883eae55c61fabac0e Mon Sep 17 00:00:00 2001 From: gotbadger Date: Fri, 25 Aug 2023 16:10:40 +0100 Subject: [PATCH] fix: improve output from show --- pkg/commands/ignore.go | 29 ++++++++++++---------- pkg/util/ignore/ignore.go | 52 +++++++++++++++++++++++++-------------- 2 files changed, 50 insertions(+), 31 deletions(-) diff --git a/pkg/commands/ignore.go b/pkg/commands/ignore.go index 613666e43..fa8b97925 100644 --- a/pkg/commands/ignore.go +++ b/pkg/commands/ignore.go @@ -68,16 +68,15 @@ $ bearer ignore show `, cmd.Printf("Issue loading ignored fingerprints from bearer.ignore file: %s", err) return nil } - - selectedIgnoredFingerprint, ok := ignoredFingerprints[args[0]] + fingerprintId := args[0] + selectedIgnoredFingerprint, ok := ignoredFingerprints[fingerprintId] if !ok { - cmd.Printf("Ignored fingerprint '%s' was not found in bearer.ignore file\n", args[0]) + cmd.Printf("Ignored fingerprint '%s' was not found in bearer.ignore file\n", fingerprintId) return nil } - - cmd.Printf("\nIgnored At: %s\nAuthor: %s\n", selectedIgnoredFingerprint.IgnoredAt, selectedIgnoredFingerprint.Author) - cmd.Printf("Comment: %s\n\n", selectedIgnoredFingerprint.Comment) - + cmd.Print("\n") + cmd.Print(ignore.DisplayIgnoredEntryTextString(fingerprintId, selectedIgnoredFingerprint)) + cmd.Print("\n") return nil }, SilenceErrors: false, @@ -107,24 +106,28 @@ $ bearer ignore add --author Mish --comment "Possible false positi if err != nil { return fmt.Errorf("flag error: %s", err) } - + fingerprintId := args[0] + fingerprintEntry := ignore.IgnoredFingerprint{ + Author: options.IgnoreAddOptions.Author, + Comment: options.IgnoreAddOptions.Comment, + } fingerprintsToIgnore := map[string]ignore.IgnoredFingerprint{ - args[0]: { - Author: options.IgnoreAddOptions.Author, - Comment: options.IgnoreAddOptions.Comment, - }, + fingerprintId: fingerprintEntry, } if err = ignore.AddToIgnoreFile(fingerprintsToIgnore, options.IgnoreAddOptions.Force); err != nil { target := &ignore.DuplicateIgnoredFingerprintError{} if errors.As(err, &target) { // handle expected error (duplicate entry in bearer.ignore) - cmd.Printf("%s\n", err.Error()) + cmd.Printf("Error: %s\n", err.Error()) return nil } return err } + cmd.Print("fingerprint added to bearer.ignore:\n\n") + cmd.Print(ignore.DisplayIgnoredEntryTextString(fingerprintId, fingerprintEntry)) + cmd.Print("\n") return nil }, SilenceErrors: false, diff --git a/pkg/util/ignore/ignore.go b/pkg/util/ignore/ignore.go index 248039c6b..f0e0946d7 100644 --- a/pkg/util/ignore/ignore.go +++ b/pkg/util/ignore/ignore.go @@ -6,6 +6,8 @@ import ( "os" "path/filepath" "time" + + "github.com/fatih/color" ) type IgnoredFingerprint struct { @@ -22,6 +24,34 @@ func (f *DuplicateIgnoredFingerprintError) Error() string { return f.Err.Error() } +var bold = color.New(color.Bold).SprintFunc() +var morePrefix = color.HiBlackString("├─ ") +var lastPrefix = color.HiBlackString("└─ ") + +func DisplayIgnoredEntryTextString(fingerprintId string, entry IgnoredFingerprint) string { + prefix := morePrefix + result := fmt.Sprintf(bold(color.HiBlueString("%s \n")), fingerprintId) + + if entry.Author == "" && entry.Comment == "" { + prefix = lastPrefix + } + result += fmt.Sprintf("%sIgnored At: %s\n", prefix, bold(entry.IgnoredAt)) + + if entry.Author != "" { + if entry.Comment == "" { + prefix = lastPrefix + } + + result += fmt.Sprintf("%sAuthor: %s\n", prefix, bold(entry.Author)) + } + + if entry.Comment != "" { + result += fmt.Sprintf("%sComment: %s\n", lastPrefix, bold(entry.Comment)) + } + + return result +} + func GetIgnoredFingerprints(target *string) (ignoredFingerprints map[string]IgnoredFingerprint, err error) { fingerprints, err := readIgnoreFile(target) if err != nil { @@ -43,11 +73,11 @@ func AddToIgnoreFile(fingerprintsToIgnore map[string]IgnoredFingerprint, force b for key, value := range fingerprintsToIgnore { if !force { - if existingIgnoredFingerprint, ok := existingIgnoredFingerprints[key]; ok { + if _, ok := existingIgnoredFingerprints[key]; ok { error := fmt.Errorf( - "fingerprint %s already exists in bearer.ignore file%s. To overwrite this entry, use --force", + "fingerprint '%s' already exists in bearer.ignore file. To view this entry run:\n\n$ bearer ignore show %s\n\nTo overwrite this entry, use --force", + key, key, - fingerprintDetailsStr(existingIgnoredFingerprint), ) return &DuplicateIgnoredFingerprintError{ Err: error, @@ -59,7 +89,7 @@ func AddToIgnoreFile(fingerprintsToIgnore map[string]IgnoredFingerprint, force b existingIgnoredFingerprints[key] = value } - data, err := json.Marshal(existingIgnoredFingerprints) + data, err := json.MarshalIndent(existingIgnoredFingerprints, "", " ") if err != nil { // failed to marshall data return err @@ -92,17 +122,3 @@ func readIgnoreFile(target *string) (payload map[string]IgnoredFingerprint, err err = json.Unmarshal(content, &payload) return payload, err } - -func fingerprintDetailsStr(ignoredFingerprint IgnoredFingerprint) (fingerprintDetailsStr string) { - if len(ignoredFingerprint.Author) > 0 { - fingerprintDetailsStr += fmt.Sprintf(" with author %s", ignoredFingerprint.Author) - if len(ignoredFingerprint.Comment) > 0 { - fingerprintDetailsStr += fmt.Sprintf("and comment %s", ignoredFingerprint.Comment) - } - } else { - if len(ignoredFingerprint.Comment) > 0 { - fingerprintDetailsStr += fmt.Sprintf(" with comment %s", ignoredFingerprint.Comment) - } - } - return fingerprintDetailsStr -}