commit 9b7ebca42742958668aca2a4f4c43bbd9794533c
parent 1e8c074b66f81509f9d4c4978aa77223f52591fb
Author: Sean Enck <sean@ttypty.com>
Date: Fri, 15 Jul 2022 18:31:48 -0400
move hooks out
Diffstat:
3 files changed, 48 insertions(+), 29 deletions(-)
diff --git a/cmd/lb/main.go b/cmd/lb/main.go
@@ -37,30 +37,6 @@ func getEntry(store string, args []string, idx int) string {
return filepath.Join(store, args[idx]) + internal.Extension
}
-func hooks(store, action, step string) {
- hookDir := os.Getenv("LOCKBOX_HOOKDIR")
- if !internal.PathExists(hookDir) {
- return
- }
- dirs, err := os.ReadDir(hookDir)
- if err != nil {
- internal.Die("unable to read hookdir", err)
- }
- for _, d := range dirs {
- if !d.IsDir() {
- name := d.Name()
- cmd := exec.Command(filepath.Join(hookDir, name), action, step)
- cmd.Stdout = os.Stdout
- cmd.Stderr = os.Stderr
- if err := cmd.Run(); err != nil {
- internal.Die(fmt.Sprintf("hook failed: %s", name), err)
- }
- continue
- }
- internal.Die("invalid hook", internal.NewLockboxError("hook is not file and/or has wrong mode"))
- }
-}
-
func main() {
args := os.Args
if len(args) < 2 {
@@ -149,7 +125,7 @@ func main() {
internal.Die("failed to save password", err)
}
fmt.Println("")
- hooks(store, command, postStep)
+ internal.Hooks(store, internal.InsertHook, internal.PostHookStep)
case "rm":
entry := getEntry(store, args, 2)
if !internal.PathExists(entry) {
@@ -157,7 +133,7 @@ func main() {
}
if confirm("remove entry") {
os.Remove(entry)
- hooks(store, command, postStep)
+ internal.Hooks(store, internal.RemoveHook, internal.PostHookStep)
}
case "show", "-c", "clip", "dump":
isDump := command == "dump"
diff --git a/internal/hooks.go b/internal/hooks.go
@@ -0,0 +1,43 @@
+package internal
+
+import (
+ "os"
+ "os/exec"
+ "path/filepath"
+)
+
+type (
+ HookAction string
+ HookStep string
+)
+
+const (
+ RemoveHook HookAction = "remove"
+ InsertHook HookAction = "insert"
+ PostHookStep HookStep = "post"
+)
+
+func Hooks(store string, action HookAction, step HookStep) error {
+ hookDir := os.Getenv("LOCKBOX_HOOKDIR")
+ if !PathExists(hookDir) {
+ return nil
+ }
+ dirs, err := os.ReadDir(hookDir)
+ if err != nil {
+ return err
+ }
+ for _, d := range dirs {
+ if !d.IsDir() {
+ name := d.Name()
+ cmd := exec.Command(filepath.Join(hookDir, name), string(action), string(step))
+ cmd.Stdout = os.Stdout
+ cmd.Stderr = os.Stderr
+ if err := cmd.Run(); err != nil {
+ return err
+ }
+ continue
+ }
+ return NewLockboxError("hook is not a file")
+ }
+ return nil
+}
diff --git a/tests/expected.log b/tests/expected.log
@@ -27,7 +27,7 @@ keys2/three
rekeying: /keys/one.lb
rekeying: /keys/one2.lb
rekeying: /keys2/three.lb
-remove entry? (y/N) HOOK RAN rm post
+remove entry? (y/N) HOOK RAN remove post
keys/one2
keys2/three
@@ -46,9 +46,9 @@ HOOK RAN insert post
test
XXXXXX
test2
-remove entry? (y/N) HOOK RAN rm post
+remove entry? (y/N) HOOK RAN remove post
-remove entry? (y/N) HOOK RAN rm post
+remove entry? (y/N) HOOK RAN remove post
unable to decrypt (decrypt not ok)
rekeying: /keys/one2.lb