forked from cwtch.im/cwtch
Merge branch 'getsetattr' of dan/cwtch into master
This commit is contained in:
commit
5a8dbabb3c
|
@ -18,7 +18,7 @@ func TestMessagePadding(t *testing.T) {
|
|||
|
||||
sarah.ProcessInvite(string(invite), alice.Onion)
|
||||
|
||||
group := alice.GetGroupByGroupID(gid)
|
||||
group := alice.GetGroup(gid)
|
||||
|
||||
c1, s1, err := sarah.EncryptMessageToGroup("Hello World 1", group.GroupID)
|
||||
t.Logf("Length of Encrypted Message: %v %v", len(c1), err)
|
||||
|
@ -51,7 +51,7 @@ func TestTranscriptConsistency(t *testing.T) {
|
|||
|
||||
sarah.ProcessInvite(string(invite), alice.Onion)
|
||||
|
||||
group := alice.GetGroupByGroupID(gid)
|
||||
group := alice.GetGroup(gid)
|
||||
|
||||
t.Logf("group: %v, sarah %v", group, sarah)
|
||||
|
||||
|
|
|
@ -308,7 +308,7 @@ func (p *Profile) GetContact(onion string) (*PublicProfile, bool) {
|
|||
// VerifyGroupMessage confirms the authenticity of a message given an onion, message and signature.
|
||||
func (p *Profile) VerifyGroupMessage(onion string, groupID string, message string, timestamp int32, ciphertext []byte, signature []byte) bool {
|
||||
|
||||
group := p.GetGroupByGroupID(groupID)
|
||||
group := p.GetGroup(groupID)
|
||||
if group == nil {
|
||||
return false
|
||||
}
|
||||
|
@ -356,8 +356,8 @@ func (p *Profile) StartGroupWithMessage(server string, initialMessage []byte) (g
|
|||
return
|
||||
}
|
||||
|
||||
// GetGroupByGroupID a pointer to a Group by the group Id, returns nil if no group found.
|
||||
func (p *Profile) GetGroupByGroupID(groupID string) (g *Group) {
|
||||
// GetGroup a pointer to a Group by the group Id, returns nil if no group found.
|
||||
func (p *Profile) GetGroup(groupID string) (g *Group) {
|
||||
p.lock.Lock()
|
||||
defer p.lock.Unlock()
|
||||
g = p.Groups[groupID]
|
||||
|
@ -433,7 +433,7 @@ func (p *Profile) EncryptMessageToGroup(message string, groupID string) ([]byte,
|
|||
return nil, nil, errors.New("group message is too long")
|
||||
}
|
||||
|
||||
group := p.GetGroupByGroupID(groupID)
|
||||
group := p.GetGroup(groupID)
|
||||
if group != nil {
|
||||
timestamp := time.Now().Unix()
|
||||
|
||||
|
|
|
@ -69,9 +69,9 @@ func TestRejectGroupInvite(t *testing.T) {
|
|||
|
||||
gid, invite, _ := alice.StartGroup("2c3kmoobnyghj2zw6pwv7d57yzld753auo3ugauezzpvfak3ahc4bdyd")
|
||||
sarah.ProcessInvite(string(invite), alice.Onion)
|
||||
group := alice.GetGroupByGroupID(gid)
|
||||
group := alice.GetGroup(gid)
|
||||
if len(sarah.Groups) == 1 {
|
||||
if sarah.GetGroupByGroupID(group.GroupID).Accepted {
|
||||
if sarah.GetGroup(group.GroupID).Accepted {
|
||||
t.Errorf("Group should not be accepted")
|
||||
}
|
||||
sarah.RejectInvite(group.GroupID)
|
||||
|
@ -95,18 +95,18 @@ func TestProfileGroup(t *testing.T) {
|
|||
t.Errorf("sarah should only be in 1 group instead: %v", sarah.GetGroups())
|
||||
}
|
||||
|
||||
group := alice.GetGroupByGroupID(gid)
|
||||
group := alice.GetGroup(gid)
|
||||
sarah.AcceptInvite(group.GroupID)
|
||||
c, s1, _ := sarah.EncryptMessageToGroup("Hello World", group.GroupID)
|
||||
alice.AttemptDecryption(c, s1)
|
||||
|
||||
gid2, invite2, _ := alice.StartGroup("2c3kmoobnyghj2zw6pwv7d57yzld753auo3ugauezzpvfak3ahc4bdyd")
|
||||
sarah.ProcessInvite(string(invite2), alice.Onion)
|
||||
group2 := alice.GetGroupByGroupID(gid2)
|
||||
group2 := alice.GetGroup(gid2)
|
||||
c2, s2, _ := sarah.EncryptMessageToGroup("Hello World", group2.GroupID)
|
||||
alice.AttemptDecryption(c2, s2)
|
||||
|
||||
sarahGroup := sarah.GetGroupByGroupID(group.GroupID)
|
||||
sarahGroup := sarah.GetGroup(group.GroupID)
|
||||
im := sarahGroup.GetInitialMessage()
|
||||
if string(im) != "Hello World" {
|
||||
t.Errorf("Initial Message was not stored properly: %v", im)
|
||||
|
|
|
@ -64,6 +64,13 @@ type CwtchPeer interface {
|
|||
GetContacts() []string
|
||||
GetContact(string) *model.PublicProfile
|
||||
|
||||
SetAttribute(string, string)
|
||||
GetAttribute(string) (string, bool)
|
||||
SetContactAttribute(string, string, string)
|
||||
GetContactAttribute(string, string) (string, bool)
|
||||
SetGroupAttribute(string, string, string)
|
||||
GetGroupAttribute(string, string) (string, bool)
|
||||
|
||||
Listen()
|
||||
StartPeersConnections()
|
||||
StartGroupConnections()
|
||||
|
@ -124,7 +131,7 @@ func (cp *cwtchPeer) ImportGroup(exportedInvite string) (err error) {
|
|||
|
||||
// ExportGroup serializes a group invite so it can be given offline
|
||||
func (cp *cwtchPeer) ExportGroup(groupID string) (string, error) {
|
||||
group := cp.Profile.GetGroupByGroupID(groupID)
|
||||
group := cp.Profile.GetGroup(groupID)
|
||||
if group != nil {
|
||||
invite, err := group.Invite(group.GetInitialMessage())
|
||||
if err == nil {
|
||||
|
@ -164,7 +171,7 @@ func (cp *cwtchPeer) GetGroups() []string {
|
|||
|
||||
// GetGroup returns a pointer to a specific group, nil if no group exists.
|
||||
func (cp *cwtchPeer) GetGroup(groupID string) *model.Group {
|
||||
return cp.Profile.GetGroupByGroupID(groupID)
|
||||
return cp.Profile.GetGroup(groupID)
|
||||
}
|
||||
|
||||
func (cp *cwtchPeer) AddContact(nick, onion string, trusted bool) {
|
||||
|
@ -221,7 +228,7 @@ func (cp *cwtchPeer) DeleteGroup(groupID string) {
|
|||
|
||||
// InviteOnionToGroup kicks off the invite process
|
||||
func (cp *cwtchPeer) InviteOnionToGroup(onion string, groupid string) error {
|
||||
group := cp.Profile.GetGroupByGroupID(groupid)
|
||||
group := cp.Profile.GetGroup(groupid)
|
||||
if group == nil {
|
||||
return errors.New("invalid group id")
|
||||
}
|
||||
|
@ -248,7 +255,7 @@ func (cp *cwtchPeer) SendMessageToGroup(groupid string, message string) error {
|
|||
// SendMessageToGroup attempts to sent the given message to the given group id.
|
||||
// It returns the signature of the message which can be used to identify it in any UX layer.
|
||||
func (cp *cwtchPeer) SendMessageToGroupTracked(groupid string, message string) (string, error) {
|
||||
group := cp.Profile.GetGroupByGroupID(groupid)
|
||||
group := cp.Profile.GetGroup(groupid)
|
||||
if group == nil {
|
||||
return "", errors.New("invalid group id")
|
||||
}
|
||||
|
@ -337,6 +344,60 @@ func (cp *cwtchPeer) StartGroupConnections() {
|
|||
}
|
||||
}
|
||||
|
||||
// SetAttribute sets an attribute for this profile and emits an event
|
||||
func (cp *cwtchPeer) SetAttribute(key string, val string) {
|
||||
cp.Profile.SetAttribute(key, val)
|
||||
cp.eventBus.Publish(event.NewEvent(event.SetAttribute, map[event.Field]string{
|
||||
event.Key: key,
|
||||
event.Data: val,
|
||||
}))
|
||||
}
|
||||
|
||||
// GetAttribute gets an attribute for the profile
|
||||
func (cp *cwtchPeer) GetAttribute(key string) (string, bool) {
|
||||
return cp.Profile.GetAttribute(key)
|
||||
}
|
||||
|
||||
// SetContactAttribute sets an attribute for the indicated contact and emits an event
|
||||
func (cp *cwtchPeer) SetContactAttribute(onion string, key string, val string) {
|
||||
if contact, ok := cp.Profile.GetContact(onion); ok {
|
||||
contact.SetAttribute(key, val)
|
||||
cp.eventBus.Publish(event.NewEvent(event.SetPeerAttribute, map[event.Field]string{
|
||||
event.RemotePeer: onion,
|
||||
event.Key: key,
|
||||
event.Data: val,
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
// GetContactAttribute gets an attribute for the indicated contact
|
||||
func (cp *cwtchPeer) GetContactAttribute(onion string, key string) (string, bool) {
|
||||
if contact, ok := cp.Profile.GetContact(onion); ok {
|
||||
return contact.GetAttribute(key)
|
||||
}
|
||||
return "", false
|
||||
}
|
||||
|
||||
// SetGroupAttribute sets an attribute for the indicated group and emits an event
|
||||
func (cp *cwtchPeer) SetGroupAttribute(gid string, key string, val string) {
|
||||
if group := cp.Profile.GetGroup(gid); group != nil {
|
||||
group.SetAttribute(key, val)
|
||||
cp.eventBus.Publish(event.NewEvent(event.SetGroupAttribute, map[event.Field]string{
|
||||
event.GroupID: gid,
|
||||
event.Key: key,
|
||||
event.Data: val,
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
// GetGroupAttribute gets an attribute for the indicated group
|
||||
func (cp *cwtchPeer) GetGroupAttribute(gid string, key string) (string, bool) {
|
||||
if group := cp.Profile.GetGroup(gid); group != nil {
|
||||
return group.GetAttribute(key)
|
||||
}
|
||||
return "", false
|
||||
}
|
||||
|
||||
// Shutdown kills all connections and cleans up all goroutines for the peer
|
||||
func (cp *cwtchPeer) Shutdown() {
|
||||
cp.shutdown = true
|
||||
|
|
|
@ -195,7 +195,7 @@ func (ps *profileStore) eventHandler() {
|
|||
log.Errorf("error setting attribute on peer %v peer does not exist", ev)
|
||||
}
|
||||
case event.SetGroupAttribute:
|
||||
group := ps.profile.GetGroupByGroupID(ev.Data[event.GroupID])
|
||||
group := ps.profile.GetGroup(ev.Data[event.GroupID])
|
||||
if group != nil {
|
||||
group.SetAttribute(ev.Data[event.Key], ev.Data[event.Data])
|
||||
ps.save()
|
||||
|
|
Loading…
Reference in New Issue