blob: f38509d3cb03789e5fd98845f7e066c2f1e4c6f4 [file] [log] [blame]
package client
import (
"encoding/json"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/storage"
tuf_client "github.com/flynn/go-tuf/client"
)
func FileLocalStore(path string) (tuf_client.LocalStore, error) {
fd, err := storage.OpenFile(path, false)
if err != nil {
return nil, err
}
db, err := leveldb.Open(fd, nil)
return &fileLocalStore{fd: fd, db: db}, err
}
type fileLocalStore struct {
fd storage.Storage
db *leveldb.DB
}
func (f *fileLocalStore) GetMeta() (map[string]json.RawMessage, error) {
meta := make(map[string]json.RawMessage)
db_itr := f.db.NewIterator(nil, nil)
for db_itr.Next() {
vcopy := make([]byte, len(db_itr.Value()))
copy(vcopy, db_itr.Value())
meta[string(db_itr.Key())] = vcopy
}
db_itr.Release()
return meta, db_itr.Error()
}
func (f *fileLocalStore) SetMeta(name string, meta json.RawMessage) error {
return f.db.Put([]byte(name), []byte(meta), nil)
}
func (f *fileLocalStore) Close() error {
if err := f.db.Close(); err != nil {
return err
}
if err := f.fd.Close(); err != nil {
return err
}
return nil
}