fix(secretstore): disable loader during interactive bitwarden prompts
This commit is contained in:
parent
6e80d3418e
commit
017005b0b1
2 changed files with 35 additions and 4 deletions
|
|
@ -42,6 +42,7 @@ type bitwardenInteractiveRunner func(
|
||||||
|
|
||||||
var runBitwardenCLI bitwardenRunner = executeBitwardenCLI
|
var runBitwardenCLI bitwardenRunner = executeBitwardenCLI
|
||||||
var runBitwardenInteractiveCLI bitwardenInteractiveRunner = executeBitwardenCLIInteractive
|
var runBitwardenInteractiveCLI bitwardenInteractiveRunner = executeBitwardenCLIInteractive
|
||||||
|
var startBitwardenLoaderFunc = startBitwardenLoader
|
||||||
var bitwardenLoaderActive atomic.Bool
|
var bitwardenLoaderActive atomic.Bool
|
||||||
var bitwardenDebugOutput io.Writer = os.Stderr
|
var bitwardenDebugOutput io.Writer = os.Stderr
|
||||||
|
|
||||||
|
|
@ -638,7 +639,7 @@ func sanitizeBitwardenDebugArgs(args []string) []string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func executeBitwardenCLI(command string, stdin []byte, args ...string) ([]byte, error) {
|
func executeBitwardenCLI(command string, stdin []byte, args ...string) ([]byte, error) {
|
||||||
stopLoader := startBitwardenLoader()
|
stopLoader := startBitwardenLoaderFunc()
|
||||||
defer stopLoader()
|
defer stopLoader()
|
||||||
|
|
||||||
cmd := exec.Command(command, args...)
|
cmd := exec.Command(command, args...)
|
||||||
|
|
@ -664,9 +665,6 @@ func executeBitwardenCLIInteractive(
|
||||||
stdout, stderr io.Writer,
|
stdout, stderr io.Writer,
|
||||||
args ...string,
|
args ...string,
|
||||||
) ([]byte, error) {
|
) ([]byte, error) {
|
||||||
stopLoader := startBitwardenLoader()
|
|
||||||
defer stopLoader()
|
|
||||||
|
|
||||||
cmd := exec.Command(command, args...)
|
cmd := exec.Command(command, args...)
|
||||||
if stdin != nil {
|
if stdin != nil {
|
||||||
cmd.Stdin = stdin
|
cmd.Stdin = stdin
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
|
@ -484,6 +485,28 @@ func TestBitwardenLoaderFrameMovesAndWrapsTheWave(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestExecuteBitwardenCLIInteractiveSkipsLoader(t *testing.T) {
|
||||||
|
loaderStartCount := 0
|
||||||
|
withBitwardenLoaderStarter(t, func() func() {
|
||||||
|
loaderStartCount++
|
||||||
|
return func() {}
|
||||||
|
})
|
||||||
|
|
||||||
|
_, err := executeBitwardenCLIInteractive(
|
||||||
|
os.Args[0],
|
||||||
|
nil,
|
||||||
|
io.Discard,
|
||||||
|
io.Discard,
|
||||||
|
"-test.run=^$",
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("executeBitwardenCLIInteractive returned error: %v", err)
|
||||||
|
}
|
||||||
|
if loaderStartCount != 0 {
|
||||||
|
t.Fatalf("loader start count = %d, want 0 for interactive command", loaderStartCount)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var ansiControlSequencePattern = regexp.MustCompile(`\x1b\[[0-9;]*[A-Za-z]`)
|
var ansiControlSequencePattern = regexp.MustCompile(`\x1b\[[0-9;]*[A-Za-z]`)
|
||||||
|
|
||||||
func stripANSIControlSequences(value string) string {
|
func stripANSIControlSequences(value string) string {
|
||||||
|
|
@ -552,6 +575,16 @@ func withBitwardenDebugOutput(t *testing.T, writer io.Writer) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func withBitwardenLoaderStarter(t *testing.T, starter func() func()) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
|
previous := startBitwardenLoaderFunc
|
||||||
|
startBitwardenLoaderFunc = starter
|
||||||
|
t.Cleanup(func() {
|
||||||
|
startBitwardenLoaderFunc = previous
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
type fakeBitwardenCLI struct {
|
type fakeBitwardenCLI struct {
|
||||||
command string
|
command string
|
||||||
itemsByID map[string]fakeBitwardenItem
|
itemsByID map[string]fakeBitwardenItem
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue