Add support for unblocking peers
This commit is contained in:
parent
371fe89c9b
commit
3c67c47bb0
|
@ -9,8 +9,14 @@ const (
|
||||||
ProtocolEngineStatus = Type("ProtocolEngineStatus")
|
ProtocolEngineStatus = Type("ProtocolEngineStatus")
|
||||||
|
|
||||||
PeerRequest = Type("PeerRequest")
|
PeerRequest = Type("PeerRequest")
|
||||||
|
|
||||||
|
// Blocking Events both Block and Unblock have the same structure
|
||||||
|
// attributes:
|
||||||
|
// RemotePeer: [eg "chpr7qm6op5vfcg2pi4vllco3h6aa7exexc4rqwnlupqhoogx2zgd6qd"
|
||||||
BlockPeer = Type("BlockPeer")
|
BlockPeer = Type("BlockPeer")
|
||||||
JoinServer = Type("JoinServer")
|
UnblockPeer = Type("UnblockPeer")
|
||||||
|
|
||||||
|
JoinServer = Type("JoinServer")
|
||||||
|
|
||||||
ProtocolEngineStartListen = Type("ProtocolEngineStartListen")
|
ProtocolEngineStartListen = Type("ProtocolEngineStartListen")
|
||||||
ProtocolEngineStopped = Type("ProtocolEngineStopped")
|
ProtocolEngineStopped = Type("ProtocolEngineStopped")
|
||||||
|
|
|
@ -203,6 +203,19 @@ func (p *Profile) BlockPeer(onion string) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnblockPeer unblocks a contact
|
||||||
|
func (p *Profile) UnblockPeer(onion string) (err error) {
|
||||||
|
p.lock.Lock()
|
||||||
|
defer p.lock.Unlock()
|
||||||
|
contact, ok := p.Contacts[onion]
|
||||||
|
if ok {
|
||||||
|
contact.Blocked = false
|
||||||
|
} else {
|
||||||
|
err = errors.New("peer does not exist")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// BlockedPeers calculates a list of Peers who have been Blocked.
|
// BlockedPeers calculates a list of Peers who have been Blocked.
|
||||||
func (p *Profile) BlockedPeers() []string {
|
func (p *Profile) BlockedPeers() []string {
|
||||||
blockedPeers := []string{}
|
blockedPeers := []string{}
|
||||||
|
|
|
@ -36,6 +36,7 @@ type CwtchPeer interface {
|
||||||
|
|
||||||
TrustPeer(string) error
|
TrustPeer(string) error
|
||||||
BlockPeer(string) error
|
BlockPeer(string) error
|
||||||
|
UnblockPeer(string) error
|
||||||
AcceptInvite(string) error
|
AcceptInvite(string) error
|
||||||
RejectInvite(string)
|
RejectInvite(string)
|
||||||
DeleteContact(string)
|
DeleteContact(string)
|
||||||
|
@ -279,6 +280,13 @@ func (cp *cwtchPeer) BlockPeer(peer string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnblockPeer blocks an existing peer relationship.
|
||||||
|
func (cp *cwtchPeer) UnblockPeer(peer string) error {
|
||||||
|
err := cp.Profile.UnblockPeer(peer)
|
||||||
|
cp.eventBus.Publish(event.NewEvent(event.UnblockPeer, map[event.Field]string{event.RemotePeer: peer}))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// AcceptInvite accepts a given existing group invite
|
// AcceptInvite accepts a given existing group invite
|
||||||
func (cp *cwtchPeer) AcceptInvite(groupID string) error {
|
func (cp *cwtchPeer) AcceptInvite(groupID string) error {
|
||||||
err := cp.Profile.AcceptInvite(groupID)
|
err := cp.Profile.AcceptInvite(groupID)
|
||||||
|
|
|
@ -79,6 +79,7 @@ func NewProtocolEngine(identity identity.Identity, privateKey ed25519.PrivateKey
|
||||||
engine.eventManager.Subscribe(event.DeleteGroup, engine.queue.EventChannel)
|
engine.eventManager.Subscribe(event.DeleteGroup, engine.queue.EventChannel)
|
||||||
|
|
||||||
engine.eventManager.Subscribe(event.BlockPeer, engine.queue.EventChannel)
|
engine.eventManager.Subscribe(event.BlockPeer, engine.queue.EventChannel)
|
||||||
|
engine.eventManager.Subscribe(event.UnblockPeer, engine.queue.EventChannel)
|
||||||
for _, peer := range blockedPeers {
|
for _, peer := range blockedPeers {
|
||||||
engine.blocked.Store(peer, true)
|
engine.blocked.Store(peer, true)
|
||||||
}
|
}
|
||||||
|
@ -127,6 +128,11 @@ func (e *engine) eventHandler() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.eventManager.Publish(event.NewEvent(event.SendMessageToPeerError, map[event.Field]string{event.RemotePeer: ev.Data[event.RemotePeer], event.Signature: ev.EventID, event.Error: "peer is offline or the connection has yet to finalize"}))
|
e.eventManager.Publish(event.NewEvent(event.SendMessageToPeerError, map[event.Field]string{event.RemotePeer: ev.Data[event.RemotePeer], event.Signature: ev.EventID, event.Error: "peer is offline or the connection has yet to finalize"}))
|
||||||
}
|
}
|
||||||
|
case event.UnblockPeer:
|
||||||
|
// We simply remove the peer from our blocklist
|
||||||
|
// The UI has the responsibility to reinitiate contact with the peer.
|
||||||
|
// (this should happen periodically in any case)
|
||||||
|
e.blocked.Delete(ev.Data[event.RemotePeer])
|
||||||
case event.BlockPeer:
|
case event.BlockPeer:
|
||||||
e.blocked.Store(ev.Data[event.RemotePeer], true)
|
e.blocked.Store(ev.Data[event.RemotePeer], true)
|
||||||
connection, err := e.service.GetConnection(ev.Data[event.RemotePeer])
|
connection, err := e.service.GetConnection(ev.Data[event.RemotePeer])
|
||||||
|
|
|
@ -45,6 +45,7 @@ func NewProfileWriterStore(eventManager event.Manager, directory, password strin
|
||||||
go ps.eventHandler()
|
go ps.eventHandler()
|
||||||
|
|
||||||
ps.eventManager.Subscribe(event.BlockPeer, ps.queue.EventChannel)
|
ps.eventManager.Subscribe(event.BlockPeer, ps.queue.EventChannel)
|
||||||
|
ps.eventManager.Subscribe(event.UnblockPeer, ps.queue.EventChannel)
|
||||||
ps.eventManager.Subscribe(event.PeerCreated, ps.queue.EventChannel)
|
ps.eventManager.Subscribe(event.PeerCreated, ps.queue.EventChannel)
|
||||||
ps.eventManager.Subscribe(event.GroupCreated, ps.queue.EventChannel)
|
ps.eventManager.Subscribe(event.GroupCreated, ps.queue.EventChannel)
|
||||||
ps.eventManager.Subscribe(event.SetProfileName, ps.queue.EventChannel)
|
ps.eventManager.Subscribe(event.SetProfileName, ps.queue.EventChannel)
|
||||||
|
@ -158,6 +159,12 @@ func (ps *profileStore) eventHandler() {
|
||||||
contact.Blocked = true
|
contact.Blocked = true
|
||||||
ps.save()
|
ps.save()
|
||||||
}
|
}
|
||||||
|
case event.UnblockPeer:
|
||||||
|
contact, exists := ps.profile.GetContact(ev.Data[event.RemotePeer])
|
||||||
|
if exists {
|
||||||
|
contact.Blocked = false
|
||||||
|
ps.save()
|
||||||
|
}
|
||||||
case event.PeerCreated:
|
case event.PeerCreated:
|
||||||
var pp *model.PublicProfile
|
var pp *model.PublicProfile
|
||||||
json.Unmarshal([]byte(ev.Data[event.Data]), &pp)
|
json.Unmarshal([]byte(ev.Data[event.Data]), &pp)
|
||||||
|
|
Loading…
Reference in New Issue