Skip to content
Snippets Groups Projects
Commit ce863399 authored by Niamh Nikali's avatar Niamh Nikali
Browse files

Add memoization, remove user ID key

parent aed2fce2
No related branches found
No related tags found
No related merge requests found
......@@ -24,6 +24,7 @@ import (
// Session object, backed by encrypted filestore
type Session struct {
kv *VersionedKV
userData *UserData
mux sync.Mutex
}
......
......
......@@ -51,12 +51,16 @@ type UserData struct {
const currentUserDataVersion = 0
func makeUserDataKey(userID *id.ID) string {
return MakeKeyPrefix("UserData", currentUserDataVersion) + userID.String()
func makeUserDataKey() string {
return MakeKeyPrefix("UserData", currentUserDataVersion)
}
func (s *Session) GetUserData(userID *id.ID) (*UserData, error) {
obj, err := s.Get(makeUserDataKey(userID))
func (s *Session) GetUserData() (*UserData, error) {
if s.userData != nil {
// We already got this and don't need to get it again
return s.userData, nil
}
obj, err := s.Get(makeUserDataKey())
if err != nil {
return nil, err
}
......@@ -69,11 +73,15 @@ func (s *Session) GetUserData(userID *id.ID) (*UserData, error) {
if err != nil {
return nil, err
}
s.userData = &result
return &result, nil
}
// Make changes to the user data after getting it, then
// commit those changes to the ekv store using this
// I haven't added a mutex to the user data because it's only
// created once. If you add modification to the user data structure,
// please
func (s *Session) CommitUserData(data *UserData) error {
// Serialize the data
var userDataBuffer bytes.Buffer
......@@ -88,5 +96,5 @@ func (s *Session) CommitUserData(data *UserData) error {
Timestamp: time.Now(),
Data: userDataBuffer.Bytes(),
}
return s.Set(makeUserDataKey(data.ThisUser.User), obj)
return s.Set(makeUserDataKey(), obj)
}
......@@ -46,7 +46,7 @@ func TestSession_CommitUserData(t *testing.T) {
if err != nil {
t.Fatal(err)
}
retrievedData, err := session.GetUserData(expectedData.ThisUser.User)
retrievedData, err := session.GetUserData()
if err != nil {
t.Fatal(err)
}
......@@ -79,8 +79,8 @@ func TestSession_CommitUserData(t *testing.T) {
if !reflect.DeepEqual(retrievedData.E2EGrp, expectedData.E2EGrp) {
t.Error("e2e groups didn't match")
}
if !reflect.DeepEqual(retrievedData.RSAPrivateKey, expectedData.RSAPrivateKey) {
t.Error("rsa keys don't match")
if retrievedData.RSAPrivateKey.D.Cmp(expectedData.RSAPrivateKey.D) != 0 {
t.Error("rsa D doesn't match")
}
if !bytes.Equal(retrievedData.Salt, expectedData.Salt) {
t.Error("salts don't match")
......
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment