internal/utils/debug.go (27 lines of code) (raw):
package utils
import (
"bytes"
"encoding/json"
"strings"
)
// PrettyPrintJSONLines iterates through a []byte line-by-line,
// transforming any lines that are complete json into pretty-printed json.
func PrettyPrintJSONLines(b []byte) string {
parts := strings.Split(string(b), "\n")
for i, p := range parts {
if b := []byte(p); json.Valid(b) {
var out bytes.Buffer
if err := json.Indent(&out, b, "", " "); err != nil {
continue
}
parts[i] = out.String()
}
// Mask Authorization header value
if strings.Contains(strings.ToLower(p), "authorization:") {
kv := strings.Split(p, ": ")
if len(kv) != 2 {
continue
}
kv[1] = strings.Repeat("*", len(kv[1]))
parts[i] = strings.Join(kv, ": ")
}
}
return strings.Join(parts, "\n")
}