diff --git a/storage/ndf.go b/storage/ndf.go new file mode 100644 index 0000000000000000000000000000000000000000..f92336de562a1a439d9884ed2f96083e940dbd2a --- /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 3a9c8f51d77e39e5b825d1b3637b1e9869c76d41..9e6427e87c83e244a63163150af32d2a40716fb3 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 0000000000000000000000000000000000000000..be827bee86fa84bd151eb459d3b95c65b11872a9 --- /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) +}