Skip to content
Snippets Groups Projects

Auth Store Fixes

Merged Richard T. Carback III requested to merge hotfix/authstore into release
All threads resolved!
1 file
+ 38
35
Compare changes
  • Side-by-side
  • Inline
@@ -12,6 +12,7 @@ import (
"encoding/binary"
"encoding/json"
"github.com/pkg/errors"
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/client/storage/versioned"
"gitlab.com/elixxir/crypto/e2e/auth"
@@ -119,42 +120,22 @@ func (s *Store) savePreviousNegotiations() error {
func (s *Store) newOrLoadPreviousNegotiations() (map[id.ID]bool, error) {
obj, err := s.kv.Get(negotiationPartnersKey, negotiationPartnersVersion)
if err != nil {
// Version 0 Upgrade Path
obj, err2 := s.kv.Get(negotiationPartnersKey, 0)
if err2 == nil && obj.Version == 0 {
old := unmarshalPreviousNegotiationsV0(obj.Data)
newPrevNegotiations := make(map[id.ID]bool)
for id := range old {
newPrevNegotiations[id] = true
}
obj = &versioned.Object{
Version: negotiationPartnersVersion,
Timestamp: netTime.Now(),
Data: marshalPreviousNegotiations(
newPrevNegotiations),
}
err = s.kv.Set(negotiationPartnersKey,
negotiationPartnersVersion, obj)
if err != nil {
return nil, err
}
}
if !ekv.Exists(err) {
newPreviousNegotiations := make(map[id.ID]bool)
obj := &versioned.Object{
Version: negotiationPartnersVersion,
Timestamp: netTime.Now(),
Data: marshalPreviousNegotiations(
newPreviousNegotiations),
}
err = s.kv.Set(negotiationPartnersKey,
negotiationPartnersVersion, obj)
if err != nil {
return nil, err
}
return newPreviousNegotiations, nil
// V0 Upgrade Path
if !ekv.Exists(err) {
upgradeErr := upgradePreviousNegotiationsV0(s.kv)
if upgradeErr != nil {
return nil, errors.Wrapf(err, "%+v", upgradeErr)
}
obj, err = s.kv.Get(negotiationPartnersKey,
negotiationPartnersVersion)
}
// Note: if it still doesn't exist, return an empty one.
if err != nil && !ekv.Exists(err) {
newPreviousNegotiations := make(map[id.ID]bool)
return newPreviousNegotiations, nil
} else if err != nil {
return nil, err
}
@@ -286,3 +267,25 @@ func unmarshalPreviousNegotiationsV0(buf []byte) map[id.ID]struct{} {
return partners
}
// upgradePreviousNegotiationsV0 upgrades the negotiations Partners key from V0
// to V1
func upgradePreviousNegotiationsV0(kv *versioned.KV) error {
obj, err := kv.Get(negotiationPartnersKey, 0)
if !ekv.Exists(err) {
return nil
}
old := unmarshalPreviousNegotiationsV0(obj.Data)
newPrevNegotiations := make(map[id.ID]bool)
for id := range old {
newPrevNegotiations[id] = true
}
obj = &versioned.Object{
Version: negotiationPartnersVersion,
Timestamp: netTime.Now(),
Data: marshalPreviousNegotiations(
newPrevNegotiations),
}
return kv.Set(negotiationPartnersKey, negotiationPartnersVersion, obj)
}
Loading