indieauth-server/internal/database/users.go

61 lines
1.1 KiB
Go

package database
import (
"bytes"
"encoding/gob"
"fmt"
"time"
bolt "go.etcd.io/bbolt"
)
type User struct {
CreatedAt time.Time
UpdatedAt time.Time
HashedPassword string
Profile Profile
}
type Profile struct {
Name string
URL string
Photo string
Email string
}
func UpdateUser(boltdb *bolt.DB, identifier string, user User) error {
bucketName := []byte(usersBucket)
err := boltdb.Update(func(tx *bolt.Tx) error {
bucket := tx.Bucket(bucketName)
if bucket == nil {
return fmt.Errorf("the %s bucket does not exist", string(bucketName))
}
key := []byte(identifier)
buffer := new(bytes.Buffer)
if err := gob.NewEncoder(buffer).Encode(user); err != nil {
return fmt.Errorf(
"unable to encode the user data: %w",
err,
)
}
if err := bucket.Put(key, buffer.Bytes()); err != nil {
return fmt.Errorf(
"unable to update the user in the %s bucket: %w",
string(bucketName),
err,
)
}
return nil
})
if err != nil {
return fmt.Errorf("error updating the user in the database: %w", err)
}
return nil
}