forked from cwtch.im/cwtch
Merge branch 'autoblock' of cwtch.im/cwtch into protocolengine
This commit is contained in:
commit
e82c906099
|
@ -89,8 +89,17 @@ func (cp *cwtchPeer) Init(acn connectivity.ACN, eventBus *event.Manager) {
|
||||||
cp.eventBus.Subscribe(event.EncryptedGroupMessage, cp.queue.EventChannel)
|
cp.eventBus.Subscribe(event.EncryptedGroupMessage, cp.queue.EventChannel)
|
||||||
cp.eventBus.Subscribe(event.NewGroupInvite, cp.queue.EventChannel)
|
cp.eventBus.Subscribe(event.NewGroupInvite, cp.queue.EventChannel)
|
||||||
|
|
||||||
|
// Calculate a list of Peers who have been Blocked.
|
||||||
|
blockedPeers := []string{}
|
||||||
|
for _, contact := range cp.Profile.GetContacts() {
|
||||||
|
c, _ := cp.Profile.GetContact(contact)
|
||||||
|
if c.Blocked {
|
||||||
|
blockedPeers = append(blockedPeers, c.Onion)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Would be nice if ProtocolEngine did not need to explictly be given the Private Key.
|
// TODO: Would be nice if ProtocolEngine did not need to explictly be given the Private Key.
|
||||||
cp.engine = connections.NewProtocolEngine(cp.Profile.Ed25519PrivateKey, acn, eventBus)
|
cp.engine = connections.NewProtocolEngine(cp.Profile.Ed25519PrivateKey, acn, eventBus, blockedPeers)
|
||||||
cp.engine.Identity = identity.InitializeV3(cp.Profile.Name, &cp.Profile.Ed25519PrivateKey, &cp.Profile.Ed25519PublicKey)
|
cp.engine.Identity = identity.InitializeV3(cp.Profile.Name, &cp.Profile.Ed25519PrivateKey, &cp.Profile.Ed25519PublicKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ import (
|
||||||
"git.openprivacy.ca/openprivacy/libricochet-go/log"
|
"git.openprivacy.ca/openprivacy/libricochet-go/log"
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
"golang.org/x/crypto/ed25519"
|
"golang.org/x/crypto/ed25519"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Engine (ProtocolEngine) encapsulates the logic necessary to make and receive Cwtch connections.
|
// Engine (ProtocolEngine) encapsulates the logic necessary to make and receive Cwtch connections.
|
||||||
|
@ -30,13 +31,16 @@ type Engine struct {
|
||||||
// Engine State
|
// Engine State
|
||||||
started bool
|
started bool
|
||||||
|
|
||||||
|
// Blocklist
|
||||||
|
blocked sync.Map
|
||||||
|
|
||||||
// Pointer to the Global Event Manager
|
// Pointer to the Global Event Manager
|
||||||
eventManager *event.Manager
|
eventManager *event.Manager
|
||||||
privateKey ed25519.PrivateKey
|
privateKey ed25519.PrivateKey
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewProtocolEngine initializes a new engine that runs Cwtch using the given parameters
|
// NewProtocolEngine initializes a new engine that runs Cwtch using the given parameters
|
||||||
func NewProtocolEngine(privateKey ed25519.PrivateKey, acn connectivity.ACN, eventManager *event.Manager) *Engine {
|
func NewProtocolEngine(privateKey ed25519.PrivateKey, acn connectivity.ACN, eventManager *event.Manager, blockedPeers []string) *Engine {
|
||||||
engine := new(Engine)
|
engine := new(Engine)
|
||||||
engine.privateKey = privateKey
|
engine.privateKey = privateKey
|
||||||
engine.queue = event.NewEventQueue(100)
|
engine.queue = event.NewEventQueue(100)
|
||||||
|
@ -47,6 +51,7 @@ func NewProtocolEngine(privateKey ed25519.PrivateKey, acn connectivity.ACN, even
|
||||||
go engine.connectionsManager.AttemptReconnections()
|
go engine.connectionsManager.AttemptReconnections()
|
||||||
|
|
||||||
engine.eventManager = eventManager
|
engine.eventManager = eventManager
|
||||||
|
|
||||||
engine.eventManager.Subscribe(event.ProtocolEngineStartListen, engine.queue.EventChannel)
|
engine.eventManager.Subscribe(event.ProtocolEngineStartListen, engine.queue.EventChannel)
|
||||||
engine.eventManager.Subscribe(event.PeerRequest, engine.queue.EventChannel)
|
engine.eventManager.Subscribe(event.PeerRequest, engine.queue.EventChannel)
|
||||||
engine.eventManager.Subscribe(event.InvitePeerToGroup, engine.queue.EventChannel)
|
engine.eventManager.Subscribe(event.InvitePeerToGroup, engine.queue.EventChannel)
|
||||||
|
@ -54,6 +59,10 @@ func NewProtocolEngine(privateKey ed25519.PrivateKey, acn connectivity.ACN, even
|
||||||
engine.eventManager.Subscribe(event.SendMessageToGroup, engine.queue.EventChannel)
|
engine.eventManager.Subscribe(event.SendMessageToGroup, engine.queue.EventChannel)
|
||||||
engine.eventManager.Subscribe(event.SendMessageToPeer, engine.queue.EventChannel)
|
engine.eventManager.Subscribe(event.SendMessageToPeer, engine.queue.EventChannel)
|
||||||
|
|
||||||
|
engine.eventManager.Subscribe(event.BlockPeer, engine.queue.EventChannel)
|
||||||
|
for _, peer := range blockedPeers {
|
||||||
|
engine.blocked.Store(peer, true)
|
||||||
|
}
|
||||||
return engine
|
return engine
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,6 +88,8 @@ func (e *Engine) eventHandler() {
|
||||||
// TODO this will block.
|
// TODO this will block.
|
||||||
ppc.SendPacket([]byte(ev.Data["Message"]))
|
ppc.SendPacket([]byte(ev.Data["Message"]))
|
||||||
}
|
}
|
||||||
|
case event.BlockPeer:
|
||||||
|
e.blocked.Store(ev.Data["Peer"], true)
|
||||||
case event.ProtocolEngineStartListen:
|
case event.ProtocolEngineStartListen:
|
||||||
go e.listenFn()
|
go e.listenFn()
|
||||||
default:
|
default:
|
||||||
|
@ -133,19 +144,26 @@ func (e *Engine) listenFn() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// LookupContact returns that a contact is known and allowed to communicate for all cases.
|
// LookupContact is a V2 API Call, we want to reject all V2 Peers
|
||||||
|
// TODO Deprecate
|
||||||
func (e *Engine) LookupContact(hostname string, publicKey rsa.PublicKey) (allowed, known bool) {
|
func (e *Engine) LookupContact(hostname string, publicKey rsa.PublicKey) (allowed, known bool) {
|
||||||
return true, true
|
return false, false
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContactRequest is a V2 API Call needed to implement ContactRequestHandler Interface
|
||||||
|
// TODO Deprecate
|
||||||
|
func (e *Engine) ContactRequest(name string, message string) string {
|
||||||
|
return "Rejected"
|
||||||
}
|
}
|
||||||
|
|
||||||
// LookupContactV3 returns that a contact is known and allowed to communicate for all cases.
|
// LookupContactV3 returns that a contact is known and allowed to communicate for all cases.
|
||||||
func (e *Engine) LookupContactV3(hostname string, publicKey ed25519.PublicKey) (allowed, known bool) {
|
func (e *Engine) LookupContactV3(hostname string, publicKey ed25519.PublicKey) (allowed, known bool) {
|
||||||
return true, true
|
// TODO: We want to autoblock those that are blocked, The known parameter has no use anymore and should be
|
||||||
}
|
// disregarded by peers, so we set it to false.
|
||||||
|
if _, blocked := e.blocked.Load(hostname); blocked {
|
||||||
// ContactRequest needed to implement ContactRequestHandler Interface
|
return false, false
|
||||||
func (e *Engine) ContactRequest(name string, message string) string {
|
}
|
||||||
return "Accepted"
|
return true, false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shutdown tears down the eventHandler goroutine
|
// Shutdown tears down the eventHandler goroutine
|
||||||
|
|
Loading…
Reference in New Issue