Skip to content
Snippets Groups Projects
Commit 6ef6b268 authored by Richard T. Carback III's avatar Richard T. Carback III
Browse files

Fixes for handling saved sent and received requests

parent 2ea6cea2
No related branches found
No related tags found
2 merge requests!510Release,!282Auth Store Fixes
...@@ -9,7 +9,6 @@ package store ...@@ -9,7 +9,6 @@ package store
import ( import (
"bytes" "bytes"
"encoding/base64"
"encoding/binary" "encoding/binary"
"encoding/json" "encoding/json"
"os" "os"
...@@ -215,8 +214,8 @@ func saveNegotiationFingerprints( ...@@ -215,8 +214,8 @@ func saveNegotiationFingerprints(
// loadNegotiationFingerprints loads the list of sentByFingerprints for the given // loadNegotiationFingerprints loads the list of sentByFingerprints for the given
// partner from storage. // partner from storage.
func loadNegotiationFingerprints(partner *id.ID, kv *versioned.KV) ([][]byte, error) { func loadNegotiationFingerprints(partner *id.ID, kv *versioned.KV) ([][]byte, error) {
obj, err := kv.Get(makeNegotiationFingerprintsKey(partner), fpKey := makeNegotiationFingerprintsKey(partner)
currentNegotiationFingerprintsVersion) obj, err := kv.Get(fpKey, currentNegotiationFingerprintsVersion)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -262,8 +261,7 @@ func unmarshalNegotiationFingerprints(buf []byte) [][]byte { ...@@ -262,8 +261,7 @@ func unmarshalNegotiationFingerprints(buf []byte) [][]byte {
// makeOldNegotiationFingerprintsKey generates the key used to load and store // makeOldNegotiationFingerprintsKey generates the key used to load and store
// negotiation sentByFingerprints for the partner. // negotiation sentByFingerprints for the partner.
func makeNegotiationFingerprintsKey(partner *id.ID) string { func makeNegotiationFingerprintsKey(partner *id.ID) string {
return negotiationFingerprintsKeyPrefix + return negotiationFingerprintsKeyPrefix + partner.String()
string(base64.StdEncoding.EncodeToString(partner.Marshal()))
} }
// Historical functions // Historical functions
......
package store package store
import ( import (
"encoding/base64" "os"
"sync" "sync"
"github.com/cloudflare/circl/dh/sidh" "github.com/cloudflare/circl/dh/sidh"
...@@ -61,7 +61,7 @@ func newReceivedRequest(kv *versioned.KV, c contact.Contact, ...@@ -61,7 +61,7 @@ func newReceivedRequest(kv *versioned.KV, c contact.Contact,
func loadReceivedRequest(kv *versioned.KV, partner *id.ID) ( func loadReceivedRequest(kv *versioned.KV, partner *id.ID) (
*ReceivedRequest, error) { *ReceivedRequest, error) {
c, err := util.LoadContact(kv, partner) c, contactVersion, err := util.LoadContact(kv, partner)
if err != nil { if err != nil {
return nil, errors.WithMessagef(err, "Failed to Load "+ return nil, errors.WithMessagef(err, "Failed to Load "+
"Received Auth Request Contact with %s", "Received Auth Request Contact with %s",
...@@ -78,9 +78,14 @@ func loadReceivedRequest(kv *versioned.KV, partner *id.ID) ( ...@@ -78,9 +78,14 @@ func loadReceivedRequest(kv *versioned.KV, partner *id.ID) (
round, err := rounds.LoadRound(kv, makeRoundKey(partner)) round, err := rounds.LoadRound(kv, makeRoundKey(partner))
if err != nil { if err != nil {
return nil, errors.WithMessagef(err, "Failed to Load "+ if contactVersion == 0 && os.IsNotExist(err) {
"round request was received on with %s", jww.WARN.Printf("Old contact version, round to nil")
partner) round = rounds.Round{}
} else {
return nil, errors.WithMessagef(err, "Failed to Load "+
"round request was received on with %s",
partner)
}
} }
return &ReceivedRequest{ return &ReceivedRequest{
...@@ -120,6 +125,5 @@ func (rr *ReceivedRequest) getType() RequestType { ...@@ -120,6 +125,5 @@ func (rr *ReceivedRequest) getType() RequestType {
} }
func makeRoundKey(partner *id.ID) string { func makeRoundKey(partner *id.ID) string {
return "receivedRequestRound:" + return "receivedRequestRound:" + partner.String()
base64.StdEncoding.EncodeToString(partner.Marshal())
} }
...@@ -8,9 +8,10 @@ ...@@ -8,9 +8,10 @@
package store package store
import ( import (
"encoding/base64"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"fmt"
"os"
"sync" "sync"
"github.com/cloudflare/circl/dh/sidh" "github.com/cloudflare/circl/dh/sidh"
...@@ -24,7 +25,7 @@ import ( ...@@ -24,7 +25,7 @@ import (
"gitlab.com/xx_network/primitives/netTime" "gitlab.com/xx_network/primitives/netTime"
) )
const currentSentRequestVersion = 0 const currentSentRequestVersion = 1
type SentRequest struct { type SentRequest struct {
kv *versioned.KV kv *versioned.KV
...@@ -73,8 +74,19 @@ func newSentRequest(kv *versioned.KV, partner *id.ID, partnerHistoricalPubKey, ...@@ -73,8 +74,19 @@ func newSentRequest(kv *versioned.KV, partner *id.ID, partnerHistoricalPubKey,
func loadSentRequest(kv *versioned.KV, partner *id.ID, grp *cyclic.Group) (*SentRequest, error) { func loadSentRequest(kv *versioned.KV, partner *id.ID, grp *cyclic.Group) (*SentRequest, error) {
srKey := makeSentRequestKey(partner) srKey := makeSentRequestKey(partner)
obj, err := kv.Get(srKey, obj, err := kv.Get(srKey, currentSentRequestVersion)
currentSentRequestVersion)
// V0 Upgrade Path
if os.IsNotExist(err) {
obj2, err2 := kv.Get(makeOldSentRequestKey(partner), 0)
if err2 != nil {
jww.DEBUG.Printf("v0 loadSentRequest: %+v", err)
} else {
obj = obj2
err = nil
}
// Note: uses same encoding, just different keys
}
if err != nil { if err != nil {
return nil, errors.WithMessagef(err, "Failed to Load "+ return nil, errors.WithMessagef(err, "Failed to Load "+
...@@ -261,5 +273,11 @@ func (sr *SentRequest) getType() RequestType { ...@@ -261,5 +273,11 @@ func (sr *SentRequest) getType() RequestType {
} }
func makeSentRequestKey(partner *id.ID) string { func makeSentRequestKey(partner *id.ID) string {
return "sentRequest:" + base64.StdEncoding.EncodeToString(partner.Marshal()) return "sentRequest:" + partner.String()
}
// V0 Utility Functions
func makeOldSentRequestKey(partner *id.ID) string {
return fmt.Sprintf("Partner:%v", partner.String())
} }
...@@ -9,13 +9,14 @@ package utility ...@@ -9,13 +9,14 @@ package utility
import ( import (
"fmt" "fmt"
"gitlab.com/elixxir/client/storage/versioned" "gitlab.com/elixxir/client/storage/versioned"
"gitlab.com/elixxir/crypto/contact" "gitlab.com/elixxir/crypto/contact"
"gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/id"
"gitlab.com/xx_network/primitives/netTime" "gitlab.com/xx_network/primitives/netTime"
) )
const currentContactVersion = 0 const currentContactVersion = 1
func StoreContact(kv *versioned.KV, c contact.Contact) error { func StoreContact(kv *versioned.KV, c contact.Contact) error {
now := netTime.Now() now := netTime.Now()
...@@ -29,13 +30,14 @@ func StoreContact(kv *versioned.KV, c contact.Contact) error { ...@@ -29,13 +30,14 @@ func StoreContact(kv *versioned.KV, c contact.Contact) error {
return kv.Set(makeContactKey(c.ID), currentContactVersion, &obj) return kv.Set(makeContactKey(c.ID), currentContactVersion, &obj)
} }
func LoadContact(kv *versioned.KV, cid *id.ID) (contact.Contact, error) { func LoadContact(kv *versioned.KV, cid *id.ID) (contact.Contact, uint64, error) {
vo, err := kv.Get(makeContactKey(cid), currentContactVersion) vo, err := kv.Get(makeContactKey(cid), currentContactVersion)
if err != nil { if err != nil {
return contact.Contact{}, err return contact.Contact{}, vo.Version, err
} }
return contact.Unmarshal(vo.Data) c, err := contact.Unmarshal(vo.Data)
return c, vo.Version, err
} }
func DeleteContact(kv *versioned.KV, cid *id.ID) error { func DeleteContact(kv *versioned.KV, cid *id.ID) error {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment