diff --git a/go/characters/presencepoller.go b/go/characters/presencepoller.go index 87bfafa3..ddd2672a 100644 --- a/go/characters/presencepoller.go +++ b/go/characters/presencepoller.go @@ -26,8 +26,12 @@ func PresencePoller(getContact func(string) *gobjects.Contact, addContact func(c 0, c.Trusted, }) - c.SetAttribute("name", c.Name) - the.CwtchApp.EventBus().Publish(event.NewEvent(event.RequestProfileSave, map[event.Field]string{})) + + the.CwtchApp.EventBus().Publish(event.NewEvent(event.SetPeerAttribute, map[event.Field]string{ + event.RemotePeer: contacts[i], + event.Key: "name", + event.Data: c.Name, + })) } cxnState, found := the.Peer.GetPeers()[contacts[i]] diff --git a/go/gothings/gcd.go b/go/gothings/gcd.go index 5f87c740..5a94aa8f 100644 --- a/go/gothings/gcd.go +++ b/go/gothings/gcd.go @@ -68,8 +68,11 @@ func (this *GrandCentralDispatcher) sendMessage(message string, mID uint) { if len(this.CurrentOpenConversation()) == 32 { // SEND TO GROUP if !the.Peer.GetGroup(this.CurrentOpenConversation()).Accepted { - the.Peer.GetGroup(this.CurrentOpenConversation()).Accepted = true - the.CwtchApp.EventBus().Publish(event.NewEvent(event.RequestProfileSave, map[event.Field]string{})) + err := the.Peer.AcceptInvite(this.CurrentOpenConversation()) + if err != nil { + log.Errorf("tried to mark a nonexistent group as existed. bad!") + return + } c := this.UIState.GetContact(this.CurrentOpenConversation()) c.Trusted = true this.UIState.UpdateContact(c.Handle) @@ -211,7 +214,6 @@ func (this *GrandCentralDispatcher) importString(str string) { } the.Peer.JoinServer(group.GroupServer) - the.CwtchApp.EventBus().Publish(event.NewEvent(event.RequestProfileSave, map[event.Field]string{})) this.UIState.AddContact(&gobjects.Contact{ groupID, groupID[:12], @@ -285,7 +287,9 @@ func (this *GrandCentralDispatcher) popup(str string) { func (this *GrandCentralDispatcher) updateNick(nick string) { the.Peer.GetProfile().Name = nick - the.CwtchApp.EventBus().Publish(event.NewEvent(event.RequestProfileSave, map[event.Field]string{})) + the.CwtchApp.EventBus().Publish(event.NewEvent(event.SetProfileName, map[event.Field]string{ + event.ProfileName: nick, + })) } func (this *GrandCentralDispatcher) createGroup(server, groupName string) { @@ -304,8 +308,11 @@ func (this *GrandCentralDispatcher) createGroup(server, groupName string) { }) group := the.Peer.GetGroup(groupID) - group.SetAttribute("nick", groupName) - the.CwtchApp.EventBus().Publish(event.NewEvent(event.RequestProfileSave, map[event.Field]string{})) + the.CwtchApp.EventBus().Publish(event.NewEvent(event.SetGroupAttribute, map[event.Field]string{ + event.GroupID: groupID, + event.Key: "nick", + event.Data: groupName, + })) the.Peer.JoinServer(server) group.NewMessage = make(chan model.Message) diff --git a/go/gothings/uistate.go b/go/gothings/uistate.go index dab29b6f..3e00ec52 100644 --- a/go/gothings/uistate.go +++ b/go/gothings/uistate.go @@ -46,7 +46,13 @@ func (this *InterfaceState) AddContact(c *gobjects.Contact) { if c.Trusted { the.Peer.GetProfile().TrustPeer(c.Handle) } - the.CwtchApp.EventBus().Publish(event.NewEvent(event.RequestProfileSave, map[event.Field]string{})) + + the.CwtchApp.EventBus().Publish(event.NewEvent(event.SetPeerAttribute, map[event.Field]string{ + event.RemotePeer: c.Handle, + event.Key: "name", + event.Data: c.DisplayName, + })) + go the.Peer.PeerWithOnion(c.Handle) } @@ -54,8 +60,6 @@ func (this *InterfaceState) AddContact(c *gobjects.Contact) { this.contacts[c.Handle] = c this.parentGcd.AddContact(c.Handle, c.DisplayName, c.Image, c.Server, c.Badge, c.Status, c.Trusted) } - - the.CwtchApp.EventBus().Publish(event.NewEvent(event.RequestProfileSave, map[event.Field]string{})) } func (this *InterfaceState) GetContact(handle string) *gobjects.Contact { @@ -99,7 +103,6 @@ func (this *InterfaceState) AddMessage(m *gobjects.Message) { c.Badge++ this.UpdateContact(c.Handle) } - the.CwtchApp.EventBus().Publish(event.NewEvent(event.RequestProfileSave, map[event.Field]string{})) } func (this *InterfaceState) GetMessages(handle string) []*gobjects.Message { diff --git a/main.go b/main.go index c37e2bcb..6e5a1f12 100644 --- a/main.go +++ b/main.go @@ -2,7 +2,6 @@ package main import ( libapp "cwtch.im/cwtch/app" - "cwtch.im/cwtch/event" "cwtch.im/cwtch/model" "cwtch.im/ui/go/characters" "cwtch.im/ui/go/cwutil" @@ -13,6 +12,8 @@ import ( "git.openprivacy.ca/openprivacy/libricochet-go/connectivity" "git.openprivacy.ca/openprivacy/libricochet-go/log" "github.com/therecipe/qt/core" + "github.com/therecipe/qt/network" + "github.com/therecipe/qt/qml" "github.com/therecipe/qt/quick" "github.com/therecipe/qt/quickcontrols2" "github.com/therecipe/qt/widgets" @@ -63,6 +64,22 @@ func main() { go characters.PresencePoller(gcd.UIState.GetContact, gcd.UIState.AddContact, gcd.UIState.UpdateContact) go characters.GroupPoller(gcd.UIState.GetContact, gcd.UIState.UpdateContact) + // prevent qt from initiating network connections (possible deanon attempts!) + factory := qml.NewQQmlNetworkAccessManagerFactory() + factory.ConnectCreate(func(parent *core.QObject) *network.QNetworkAccessManager { + nam := network.NewQNetworkAccessManager(parent) + nam.SetNetworkAccessible(network.QNetworkAccessManager__NotAccessible) + proxy := network.NewQNetworkProxy() + proxy.SetHostName("0.0.0.0") + nam.SetProxy(proxy) + //nam.ConnectCreateRequest(func(op network.QNetworkAccessManager__Operation, originalReq *network.QNetworkRequest, outgoingData *core.QIODevice) *network.QNetworkReply { + // log.Errorf("network access request detected - possible remote content insertion bug!!!") + // return nil + //}) + return nam + }) + view.Engine().SetNetworkAccessManagerFactory(factory) + // here we go! view.Show() widgets.QApplication_Exec() @@ -127,7 +144,6 @@ func loadCwtchData(gcd *gothings.GrandCentralDispatcher) { log.Errorf("couldn't create one. is your cwtch folder writable?") os.Exit(1) } - the.CwtchApp.EventBus().Publish(event.NewEvent(event.RequestProfileSave, map[event.Field]string{})) } else { the.Peer = the.CwtchApp.PrimaryIdentity() }