Skip to content

Commit

Permalink
Use shared secret redacting
Browse files Browse the repository at this point in the history
  • Loading branch information
tothszabi committed Sep 8, 2023
1 parent ffe9345 commit 9125a56
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 19 deletions.
9 changes: 5 additions & 4 deletions cli/analytics.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ import (
"fmt"
"io"

"github.com/bitrise-io/bitrise/stepruncmd/filterwriter"
"github.com/bitrise-io/envman/models"
"github.com/bitrise-io/go-utils/v2/log"
"github.com/bitrise-io/go-utils/v2/redactwriter"
)

func redactStepInputs(environment map[string]string, inputs []models.EnvironmentItemModel, secrets []string) (map[string]string, map[string]string, error) {
Expand Down Expand Up @@ -49,12 +50,12 @@ func redactStepInputs(environment map[string]string, inputs []models.Environment
func redactWithSecrets(inputValue string, secrets []string) (string, error) {
src := bytes.NewReader([]byte(inputValue))
dstBuf := new(bytes.Buffer)
secretFilterDst := filterwriter.New(secrets, dstBuf)
redactWriterDst := redactwriter.New(secrets, dstBuf, log.NewLogger())

if _, err := io.Copy(secretFilterDst, src); err != nil {
if _, err := io.Copy(redactWriterDst, src); err != nil {
return "", fmt.Errorf("failed to redact secrets, stream copy failed: %s", err)
}
if err := secretFilterDst.Close(); err != nil {
if err := redactWriterDst.Close(); err != nil {
return "", fmt.Errorf("failed to redact secrets, closing the stream failed: %s", err)
}

Expand Down
3 changes: 2 additions & 1 deletion cli/run_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import (
"github.com/bitrise-io/go-utils/pointers"
"github.com/bitrise-io/go-utils/retry"
coreanalytics "github.com/bitrise-io/go-utils/v2/analytics"
logV2 "github.com/bitrise-io/go-utils/v2/log"
"github.com/bitrise-io/go-utils/versions"
stepmanModels "github.com/bitrise-io/stepman/models"
)
Expand Down Expand Up @@ -433,7 +434,7 @@ func (r WorkflowRunner) executeStep(
return 1, fmt.Errorf("failed to read command environment: %w", err)
}

cmd := stepruncmd.New(name, args, bitriseSourceDir, envs, stepSecrets, timeout, noOutputTimeout, stdout)
cmd := stepruncmd.New(name, args, bitriseSourceDir, envs, stepSecrets, timeout, noOutputTimeout, stdout, logV2.NewLogger())
return cmd.Run()
}

Expand Down
19 changes: 10 additions & 9 deletions stepruncmd/stdout.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,35 @@ import (
"io"

"github.com/bitrise-io/bitrise/stepruncmd/errorfinder"
"github.com/bitrise-io/bitrise/stepruncmd/filterwriter"
"github.com/bitrise-io/go-utils/v2/log"
"github.com/bitrise-io/go-utils/v2/redactwriter"
)

type StdoutWriter struct {
writer io.Writer

secretWriter *filterwriter.Writer
redactWriter *redactwriter.Writer
errorWriter *errorfinder.ErrorFinder
destWriter io.Writer
}

func NewStdoutWriter(secrets []string, dest io.Writer) StdoutWriter {
func NewStdoutWriter(secrets []string, dest io.Writer, logger log.Logger) StdoutWriter {
var outWriter io.Writer
outWriter = dest

errorWriter := errorfinder.NewErrorFinder(outWriter)
outWriter = errorWriter

var secretWriter *filterwriter.Writer
var redactWriter *redactwriter.Writer
if len(secrets) > 0 {
secretWriter = filterwriter.New(secrets, outWriter)
outWriter = secretWriter
redactWriter = redactwriter.New(secrets, outWriter, logger)
outWriter = redactWriter
}

return StdoutWriter{
writer: outWriter,

secretWriter: secretWriter,
redactWriter: redactWriter,
errorWriter: errorWriter,
destWriter: dest,
}
Expand All @@ -42,8 +43,8 @@ func (w StdoutWriter) Write(p []byte) (n int, err error) {
}

func (w StdoutWriter) Close() error {
if w.secretWriter != nil {
if err := w.secretWriter.Close(); err != nil {
if w.redactWriter != nil {
if err := w.redactWriter.Close(); err != nil {
return err
}
}
Expand Down
11 changes: 6 additions & 5 deletions stepruncmd/stepruncmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,32 +8,33 @@ import (
"os/exec"
"time"

"github.com/bitrise-io/bitrise/log"
"github.com/bitrise-io/bitrise/stepruncmd/timeoutcmd"
"github.com/bitrise-io/go-utils/v2/log"
)

type Cmd struct {
cmd timeoutcmd.Command
stdout StdoutWriter
logger log.Logger
}

func New(name string, args []string, workDir string, envs, secrets []string, timeout, noOutputTimeout time.Duration, stdout io.Writer) Cmd {
outWriter := NewStdoutWriter(secrets, stdout)
func New(name string, args []string, workDir string, envs, secrets []string, timeout, noOutputTimeout time.Duration, stdout io.Writer, logger log.Logger) Cmd {
outWriter := NewStdoutWriter(secrets, stdout, logger)

cmd := timeoutcmd.New(workDir, name, args...)
cmd.SetTimeout(timeout)
cmd.SetHangTimeout(noOutputTimeout)
cmd.SetStandardIO(os.Stdin, outWriter, outWriter)
cmd.SetEnv(append(envs, "PWD="+workDir))

return Cmd{cmd: cmd, stdout: outWriter}
return Cmd{cmd: cmd, stdout: outWriter, logger: logger}
}

func (c *Cmd) Run() (int, error) {
cmdErr := c.cmd.Start()

if err := c.stdout.Close(); err != nil {
log.Warnf("Failed to close command output writer: %s", err)
c.logger.Warnf("Failed to close command output writer: %s", err)
}

if cmdErr == nil {
Expand Down

0 comments on commit 9125a56

Please sign in to comment.