commit 2b9a951a728e7559f3faca183d875387b4b30f07
parent 647b9cf0c6f50c6f731e56f3287d9d989fabf667
Author: Sean Enck <sean@ttypty.com>
Date: Thu, 14 Oct 2021 19:52:35 -0400
use common error type
Diffstat:
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
}