diff --git a/model/group.go b/model/group.go index b43fbcc..d28db70 100644 --- a/model/group.go +++ b/model/group.go @@ -26,6 +26,7 @@ type Group struct { Owner string IsCompromised bool InitialMessage []byte + Attributes map[string]string lock sync.Mutex NewMessage chan Message `json:"-"` } @@ -49,6 +50,7 @@ func NewGroup(server string) (*Group, error) { } copy(group.GroupKey[:], groupKey[:]) group.Owner = "self" + group.Attributes = make(map[string]string) return group, nil } @@ -152,3 +154,18 @@ func (g *Group) DecryptMessage(ciphertext []byte) (bool, *protocol.DecryptedGrou } return false, nil } + +// SetAttribute allows applications to store arbitrary configuration info at the group level. +func (g *Group) SetAttribute(name string, value string) { + g.lock.Lock() + defer g.lock.Unlock() + g.Attributes[name] = value +} + +// GetAttribute returns the value of a value set with SetAttribute. If no such value has been set exists is set to false. +func (g *Group) GetAttribute(name string) (value string, exists bool) { + g.lock.Lock() + defer g.lock.Unlock() + value, exists = g.Attributes[name] + return +} diff --git a/model/group_test.go b/model/group_test.go index 07ed778..233eaac 100644 --- a/model/group_test.go +++ b/model/group_test.go @@ -23,5 +23,10 @@ func TestGroup(t *testing.T) { t.Errorf("group encryption was invalid, or returned wrong message decrypted:%v message:%v", ok, message) return } + g.SetAttribute("test", "test_value") + value, exists := g.GetAttribute("test") + if !exists || value != "test_value" { + t.Errorf("Custom Attribute Should have been set, instead %v %v", exists, value) + } t.Logf("Got message %v", message) }