lockbox

password manager
Log | Files | Refs | README | LICENSE

commit 2b9a951a728e7559f3faca183d875387b4b30f07
parent 647b9cf0c6f50c6f731e56f3287d9d989fabf667
Author: Sean Enck <sean@ttypty.com>
Date:   Thu, 14 Oct 2021 19:52:35 -0400

use common error type

Diffstat:
Mcmd/lb-pwgen/main.go | 9++++-----
Mcmd/lb-rw/main.go | 2+-
Mcmd/lb-stats/main.go | 4++--
Mcmd/lb-totp/main.go | 10+++++-----
Mcmd/lb/main.go | 20++++++++++----------
Mgo.mod | 2+-
Mgo.sum | 2++
Minternal/encdec.go | 6+++---
Dinternal/error.go | 17-----------------
Minternal/socket.go | 4++--
Minternal/utils.go | 8++++----
11 files changed, 34 insertions(+), 50 deletions(-)

diff --git a/cmd/lb-pwgen/main.go b/cmd/lb-pwgen/main.go @@ -11,7 +11,6 @@ import ( "strings" "time" - "voidedtech.com/lockbox/internal" "voidedtech.com/stock" ) @@ -63,7 +62,7 @@ func main() { } } if len(paths) == 0 { - stock.Die("no paths found for generation", internal.NewLockboxError("unable to read paths")) + stock.Die("no paths found for generation", stock.NewBasicError("unable to read paths")) } result := "" l := *length @@ -93,7 +92,7 @@ func main() { name = newValue case transformModeSed: if len(sedPattern) == 0 { - stock.Die("unable to use sed transform without pattern", internal.NewLockboxError("set PWGEN_SED")) + stock.Die("unable to use sed transform without pattern", stock.NewBasicError("set PWGEN_SED")) } cmd := exec.Command("sed", "-e", sedPattern) stdin, err := cmd.StdinPipe() @@ -117,13 +116,13 @@ func main() { } errors := strings.TrimSpace(stderr.String()) if len(errors) > 0 { - stock.Die("sed stderr failure", internal.NewLockboxError(errors)) + stock.Die("sed stderr failure", stock.NewBasicError(errors)) } name = strings.TrimSpace(stdout.String()) case transformModeNone: break default: - stock.Die("unknown transform mode", internal.NewLockboxError(transform)) + stock.Die("unknown transform mode", stock.NewBasicError(transform)) } result += name } diff --git a/cmd/lb-rw/main.go b/cmd/lb-rw/main.go @@ -30,6 +30,6 @@ func main() { } fmt.Println(string(results)) default: - stock.Die("invalid mode", internal.NewLockboxError("bad mode")) + stock.Die("invalid mode", stock.NewBasicError("bad mode")) } } diff --git a/cmd/lb-stats/main.go b/cmd/lb-stats/main.go @@ -59,7 +59,7 @@ func main() { } parts := strings.Split(cleaned, " ") if len(parts) != 2 { - stock.Die("invalid format entry", internal.NewLockboxError("mismatch between format string and struct?")) + stock.Die("invalid format entry", stock.NewBasicError("mismatch between format string and struct?")) } history = append(history, History{Hash: parts[0], Date: parts[1]}) } @@ -67,7 +67,7 @@ func main() { results = append(results, stat) } if len(results) == 0 { - stock.Die("found no entries", internal.NewLockboxError("no entries")) + stock.Die("found no entries", stock.NewBasicError("no entries")) } j, err := json.MarshalIndent(results, "", " ") if err != nil { diff --git a/cmd/lb-totp/main.go b/cmd/lb-totp/main.go @@ -32,7 +32,7 @@ func list() ([]string, error) { } } if len(results) == 0 { - return nil, internal.NewLockboxError("no objects found") + return nil, stock.NewBasicError("no objects found") } return results, nil } @@ -51,7 +51,7 @@ func display(token string, clip bool) error { return err } if !interactive && clip { - return internal.NewLockboxError("clipboard not available in non-interactive mode") + return stock.NewBasicError("clipboard not available in non-interactive mode") } redStart, redEnd, err := internal.GetColor(internal.ColorRed) if err != nil { @@ -60,7 +60,7 @@ func display(token string, clip bool) error { tok := strings.TrimSpace(token) store := filepath.Join(getEnv(), tok+internal.Extension) if !stock.PathExists(store) { - return internal.NewLockboxError("object does not exist") + return stock.NewBasicError("object does not exist") } l, err := internal.NewLockbox("", "", store) if err != nil { @@ -134,7 +134,7 @@ func colorize(start, text, end string) { func main() { args := os.Args if len(args) > 3 || len(args) < 2 { - stock.Die("subkey required", internal.NewLockboxError("invalid arguments")) + stock.Die("subkey required", stock.NewBasicError("invalid arguments")) } cmd := args[1] if cmd == "list" || cmd == "ls" { @@ -151,7 +151,7 @@ func main() { clip := false if len(args) == 3 { if cmd != "-c" && cmd != "clip" { - stock.Die("subcommand not supported", internal.NewLockboxError("invalid sub command")) + stock.Die("subcommand not supported", stock.NewBasicError("invalid sub command")) } clip = true cmd = args[2] diff --git a/cmd/lb/main.go b/cmd/lb/main.go @@ -19,7 +19,7 @@ var ( func getEntry(store string, args []string, idx int) string { if len(args) != idx+1 { - stock.Die("invalid entry given", internal.NewLockboxError("specific entry required")) + stock.Die("invalid entry given", stock.NewBasicError("specific entry required")) } return filepath.Join(store, args[idx]) + internal.Extension } @@ -27,7 +27,7 @@ func getEntry(store string, args []string, idx int) string { func main() { args := os.Args if len(args) < 2 { - stock.Die("missing arguments", internal.NewLockboxError("requires subcommand")) + stock.Die("missing arguments", stock.NewBasicError("requires subcommand")) } command := args[1] store := internal.GetStore() @@ -37,7 +37,7 @@ func main() { searchTerm := "" if isFind { if len(args) < 3 { - stock.Die("find requires an argument to search for", internal.NewLockboxError("search term required")) + stock.Die("find requires an argument to search for", stock.NewBasicError("search term required")) } searchTerm = args[2] } @@ -64,16 +64,16 @@ func main() { idx := 2 switch len(args) { case 2: - stock.Die("insert missing required arguments", internal.NewLockboxError("entry required")) + stock.Die("insert missing required arguments", stock.NewBasicError("entry required")) case 3: case 4: multi = args[2] == "-m" if !multi { - stock.Die("multi-line insert must be after 'insert'", internal.NewLockboxError("invalid command")) + stock.Die("multi-line insert must be after 'insert'", stock.NewBasicError("invalid command")) } idx = 3 default: - stock.Die("too many arguments", internal.NewLockboxError("insert can only perform one operation")) + stock.Die("too many arguments", stock.NewBasicError("insert can only perform one operation")) } isPipe := internal.IsInputFromPipe() entry := getEntry(store, args, idx) @@ -106,7 +106,7 @@ func main() { password = input } if password == "" { - stock.Die("empty password provided", internal.NewLockboxError("password can NOT be empty")) + stock.Die("empty password provided", stock.NewBasicError("password can NOT be empty")) } l, err := internal.NewLockbox("", "", entry) if err != nil { @@ -119,7 +119,7 @@ func main() { case "rm": entry := getEntry(store, args, 2) if !stock.PathExists(entry) { - stock.Die("does not exists", internal.NewLockboxError("can not delete unknown entry")) + stock.Die("does not exists", stock.NewBasicError("can not delete unknown entry")) } if confirm("remove entry") { os.Remove(entry) @@ -138,7 +138,7 @@ func main() { isGlob := len(entries) > 1 if isGlob { if !isShow { - stock.Die("cannot glob to clipboard", internal.NewLockboxError("bad glob request")) + stock.Die("cannot glob to clipboard", stock.NewBasicError("bad glob request")) } sort.Strings(entries) } @@ -148,7 +148,7 @@ func main() { } for _, entry := range entries { if !stock.PathExists(entry) { - stock.Die("invalid entry", internal.NewLockboxError("entry not found")) + stock.Die("invalid entry", stock.NewBasicError("entry not found")) } l, err := internal.NewLockbox("", "", entry) if err != nil { diff --git a/go.mod b/go.mod @@ -5,7 +5,7 @@ go 1.17 require ( github.com/pquerna/otp v1.3.0 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 - voidedtech.com/stock v0.0.0-20210824213509-5e85ba5681f5 + voidedtech.com/stock v0.0.0-20211014234009-93c0ed43354e ) require ( diff --git a/go.sum b/go.sum @@ -22,3 +22,5 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= voidedtech.com/stock v0.0.0-20210824213509-5e85ba5681f5 h1:4iXLWTu+VTkigq+tUjSiHNxl/Kfbv9+s+cZMOZGGzQQ= voidedtech.com/stock v0.0.0-20210824213509-5e85ba5681f5/go.mod h1:fDeTx9Bymp++UZEUI+pxljhMDzibXQvRKTcg1h+5tw4= +voidedtech.com/stock v0.0.0-20211014234009-93c0ed43354e h1:feU8+uf5lbdKC9Z4+5+x7KObXW6mjTZK+ZqnY/d6oZA= +voidedtech.com/stock v0.0.0-20211014234009-93c0ed43354e/go.mod h1:fDeTx9Bymp++UZEUI+pxljhMDzibXQvRKTcg1h+5tw4= diff --git a/internal/encdec.go b/internal/encdec.go @@ -49,7 +49,7 @@ func NewLockbox(key, keyMode, file string) (Lockbox, error) { } if len(b) > keyLength { - return Lockbox{}, NewLockboxError("key is too large for use") + return Lockbox{}, stock.NewBasicError("key is too large for use") } for len(b) < keyLength { @@ -110,7 +110,7 @@ func getKey(keyMode, name string) ([]byte, error) { case PlainKeyMode: data = []byte(name) default: - return nil, NewLockboxError("unknown keymode") + return nil, stock.NewBasicError("unknown keymode") } return []byte(strings.TrimSpace(string(data))), nil } @@ -156,7 +156,7 @@ func (l Lockbox) Decrypt() ([]byte, error) { copy(nonce[:], encrypted[:nonceLength]) decrypted, ok := secretbox.Open(nil, encrypted[nonceLength:], &nonce, &l.secret) if !ok { - return nil, NewLockboxError("decrypt not ok") + return nil, stock.NewBasicError("decrypt not ok") } padding := int(decrypted[0]) diff --git a/internal/error.go b/internal/error.go @@ -1,17 +0,0 @@ -package internal - -type ( - // LockboxError are underling lockbox errors. - LockboxError struct { - message string - } -) - -// NewLockboxError will create a new lockbox error. -func NewLockboxError(message string) error { - return &LockboxError{message: message} -} - -func (err *LockboxError) Error() string { - return err.message -} diff --git a/internal/socket.go b/internal/socket.go @@ -57,7 +57,7 @@ func SocketHandler(isHost bool) error { if path == "" { h := os.Getenv("HOME") if h == "" { - return NewLockboxError("unable to get HOME") + return stock.NewBasicError("unable to get HOME") } path = filepath.Join(h, ".lb", "lockbox.sock") } @@ -88,7 +88,7 @@ func SocketHandler(isHost bool) error { return err } if stats.Mode() != fs.ModeDir|0700 { - return NewLockboxError("invalid permissions on lb socket directory, too open") + return stock.NewBasicError("invalid permissions on lb socket directory, too open") } if stock.PathExists(path) { if err := os.Remove(path); err != nil { diff --git a/internal/utils.go b/internal/utils.go @@ -37,7 +37,7 @@ func isYesNoEnv(defaultValue bool, env string) (bool, error) { case "yes": return true, nil } - return false, NewLockboxError(fmt.Sprintf("invalid yes/no env value for %s", env)) + return false, stock.NewBasicError(fmt.Sprintf("invalid yes/no env value for %s", env)) } // IsInteractive indicates if running as a user UI experience. @@ -48,7 +48,7 @@ func IsInteractive() (bool, error) { // GetColor will retrieve start/end terminal coloration indicators. func GetColor(color Color) (string, string, error) { if color != ColorRed { - return "", "", NewLockboxError("bad color") + return "", "", stock.NewBasicError("bad color") } interactive, err := IsInteractive() if err != nil { @@ -77,7 +77,7 @@ func GetStore() string { func Find(store string, display bool) ([]string, error) { var results []string if !stock.PathExists(store) { - return nil, NewLockboxError("store does not exists") + return nil, stock.NewBasicError("store does not exists") } err := filepath.Walk(store, func(path string, info fs.FileInfo, err error) error { if err != nil { @@ -150,7 +150,7 @@ func ConfirmInput() (string, error) { return "", err } if first != second { - return "", NewLockboxError("passwords do NOT match") + return "", stock.NewBasicError("passwords do NOT match") } return first, nil }