lockbox

password manager
Log | Files | Refs | README | LICENSE

commit cd5455500c103ca61b9a8a95c8b75bfb22e0eb04
parent 9281c9fe3fc2fef8e87f929c7767bb46809c1245
Author: Sean Enck <sean@ttypty.com>
Date:   Fri, 31 Mar 2023 18:57:08 -0400

rekey takes arguments

Diffstat:
Mcmd/main.go | 11++++-------
Minternal/app/rekey.go | 8++++++--
Minternal/app/rekey_test.go | 31+++++++++++++++++++++----------
Minternal/inputs/env.go | 2+-
Minternal/inputs/env_test.go | 4++--
5 files changed, 34 insertions(+), 22 deletions(-)

diff --git a/cmd/main.go b/cmd/main.go @@ -65,13 +65,11 @@ func run() error { } switch command { case cli.ReKeyCommand: - if p.Confirm("proceed with rekey") { - keyer, err := app.NewDefaultKeyer() - if err != nil { - return err - } - return app.ReKey(p.Args(), p.Writer(), keyer) + keyer, err := app.NewDefaultKeyer() + if err != nil { + return err } + return app.ReKey(p, keyer) case cli.ListCommand: return app.List(p) case cli.MoveCommand: @@ -103,7 +101,6 @@ func run() error { default: return fmt.Errorf("unknown command: %s", command) } - return nil } func clearClipboard() error { diff --git a/internal/app/rekey.go b/internal/app/rekey.go @@ -4,7 +4,6 @@ import ( "encoding/json" "errors" "fmt" - "io" "os" "os/exec" "strings" @@ -78,15 +77,20 @@ func (r DefaultKeyer) Insert(entry ReKeyEntry) error { } // ReKey handles entry rekeying -func ReKey(args []string, writer io.Writer, r Keyer) error { +func ReKey(cmd CommandOptions, r Keyer) error { + args := cmd.Args() env, err := inputs.GetReKey(args) if err != nil { return err } + if !cmd.Confirm("proceed with rekey") { + return nil + } entries, err := r.JSON() if err != nil { return err } + writer := cmd.Writer() for path, entry := range entries { if _, err := fmt.Fprintf(writer, "rekeying: %s\n", path); err != nil { return err diff --git a/internal/app/rekey_test.go b/internal/app/rekey_test.go @@ -42,36 +42,46 @@ func (m *mockKeyer) Insert(entry app.ReKeyEntry) error { } func TestErrors(t *testing.T) { - var buf bytes.Buffer + cmd := &mockCommand{} + cmd.confirm = false + cmd.buf = bytes.Buffer{} m := &mockKeyer{} + cmd.args = []string{"-store", "store", "-key", "abc"} + if err := app.ReKey(cmd, m); err != nil { + t.Errorf("invalid error: %v", err) + } + cmd.confirm = true m.err = errors.New("invalid call") - if err := app.ReKey([]string{"-store", "store", "-key", "abc"}, &buf, m); err == nil || err.Error() != "invalid call" { + if err := app.ReKey(cmd, m); err == nil || err.Error() != "invalid call" { t.Errorf("invalid error: %v", err) } m.err = nil m.items = map[string]backend.JSON{"test": {ModTime: ""}} - if err := app.ReKey([]string{"-store", "store", "-key", "abc"}, &buf, m); err == nil || err.Error() != "did not read modtime" { + if err := app.ReKey(cmd, m); err == nil || err.Error() != "did not read modtime" { t.Errorf("invalid error: %v", err) } m.items = map[string]backend.JSON{"test1": {ModTime: "2"}} - if err := app.ReKey([]string{"-store", "store", "-key", "abc"}, &buf, m); err == nil || err.Error() != "no data" { + if err := app.ReKey(cmd, m); err == nil || err.Error() != "no data" { t.Errorf("invalid error: %v", err) } m.data = make(map[string][]byte) m.data["test1"] = []byte{1} m.data["error"] = []byte{2} m.items = map[string]backend.JSON{"error": {ModTime: "2"}} - if err := app.ReKey([]string{"-store", "store", "-key", "abc"}, &buf, m); err == nil || err.Error() != "bad insert" { + if err := app.ReKey(cmd, m); err == nil || err.Error() != "bad insert" { t.Errorf("invalid error: %v", err) } } func TestReKey(t *testing.T) { - var buf bytes.Buffer - if err := app.ReKey([]string{"-store", "store", "-key", "abc"}, &buf, &mockKeyer{}); err != nil { + cmd := &mockCommand{} + cmd.confirm = true + cmd.buf = bytes.Buffer{} + cmd.args = []string{"-store", "store", "-key", "abc"} + if err := app.ReKey(cmd, &mockKeyer{}); err != nil { t.Errorf("invalid error: %v", err) } - if buf.String() != "" { + if cmd.buf.String() != "" { t.Error("no data") } m := &mockKeyer{} @@ -82,10 +92,11 @@ func TestReKey(t *testing.T) { m.data = make(map[string][]byte) m.data["test1"] = []byte{1} m.data["test2"] = []byte{2} - if err := app.ReKey([]string{"-store", "store", "-key", "abc"}, &buf, m); err != nil { + cmd.buf = bytes.Buffer{} + if err := app.ReKey(cmd, m); err != nil { t.Errorf("invalid error: %v", err) } - if buf.String() == "" { + if cmd.buf.String() == "" { t.Error("invalid data") } if m.rekeys != 2 { diff --git a/internal/inputs/env.go b/internal/inputs/env.go @@ -114,7 +114,7 @@ func GetReKey(args []string) ([]string, error) { } sort.Strings(out) if !hasStore || (!hasKey && !hasKeyFile) { - return nil, fmt.Errorf("missing required environment variables for rekey: %s", strings.Join(out, " ")) + return nil, fmt.Errorf("missing required arguments for rekey: %s", strings.Join(out, " ")) } return out, nil } diff --git a/internal/inputs/env_test.go b/internal/inputs/env_test.go @@ -119,11 +119,11 @@ func TestListVariables(t *testing.T) { func TestReKey(t *testing.T) { _, err := inputs.GetReKey([]string{}) - if err == nil || err.Error() != "missing required environment variables for rekey: LOCKBOX_KEY= LOCKBOX_KEYFILE= LOCKBOX_KEYMODE= LOCKBOX_STORE=" { + if err == nil || err.Error() != "missing required arguments for rekey: LOCKBOX_KEY= LOCKBOX_KEYFILE= LOCKBOX_KEYMODE= LOCKBOX_STORE=" { t.Errorf("failed: %v", err) } _, err = inputs.GetReKey([]string{"-store", "abc"}) - if err == nil || err.Error() != "missing required environment variables for rekey: LOCKBOX_KEY= LOCKBOX_KEYFILE= LOCKBOX_KEYMODE= LOCKBOX_STORE=abc" { + if err == nil || err.Error() != "missing required arguments for rekey: LOCKBOX_KEY= LOCKBOX_KEYFILE= LOCKBOX_KEYMODE= LOCKBOX_STORE=abc" { t.Errorf("failed: %v", err) } out, err := inputs.GetReKey([]string{"-store", "abc", "-key", "aaa"})