mirror of
https://codeberg.org/scip/anydb.git
synced 2025-12-17 04:20:59 +01:00
better error handling
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
28
app/db.go
28
app/db.go
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user