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  }