commit cd5455500c103ca61b9a8a95c8b75bfb22e0eb04
parent 9281c9fe3fc2fef8e87f929c7767bb46809c1245
Author: Sean Enck <sean@ttypty.com>
Date: Fri, 31 Mar 2023 18:57:08 -0400
rekey takes arguments
Diffstat:
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"})