github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/util/ui/request_logger_terminal_display.go (about) 1 package ui 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "regexp" 8 "sync" 9 "time" 10 11 "github.com/fatih/color" 12 ) 13 14 type RequestLoggerTerminalDisplay struct { 15 ui *UI 16 lock *sync.Mutex 17 dumpSanitizer *regexp.Regexp 18 } 19 20 func newRequestLoggerTerminalDisplay(ui *UI, lock *sync.Mutex) *RequestLoggerTerminalDisplay { 21 return &RequestLoggerTerminalDisplay{ 22 ui: ui, 23 lock: lock, 24 dumpSanitizer: regexp.MustCompile(tokenRegexp), 25 } 26 } 27 28 func (display *RequestLoggerTerminalDisplay) DisplayBody(_ []byte) error { 29 fmt.Fprintf(display.ui.Out, "%s\n", RedactedValue) 30 return nil 31 } 32 33 func (display *RequestLoggerTerminalDisplay) DisplayDump(dump string) error { 34 sanitized := display.dumpSanitizer.ReplaceAllString(dump, RedactedValue) 35 fmt.Fprintf(display.ui.Out, "%s\n", sanitized) 36 return nil 37 } 38 39 func (display *RequestLoggerTerminalDisplay) DisplayHeader(name string, value string) error { 40 fmt.Fprintf(display.ui.Out, "%s: %s\n", display.ui.TranslateText(name), value) 41 return nil 42 } 43 44 func (display *RequestLoggerTerminalDisplay) DisplayHost(name string) error { 45 fmt.Fprintf(display.ui.Out, "%s: %s\n", display.ui.TranslateText("Host"), name) 46 return nil 47 } 48 49 func (display *RequestLoggerTerminalDisplay) DisplayJSONBody(body []byte) error { 50 if body == nil || len(body) == 0 { 51 return nil 52 } 53 54 sanitized, err := SanitizeJSON(body) 55 if err != nil { 56 fmt.Fprintf(display.ui.Out, "%s\n", string(body)) 57 } 58 59 buff := new(bytes.Buffer) 60 encoder := json.NewEncoder(buff) 61 encoder.SetEscapeHTML(false) 62 encoder.SetIndent("", " ") 63 err = encoder.Encode(sanitized) 64 if err != nil { 65 fmt.Fprintf(display.ui.Out, "%s\n", string(body)) 66 } 67 68 fmt.Fprintf(display.ui.Out, "%s\n", buff.String()) 69 return nil 70 } 71 72 func (display *RequestLoggerTerminalDisplay) DisplayRequestHeader(method string, uri string, httpProtocol string) error { 73 fmt.Fprintf(display.ui.Out, "%s %s %s\n", method, uri, httpProtocol) 74 return nil 75 } 76 77 func (display *RequestLoggerTerminalDisplay) DisplayResponseHeader(httpProtocol string, status string) error { 78 fmt.Fprintf(display.ui.Out, "%s %s\n", httpProtocol, status) 79 return nil 80 } 81 82 func (display *RequestLoggerTerminalDisplay) DisplayType(name string, requestDate time.Time) error { 83 text := fmt.Sprintf("%s: [%s]", name, requestDate.Format(time.RFC3339)) 84 fmt.Fprintf(display.ui.Out, "%s\n", display.ui.modifyColor(display.ui.TranslateText(text), color.New(color.Bold))) 85 return nil 86 } 87 88 func (display *RequestLoggerTerminalDisplay) HandleInternalError(err error) { 89 fmt.Fprintf(display.ui.Err, "%s\n", display.ui.TranslateText(err.Error())) 90 } 91 92 func (display *RequestLoggerTerminalDisplay) Start() error { 93 display.lock.Lock() 94 return nil 95 } 96 97 func (display *RequestLoggerTerminalDisplay) Stop() error { 98 fmt.Fprintf(display.ui.Out, "\n") 99 display.lock.Unlock() 100 return nil 101 }