gopkg.in/mitchellh/packer.v1@v1.3.2/packer/logs.go (about)

     1  package packer
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"sync"
     7  )
     8  
     9  type secretFilter struct {
    10  	s map[string]struct{}
    11  	m sync.Mutex
    12  	w io.Writer
    13  }
    14  
    15  func (l *secretFilter) Set(secrets ...string) {
    16  	l.m.Lock()
    17  	defer l.m.Unlock()
    18  	for _, s := range secrets {
    19  		l.s[s] = struct{}{}
    20  	}
    21  }
    22  
    23  func (l *secretFilter) SetOutput(output io.Writer) {
    24  	l.m.Lock()
    25  	defer l.m.Unlock()
    26  	l.w = output
    27  }
    28  
    29  func (l *secretFilter) Write(p []byte) (n int, err error) {
    30  	for s := range l.s {
    31  		if s != "" {
    32  			p = bytes.Replace(p, []byte(s), []byte("<sensitive>"), -1)
    33  		}
    34  	}
    35  	return l.w.Write(p)
    36  }
    37  
    38  func (l *secretFilter) get() (s []string) {
    39  	l.m.Lock()
    40  	defer l.m.Unlock()
    41  	for k := range l.s {
    42  		s = append(s, k)
    43  	}
    44  	return
    45  }
    46  
    47  var LogSecretFilter secretFilter
    48  
    49  func init() {
    50  	LogSecretFilter.s = make(map[string]struct{})
    51  }