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  }