From 1e7552fef90d41601168ad515afaa6d7bed7ca85 Mon Sep 17 00:00:00 2001 From: Benjamin Wenger <ben@elixxir.ioo> Date: Tue, 22 Sep 2020 16:18:28 -0700 Subject: [PATCH] added support for base NDF --- storage/ndf.go | 30 ++++++++++++++++++++++++++++++ storage/session.go | 3 +++ storage/utility/NDF.go | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 storage/ndf.go create mode 100644 storage/utility/NDF.go diff --git a/storage/ndf.go b/storage/ndf.go new file mode 100644 index 000000000..f92336de5 --- /dev/null +++ b/storage/ndf.go @@ -0,0 +1,30 @@ +package storage + +import ( + jww "github.com/spf13/jwalterweatherman" + "gitlab.com/elixxir/client/storage/utility" + "gitlab.com/xx_network/primitives/ndf" +) + +const baseNdfKey = "baseNdf" + +func (s *Session) SetBaseNDF(def *ndf.NetworkDefinition) { + err := utility.SaveNDF(s.kv, baseNdfKey, def) + if err != nil { + jww.FATAL.Printf("Failed to dave the base NDF: %s", err) + } + s.baseNdf = def +} + +func (s *Session) GetBaseNDF() *ndf.NetworkDefinition { + if s.baseNdf != nil { + return s.baseNdf + } + def, err := utility.LoadNDF(s.kv, baseNdfKey) + if err != nil { + jww.FATAL.Printf("Could not load the base NDF: %s", err) + } + + s.baseNdf = def + return def +} diff --git a/storage/session.go b/storage/session.go index 3a9c8f51d..9e6427e87 100644 --- a/storage/session.go +++ b/storage/session.go @@ -24,6 +24,7 @@ import ( "gitlab.com/elixxir/ekv" "gitlab.com/xx_network/crypto/signature/rsa" "gitlab.com/xx_network/primitives/id" + "gitlab.com/xx_network/primitives/ndf" "sync" "testing" ) @@ -36,7 +37,9 @@ type Session struct { kv *versioned.KV mux sync.RWMutex + //memoized data regStatus RegistrationStatus + baseNdf *ndf.NetworkDefinition //sub-stores e2e *e2e.Store diff --git a/storage/utility/NDF.go b/storage/utility/NDF.go new file mode 100644 index 000000000..be827bee8 --- /dev/null +++ b/storage/utility/NDF.go @@ -0,0 +1,40 @@ +package utility + +import ( + "gitlab.com/elixxir/client/storage/versioned" + "gitlab.com/xx_network/primitives/ndf" + "time" +) + +const currentNDFVersion = 0 + +func LoadNDF(kv *versioned.KV, key string) (*ndf.NetworkDefinition, error) { + vo, err := kv.Get(key) + if err != nil { + return nil, err + } + + ndf, _, err := ndf.DecodeNDF(string(vo.Data)) + if err != nil { + return nil, err + } + + return ndf, err +} + +func SaveNDF(kv *versioned.KV, key string, ndf *ndf.NetworkDefinition) error { + marshaled, err := ndf.Marshal() + if err != nil { + return err + } + + now := time.Now() + + obj := versioned.Object{ + Version: currentNDFVersion, + Timestamp: now, + Data: marshaled, + } + + return kv.Set(key, &obj) +} -- GitLab