aboutsummaryrefslogtreecommitdiffstats
path: root/identity
diff options
context:
space:
mode:
Diffstat (limited to 'identity')
-rw-r--r--identity/bare.go8
-rw-r--r--identity/identity.go18
-rw-r--r--identity/identity_actions_test.go8
-rw-r--r--identity/identity_stub.go4
-rw-r--r--identity/identity_test.go45
-rw-r--r--identity/interface.go4
-rw-r--r--identity/key.go5
-rw-r--r--identity/version.go12
-rw-r--r--identity/version_test.go3
9 files changed, 60 insertions, 47 deletions
diff --git a/identity/bare.go b/identity/bare.go
index 26ecdf03..a02ec790 100644
--- a/identity/bare.go
+++ b/identity/bare.go
@@ -112,13 +112,13 @@ func (i *Bare) AvatarUrl() string {
}
// Keys return the last version of the valid keys
-func (i *Bare) Keys() []Key {
- return []Key{}
+func (i *Bare) Keys() []*Key {
+ return nil
}
// ValidKeysAtTime return the set of keys valid at a given lamport time
-func (i *Bare) ValidKeysAtTime(time lamport.Time) []Key {
- return []Key{}
+func (i *Bare) ValidKeysAtTime(_ lamport.Time) []*Key {
+ return nil
}
// DisplayName return a non-empty string to display, representing the
diff --git a/identity/identity.go b/identity/identity.go
index 655afd31..c33a8818 100644
--- a/identity/identity.go
+++ b/identity/identity.go
@@ -275,7 +275,7 @@ type Mutator struct {
Name string
Email string
AvatarUrl string
- Keys []Key
+ Keys []*Key
}
// Mutate allow to create a new version of the Identity
@@ -507,13 +507,13 @@ func (i *Identity) AvatarUrl() string {
}
// Keys return the last version of the valid keys
-func (i *Identity) Keys() []Key {
+func (i *Identity) Keys() []*Key {
return i.lastVersion().keys
}
// ValidKeysAtTime return the set of keys valid at a given lamport time
-func (i *Identity) ValidKeysAtTime(time lamport.Time) []Key {
- var result []Key
+func (i *Identity) ValidKeysAtTime(time lamport.Time) []*Key {
+ var result []*Key
for _, v := range i.versions {
if v.time > time {
@@ -550,11 +550,11 @@ func (i *Identity) LastModification() timestamp.Timestamp {
}
// SetMetadata store arbitrary metadata along the last not-commit Version.
-// If the Version has been commit to git already, a new version is added and will need to be
+// If the Version has been commit to git already, a new identical version is added and will need to be
// commit.
func (i *Identity) SetMetadata(key string, value string) {
if i.lastVersion().commitHash != "" {
-
+ i.versions = append(i.versions, i.lastVersion().Clone())
}
i.lastVersion().SetMetadata(key, value)
}
@@ -588,3 +588,9 @@ func (i *Identity) MutableMetadata() map[string]string {
return metadata
}
+
+// addVersionForTest add a new version to the identity
+// Only for testing !
+func (i *Identity) addVersionForTest(version *Version) {
+ i.versions = append(i.versions, version)
+}
diff --git a/identity/identity_actions_test.go b/identity/identity_actions_test.go
index 142ffaa6..713b3246 100644
--- a/identity/identity_actions_test.go
+++ b/identity/identity_actions_test.go
@@ -48,14 +48,14 @@ func TestPushPull(t *testing.T) {
// Update both
- identity1.AddVersion(&Version{
+ identity1.addVersionForTest(&Version{
name: "name1b",
email: "email1b",
})
err = identity1.Commit(repoA)
require.NoError(t, err)
- identity2.AddVersion(&Version{
+ identity2.addVersionForTest(&Version{
name: "name2b",
email: "email2b",
})
@@ -92,7 +92,7 @@ func TestPushPull(t *testing.T) {
// Concurrent update
- identity1.AddVersion(&Version{
+ identity1.addVersionForTest(&Version{
name: "name1c",
email: "email1c",
})
@@ -102,7 +102,7 @@ func TestPushPull(t *testing.T) {
identity1B, err := ReadLocal(repoB, identity1.Id())
require.NoError(t, err)
- identity1B.AddVersion(&Version{
+ identity1B.addVersionForTest(&Version{
name: "name1concurrent",
email: "email1concurrent",
})
diff --git a/identity/identity_stub.go b/identity/identity_stub.go
index be52ffc0..7e2fcd94 100644
--- a/identity/identity_stub.go
+++ b/identity/identity_stub.go
@@ -64,11 +64,11 @@ func (IdentityStub) AvatarUrl() string {
panic("identities needs to be properly loaded with identity.ReadLocal()")
}
-func (IdentityStub) Keys() []Key {
+func (IdentityStub) Keys() []*Key {
panic("identities needs to be properly loaded with identity.ReadLocal()")
}
-func (IdentityStub) ValidKeysAtTime(time lamport.Time) []Key {
+func (IdentityStub) ValidKeysAtTime(_ lamport.Time) []*Key {
panic("identities needs to be properly loaded with identity.ReadLocal()")
}
diff --git a/identity/identity_test.go b/identity/identity_test.go
index f91c548f..ee6ccdf7 100644
--- a/identity/identity_test.go
+++ b/identity/identity_test.go
@@ -44,7 +44,7 @@ func TestIdentityCommitLoad(t *testing.T) {
time: 100,
name: "René Descartes",
email: "rene.descartes@example.com",
- keys: []Key{
+ keys: []*Key{
{PubKey: "pubkeyA"},
},
},
@@ -52,7 +52,7 @@ func TestIdentityCommitLoad(t *testing.T) {
time: 200,
name: "René Descartes",
email: "rene.descartes@example.com",
- keys: []Key{
+ keys: []*Key{
{PubKey: "pubkeyB"},
},
},
@@ -60,7 +60,7 @@ func TestIdentityCommitLoad(t *testing.T) {
time: 201,
name: "René Descartes",
email: "rene.descartes@example.com",
- keys: []Key{
+ keys: []*Key{
{PubKey: "pubkeyC"},
},
},
@@ -79,20 +79,25 @@ func TestIdentityCommitLoad(t *testing.T) {
// add more version
- identity.AddVersion(&Version{
+ identity.Mutate(func(orig Mutator) Mutator {
+
+ return orig
+ })
+
+ identity.addVersionForTest(&Version{
time: 201,
name: "René Descartes",
email: "rene.descartes@example.com",
- keys: []Key{
+ keys: []*Key{
{PubKey: "pubkeyD"},
},
})
- identity.AddVersion(&Version{
+ identity.addVersionForTest(&Version{
time: 300,
name: "René Descartes",
email: "rene.descartes@example.com",
- keys: []Key{
+ keys: []*Key{
{PubKey: "pubkeyE"},
},
})
@@ -123,7 +128,7 @@ func TestIdentity_ValidKeysAtTime(t *testing.T) {
time: 100,
name: "René Descartes",
email: "rene.descartes@example.com",
- keys: []Key{
+ keys: []*Key{
{PubKey: "pubkeyA"},
},
},
@@ -131,7 +136,7 @@ func TestIdentity_ValidKeysAtTime(t *testing.T) {
time: 200,
name: "René Descartes",
email: "rene.descartes@example.com",
- keys: []Key{
+ keys: []*Key{
{PubKey: "pubkeyB"},
},
},
@@ -139,7 +144,7 @@ func TestIdentity_ValidKeysAtTime(t *testing.T) {
time: 201,
name: "René Descartes",
email: "rene.descartes@example.com",
- keys: []Key{
+ keys: []*Key{
{PubKey: "pubkeyC"},
},
},
@@ -147,7 +152,7 @@ func TestIdentity_ValidKeysAtTime(t *testing.T) {
time: 201,
name: "René Descartes",
email: "rene.descartes@example.com",
- keys: []Key{
+ keys: []*Key{
{PubKey: "pubkeyD"},
},
},
@@ -155,7 +160,7 @@ func TestIdentity_ValidKeysAtTime(t *testing.T) {
time: 300,
name: "René Descartes",
email: "rene.descartes@example.com",
- keys: []Key{
+ keys: []*Key{
{PubKey: "pubkeyE"},
},
},
@@ -163,13 +168,13 @@ func TestIdentity_ValidKeysAtTime(t *testing.T) {
}
assert.Nil(t, identity.ValidKeysAtTime(10))
- assert.Equal(t, identity.ValidKeysAtTime(100), []Key{{PubKey: "pubkeyA"}})
- assert.Equal(t, identity.ValidKeysAtTime(140), []Key{{PubKey: "pubkeyA"}})
- assert.Equal(t, identity.ValidKeysAtTime(200), []Key{{PubKey: "pubkeyB"}})
- assert.Equal(t, identity.ValidKeysAtTime(201), []Key{{PubKey: "pubkeyD"}})
- assert.Equal(t, identity.ValidKeysAtTime(202), []Key{{PubKey: "pubkeyD"}})
- assert.Equal(t, identity.ValidKeysAtTime(300), []Key{{PubKey: "pubkeyE"}})
- assert.Equal(t, identity.ValidKeysAtTime(3000), []Key{{PubKey: "pubkeyE"}})
+ assert.Equal(t, identity.ValidKeysAtTime(100), []*Key{{PubKey: "pubkeyA"}})
+ assert.Equal(t, identity.ValidKeysAtTime(140), []*Key{{PubKey: "pubkeyA"}})
+ assert.Equal(t, identity.ValidKeysAtTime(200), []*Key{{PubKey: "pubkeyB"}})
+ assert.Equal(t, identity.ValidKeysAtTime(201), []*Key{{PubKey: "pubkeyD"}})
+ assert.Equal(t, identity.ValidKeysAtTime(202), []*Key{{PubKey: "pubkeyD"}})
+ assert.Equal(t, identity.ValidKeysAtTime(300), []*Key{{PubKey: "pubkeyE"}})
+ assert.Equal(t, identity.ValidKeysAtTime(3000), []*Key{{PubKey: "pubkeyE"}})
}
// Test the immutable or mutable metadata search
@@ -189,7 +194,7 @@ func TestMetadata(t *testing.T) {
assertHasKeyValue(t, identity.MutableMetadata(), "key1", "value1")
// try override
- identity.AddVersion(&Version{
+ identity.addVersionForTest(&Version{
name: "René Descartes",
email: "rene.descartes@example.com",
})
diff --git a/identity/interface.go b/identity/interface.go
index 3407d7ab..d138362d 100644
--- a/identity/interface.go
+++ b/identity/interface.go
@@ -21,10 +21,10 @@ type Interface interface {
AvatarUrl() string
// Keys return the last version of the valid keys
- Keys() []Key
+ Keys() []*Key
// ValidKeysAtTime return the set of keys valid at a given lamport time
- ValidKeysAtTime(time lamport.Time) []Key
+ ValidKeysAtTime(time lamport.Time) []*Key
// DisplayName return a non-empty string to display, representing the
// identity, based on the non-empty values.
diff --git a/identity/key.go b/identity/key.go
index 90edfb60..cc948394 100644
--- a/identity/key.go
+++ b/identity/key.go
@@ -11,3 +11,8 @@ func (k *Key) Validate() error {
return nil
}
+
+func (k *Key) Clone() *Key {
+ clone := *k
+ return &clone
+}
diff --git a/identity/version.go b/identity/version.go
index 85195049..f9c7b262 100644
--- a/identity/version.go
+++ b/identity/version.go
@@ -30,7 +30,7 @@ type Version struct {
// The set of keys valid at that time, from this version onward, until they get removed
// in a new version. This allow to have multiple key for the same identity (e.g. one per
// device) as well as revoke key.
- keys []Key
+ keys []*Key
// This optional array is here to ensure a better randomness of the identity id to avoid collisions.
// It has no functional purpose and should be ignored.
@@ -53,24 +53,22 @@ type VersionJSON struct {
Name string `json:"name,omitempty"`
Email string `json:"email,omitempty"`
AvatarUrl string `json:"avatar_url,omitempty"`
- Keys []Key `json:"pub_keys,omitempty"`
+ Keys []*Key `json:"pub_keys,omitempty"`
Nonce []byte `json:"nonce,omitempty"`
Metadata map[string]string `json:"metadata,omitempty"`
}
// Make a deep copy
func (v *Version) Clone() *Version {
-
clone := &Version{
name: v.name,
email: v.email,
avatarURL: v.avatarURL,
- keys: make([]Key, len(v.keys)),
- metadata: make(map[string]string),
+ keys: make([]*Key, len(v.keys)),
}
- for i, op := range opp.Operations {
- clone.Operations[i] = op
+ for i, key := range v.keys {
+ clone.keys[i] = key.Clone()
}
return clone
diff --git a/identity/version_test.go b/identity/version_test.go
index 8c4c8d99..25848eb5 100644
--- a/identity/version_test.go
+++ b/identity/version_test.go
@@ -9,11 +9,10 @@ import (
func TestVersionSerialize(t *testing.T) {
before := &Version{
- login: "login",
name: "name",
email: "email",
avatarURL: "avatarUrl",
- keys: []Key{
+ keys: []*Key{
{
Fingerprint: "fingerprint1",
PubKey: "pubkey1",