commit 75c0b1a8cb647c469040679e4a83650514feabf7
parent b6ebda8d29faa567af5e59f50d398cad77c198d3
Author: Sean Enck <sean@ttypty.com>
Date: Wed, 4 Jun 2025 22:56:59 -0400
combining these is a bit odd, but they need to follow the same rules
Diffstat:
3 files changed, 37 insertions(+), 30 deletions(-)
diff --git a/internal/app/core.go b/internal/app/core.go
@@ -5,6 +5,7 @@ import (
"fmt"
"io"
"os"
+ "regexp"
"git.sr.ht/~enckse/lockbox/internal/backend"
"git.sr.ht/~enckse/lockbox/internal/platform"
@@ -96,3 +97,22 @@ func (a DefaultCommand) Password() (string, error) {
func (a *DefaultCommand) Input(interactive bool) ([]byte, error) {
return platform.GetUserInputPassword(interactive)
}
+
+func generatePrinter[T any](w io.Writer, isFilter bool, filter string, toMatch, toDisplay func(T) string) (func(T), error) {
+ printer := func(p T) {
+ fmt.Fprintf(w, "%s\n", toDisplay(p))
+ }
+ finder := printer
+ if isFilter {
+ re, err := regexp.Compile(filter)
+ if err != nil {
+ return nil, err
+ }
+ finder = func(p T) {
+ if re.MatchString(toMatch(p)) {
+ printer(p)
+ }
+ }
+ }
+ return finder, nil
+}
diff --git a/internal/app/list.go b/internal/app/list.go
@@ -3,8 +3,6 @@ package app
import (
"errors"
- "fmt"
- "regexp"
"git.sr.ht/~enckse/lockbox/internal/backend"
)
@@ -28,20 +26,17 @@ func List(cmd CommandOptions, isFind bool) error {
return err
}
w := cmd.Writer()
- printer := func(p string) {
- fmt.Fprintf(w, "%s\n", p)
- }
- finder := printer
+ filter := ""
if isFind {
- re, err := regexp.Compile(args[0])
- if err != nil {
- return err
- }
- finder = func(p string) {
- if re.MatchString(p) {
- printer(p)
- }
- }
+ filter = args[0]
+ }
+ finder, err := generatePrinter(w, isFind, filter, func(p string) string {
+ return p
+ }, func(p string) string {
+ return p
+ })
+ if err != nil {
+ return err
}
for f, err := range e {
if err != nil {
diff --git a/internal/app/totp.go b/internal/app/totp.go
@@ -4,7 +4,6 @@ package app
import (
"errors"
"fmt"
- "regexp"
"slices"
"strconv"
"strings"
@@ -231,20 +230,13 @@ func (args *TOTPArguments) Do(opts TOTPOptions) error {
return err
}
writer := opts.app.Writer()
- printer := func(entity backend.Entity) {
- fmt.Fprintf(writer, "%s\n", entity.Directory())
- }
- filter := printer
- if args.Mode == FindTOTPMode {
- re, err := regexp.Compile(args.Entry)
- if err != nil {
- return err
- }
- filter = func(entity backend.Entity) {
- if re.MatchString(entity.Path) {
- printer(entity)
- }
- }
+ filter, err := generatePrinter(writer, args.Mode == FindTOTPMode, args.Entry, func(e backend.Entity) string {
+ return e.Path
+ }, func(e backend.Entity) string {
+ return e.Directory()
+ })
+ if err != nil {
+ return err
}
for entry, err := range e {
if err != nil {