better error handling

This commit is contained in:
2024-12-19 10:55:39 +01:00
parent 1b9ec48396
commit 97837076a3
6 changed files with 29 additions and 29 deletions

View File

@@ -52,7 +52,7 @@ func (attr *DbAttr) GetFileValue() error {
} else {
filehandle, err := os.OpenFile(attr.File, os.O_RDONLY, 0600)
if err != nil {
return err
return fmt.Errorf("failed to open file %s: %w", attr.File, err)
}
fd = filehandle
@@ -62,7 +62,7 @@ func (attr *DbAttr) GetFileValue() error {
// read from file or stdin pipe
data, err := io.ReadAll(fd)
if err != nil {
return err
return fmt.Errorf("failed to read from pipe: %w", err)
}
// poor man's text file test

View File

@@ -33,7 +33,7 @@ func AskForPassword() ([]byte, error) {
fmt.Fprint(os.Stderr, "Password: ")
pass, err := term.ReadPassword(int(syscall.Stdin))
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to read password: %w", err)
}
fmt.Fprintln(os.Stderr)
@@ -77,7 +77,7 @@ func GetRandom(size int, capacity int) ([]byte, error) {
buf := make([]byte, size, capacity)
_, err := rand.Read(buf)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to retrieve random bytes: %w", err)
}
return buf, nil
@@ -97,7 +97,7 @@ func Encrypt(pass []byte, attr *DbAttr) error {
aead, err := chacha20poly1305.New(key.Key)
if err != nil {
return err
return fmt.Errorf("failed to create AEAD cipher: %w", err)
}
var plain []byte
@@ -129,7 +129,7 @@ func Encrypt(pass []byte, attr *DbAttr) error {
func Decrypt(pass []byte, cipherb64 string) ([]byte, error) {
salt, err := base64.RawStdEncoding.Strict().DecodeString(cipherb64[0:B64SaltLen])
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to encode to base64: %w", err)
}
key, err := DeriveKey(pass, salt)
@@ -139,12 +139,12 @@ func Decrypt(pass []byte, cipherb64 string) ([]byte, error) {
cipher, err := base64.RawStdEncoding.Strict().DecodeString(cipherb64[B64SaltLen:])
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to encode to base64: %w", err)
}
aead, err := chacha20poly1305.New(key.Key)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create AEAD cipher: %w", err)
}
if len(cipher) < aead.NonceSize() {

View File

@@ -50,7 +50,7 @@ func New(file string, debug bool) (*DB, error) {
func (db *DB) Open() error {
b, err := bolt.Open(db.Dbfile, 0600, nil)
if err != nil {
return err
return fmt.Errorf("failed to open DB %s: %w", db.Dbfile, err)
}
db.DB = b
@@ -84,7 +84,7 @@ func (db *DB) List(attr *DbAttr) (DbEntries, error) {
err := bucket.ForEach(func(key, jsonentry []byte) error {
var entry DbEntry
if err := json.Unmarshal(jsonentry, &entry); err != nil {
return fmt.Errorf("unable to unmarshal json: %s", err)
return fmt.Errorf("failed to unmarshal from json: %w", err)
}
var include bool
@@ -120,7 +120,7 @@ func (db *DB) List(attr *DbAttr) (DbEntries, error) {
return nil
})
return err
return fmt.Errorf("failed to read from DB: %w", err)
})
return entries, err
}
@@ -156,7 +156,7 @@ func (db *DB) Set(attr *DbAttr) error {
var oldentry DbEntry
if err := json.Unmarshal(jsonentry, &oldentry); err != nil {
return fmt.Errorf("unable to unmarshal json: %s", err)
return fmt.Errorf("failed to unmarshal from json: %w", err)
}
if len(oldentry.Tags) > 0 && len(entry.Tags) == 0 {
@@ -175,17 +175,17 @@ func (db *DB) Set(attr *DbAttr) error {
// insert data
bucket, err := tx.CreateBucketIfNotExists([]byte(BucketData))
if err != nil {
return fmt.Errorf("create bucket: %s", err)
return fmt.Errorf("failed to create DB bucket: %w", err)
}
jsonentry, err := json.Marshal(entry)
if err != nil {
return fmt.Errorf("json marshalling failure: %s", err)
return fmt.Errorf("failed to marshall json: %w", err)
}
err = bucket.Put([]byte(entry.Key), []byte(jsonentry))
if err != nil {
return fmt.Errorf("insert data: %s", err)
return fmt.Errorf("failed to insert data: %w", err)
}
return nil
@@ -218,14 +218,14 @@ func (db *DB) Get(attr *DbAttr) (*DbEntry, error) {
}
if err := json.Unmarshal(jsonentry, &entry); err != nil {
return fmt.Errorf("unable to unmarshal json: %s", err)
return fmt.Errorf("failed to unmarshal from json: %w", err)
}
return nil
})
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to read from DB: %w", err)
}
return &entry, nil
@@ -265,14 +265,14 @@ func (db *DB) Import(attr *DbAttr) error {
newfile := db.Dbfile + now.Format("-02.01.2006T03:04.05")
if err := json.Unmarshal([]byte(attr.Val), &entries); err != nil {
return cleanError(newfile, fmt.Errorf("unable to unmarshal json: %s", err))
return cleanError(newfile, fmt.Errorf("failed to unmarshal json: %w", err))
}
if fileExists(db.Dbfile) {
// backup the old file
err := os.Rename(db.Dbfile, newfile)
if err != nil {
return err
return fmt.Errorf("failed to rename file %s to %s: %w", db.Dbfile, newfile, err)
}
}
@@ -287,18 +287,18 @@ func (db *DB) Import(attr *DbAttr) error {
// insert data
bucket, err := tx.CreateBucketIfNotExists([]byte(BucketData))
if err != nil {
return fmt.Errorf("create bucket: %s", err)
return fmt.Errorf("failed to create bucket: %w", err)
}
for _, entry := range entries {
jsonentry, err := json.Marshal(entry)
if err != nil {
return fmt.Errorf("json marshalling failure: %s", err)
return fmt.Errorf("failed to marshall json: %w", err)
}
err = bucket.Put([]byte(entry.Key), []byte(jsonentry))
if err != nil {
return fmt.Errorf("insert data: %s", err)
return fmt.Errorf("failed to insert data into DB: %w", err)
}
}

View File

@@ -32,7 +32,7 @@ func List(writer io.Writer, conf *cfg.Config, entries app.DbEntries) error {
func ListJson(writer io.Writer, conf *cfg.Config, entries app.DbEntries) error {
jsonentries, err := json.Marshal(entries)
if err != nil {
return fmt.Errorf("json marshalling failure: %s", err)
return fmt.Errorf("failed marshall json: %s", err)
}
fmt.Println(string(jsonentries))

View File

@@ -16,7 +16,7 @@ func Print(writer io.Writer, conf *cfg.Config, attr *app.DbAttr, entry *app.DbEn
if attr.File != "" {
fd, err := os.OpenFile(attr.File, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0755)
if err != nil {
return err
return fmt.Errorf("failed to open file %s for writing: %w", attr.File, err)
}
defer fd.Close()
@@ -34,7 +34,7 @@ func Print(writer io.Writer, conf *cfg.Config, attr *app.DbAttr, entry *app.DbEn
}
if err != nil {
return err
return fmt.Errorf("failed to write to file %s: %w", attr.File, err)
}
return nil
@@ -63,7 +63,7 @@ func Print(writer io.Writer, conf *cfg.Config, attr *app.DbAttr, entry *app.DbEn
case "json":
jsonentry, err := json.Marshal(entry)
if err != nil {
return fmt.Errorf("json marshalling failure: %s", err)
return fmt.Errorf("failed to marshall json: %s", err)
}
fmt.Println(string(jsonentry))

View File

@@ -12,7 +12,7 @@ import (
func WriteFile(attr *app.DbAttr, conf *cfg.Config, entries app.DbEntries) error {
jsonentries, err := json.Marshal(entries)
if err != nil {
return fmt.Errorf("json marshalling failure: %s", err)
return fmt.Errorf("failed to marshall json: %w", err)
}
if attr.File == "-" {
@@ -20,11 +20,11 @@ func WriteFile(attr *app.DbAttr, conf *cfg.Config, entries app.DbEntries) error
} else {
fd, err := os.OpenFile(attr.File, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
return err
return fmt.Errorf("failed to open file %s for writing: %w", attr.File, err)
}
if _, err := fd.Write(jsonentries); err != nil {
return err
return fmt.Errorf("failed writing to file %s: %w", attr.File, err)
}
fmt.Printf("database contents exported to %s\n", attr.File)