github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+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 return nil 58 } 59 60 buff := new(bytes.Buffer) 61 encoder := json.NewEncoder(buff) 62 encoder.SetEscapeHTML(false) 63 encoder.SetIndent("", " ") 64 err = encoder.Encode(sanitized) 65 if err != nil { 66 fmt.Fprintf(display.ui.Out, "%s\n", string(body)) 67 } 68 69 fmt.Fprintf(display.ui.Out, "%s\n", buff.String()) 70 return nil 71 } 72 73 func (display *RequestLoggerTerminalDisplay) DisplayMessage(msg string) error { 74 fmt.Fprintf(display.ui.Out, "%s\n", msg) 75 return nil 76 } 77 78 func (display *RequestLoggerTerminalDisplay) DisplayRequestHeader(method string, uri string, httpProtocol string) error { 79 fmt.Fprintf(display.ui.Out, "%s %s %s\n", method, uri, httpProtocol) 80 return nil 81 } 82 83 func (display *RequestLoggerTerminalDisplay) DisplayResponseHeader(httpProtocol string, status string) error { 84 fmt.Fprintf(display.ui.Out, "%s %s\n", httpProtocol, status) 85 return nil 86 } 87 88 func (display *RequestLoggerTerminalDisplay) DisplayType(name string, requestDate time.Time) error { 89 text := fmt.Sprintf("%s: [%s]", name, requestDate.Format(time.RFC3339)) 90 fmt.Fprintf(display.ui.Out, "%s\n", display.ui.modifyColor(display.ui.TranslateText(text), color.New(color.Bold))) 91 return nil 92 } 93 94 func (display *RequestLoggerTerminalDisplay) HandleInternalError(err error) { 95 fmt.Fprintf(display.ui.Err, "%s\n", display.ui.TranslateText(err.Error())) 96 } 97 98 func (display *RequestLoggerTerminalDisplay) Start() error { 99 display.lock.Lock() 100 return nil 101 } 102 103 func (display *RequestLoggerTerminalDisplay) Stop() error { 104 fmt.Fprintf(display.ui.Out, "\n") 105 display.lock.Unlock() 106 return nil 107 }