lockbox

password manager
Log | Files | Refs | README | LICENSE

commit e0a56b3d1f22034fb2119ae30b49e3c321d1157c
parent 42a9f114a3f1200222386844ac59e95b4ea19416
Author: Sean Enck <sean@ttypty.com>
Date:   Sat,  1 Oct 2022 14:06:33 -0400

subcommands are collapsing into main

Diffstat:
Mcmd/main.go | 57++++++++++++++++++++++++++++++++++++++++++++++++++-------
Dinternal/subcommands/clear.go | 38--------------------------------------
Dinternal/subcommands/hashed.go | 28----------------------------
3 files changed, 50 insertions(+), 73 deletions(-)

diff --git a/cmd/main.go b/cmd/main.go @@ -6,7 +6,9 @@ import ( "errors" "fmt" "os" + "os/exec" "strings" + "time" "github.com/enckse/lockbox/internal/backend" "github.com/enckse/lockbox/internal/cli" @@ -37,10 +39,12 @@ func getEntry(args []string, idx int) string { func internalCallback(name string) callbackFunction { switch name { - case "hash": - return subcommands.Hashed case "totp": return subcommands.TOTP + case "hash": + return hashText + case "clear": + return clearClipboard } return nil } @@ -168,11 +172,6 @@ func run() *programError { if err := clipboard.CopyTo(existing.Value); err != nil { return newError("clipboard failed", err) } - - case "clear": - if err := subcommands.ClearClipboardCallback(); err != nil { - return newError("failed to handle clipboard clear", err) - } default: a := args[2:] callback := internalCallback(command) @@ -187,6 +186,50 @@ func run() *programError { return nil } +func hashText(args []string) error { + if len(args) == 0 { + return errors.New("git diff requires a file") + } + t, err := backend.Load(args[len(args)-1]) + if err != nil { + return err + } + e, err := t.QueryCallback(backend.QueryOptions{Mode: backend.ListMode, Values: backend.HashedValue}) + if err != nil { + return err + } + for _, item := range e { + fmt.Printf("%s:\nhash:%s\n", item.Path, item.Value) + } + return nil +} + +func clearClipboard(args []string) error { + idx := 0 + val, err := inputs.Stdin(false) + if err != nil { + return err + } + clipboard, err := platform.NewClipboard() + if err != nil { + return err + } + pCmd, pArgs := clipboard.Args(false) + val = strings.TrimSpace(val) + for idx < clipboard.MaxTime { + idx++ + time.Sleep(1 * time.Second) + out, err := exec.Command(pCmd, pArgs...).Output() + if err != nil { + continue + } + if strings.TrimSpace(string(out)) != val { + return nil + } + } + return clipboard.CopyTo("") +} + func confirm(prompt string) bool { yesNo, err := inputs.ConfirmYesNoPrompt(prompt) if err != nil { diff --git a/internal/subcommands/clear.go b/internal/subcommands/clear.go @@ -1,38 +0,0 @@ -// Package subcommands handles clearing the clipboard. -package subcommands - -import ( - "os/exec" - "strings" - "time" - - "github.com/enckse/lockbox/internal/inputs" - "github.com/enckse/lockbox/internal/platform" -) - -// ClearClipboardCallback handles clearing the clipboard over time. -func ClearClipboardCallback() error { - idx := 0 - val, err := inputs.Stdin(false) - if err != nil { - return err - } - clipboard, err := platform.NewClipboard() - if err != nil { - return err - } - pCmd, pArgs := clipboard.Args(false) - val = strings.TrimSpace(val) - for idx < clipboard.MaxTime { - idx++ - time.Sleep(1 * time.Second) - out, err := exec.Command(pCmd, pArgs...).Output() - if err != nil { - continue - } - if strings.TrimSpace(string(out)) != val { - return nil - } - } - return clipboard.CopyTo("") -} diff --git a/internal/subcommands/hashed.go b/internal/subcommands/hashed.go @@ -1,28 +0,0 @@ -// Package subcommands handles git diffs. -package subcommands - -import ( - "errors" - "fmt" - - "github.com/enckse/lockbox/internal/backend" -) - -// Hashed handles dumping of lb entries. -func Hashed(args []string) error { - if len(args) == 0 { - return errors.New("git diff requires a file") - } - t, err := backend.Load(args[len(args)-1]) - if err != nil { - return err - } - e, err := t.QueryCallback(backend.QueryOptions{Mode: backend.ListMode, Values: backend.HashedValue}) - if err != nil { - return err - } - for _, item := range e { - fmt.Printf("%s:\nhash:%s\n", item.Path, item.Value) - } - return nil -}