Add initial support for encrypting messages
This commit is contained in:
parent
0e8e81a607
commit
7d0d701c50
@ -118,6 +118,7 @@ func (config *Config) DeleteSession() {
|
|||||||
config.AuthCache.NextBatch = ""
|
config.AuthCache.NextBatch = ""
|
||||||
config.AuthCache.InitialSyncDone = false
|
config.AuthCache.InitialSyncDone = false
|
||||||
config.AccessToken = ""
|
config.AccessToken = ""
|
||||||
|
config.DeviceID = ""
|
||||||
config.Rooms = rooms.NewRoomCache(config.RoomListPath, config.StateDir, config.RoomCacheSize, config.RoomCacheAge, config.GetUserID)
|
config.Rooms = rooms.NewRoomCache(config.RoomListPath, config.StateDir, config.RoomCacheSize, config.RoomCacheAge, config.GetUserID)
|
||||||
config.PushRules = nil
|
config.PushRules = nil
|
||||||
|
|
||||||
|
2
go.mod
2
go.mod
@ -21,7 +21,7 @@ require (
|
|||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
|
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
|
||||||
gopkg.in/toast.v1 v1.0.0-20180812000517-0a84660828b2
|
gopkg.in/toast.v1 v1.0.0-20180812000517-0a84660828b2
|
||||||
gopkg.in/yaml.v2 v2.2.8
|
gopkg.in/yaml.v2 v2.2.8
|
||||||
maunium.net/go/mautrix v0.2.0-beta.4.0.20200426213554-b07cb6dc1f6b
|
maunium.net/go/mautrix v0.2.0-beta.4.0.20200427215704-fe82e2b914c8
|
||||||
maunium.net/go/mauview v0.1.0
|
maunium.net/go/mauview v0.1.0
|
||||||
maunium.net/go/tcell v0.1.0
|
maunium.net/go/tcell v0.1.0
|
||||||
)
|
)
|
||||||
|
2
go.sum
2
go.sum
@ -84,6 +84,8 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
|||||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
maunium.net/go/mautrix v0.2.0-beta.4.0.20200426213554-b07cb6dc1f6b h1:s3+wlMmmtpPUoOGVyS5nyR62htnwD/TEfA0NVbDk7zc=
|
maunium.net/go/mautrix v0.2.0-beta.4.0.20200426213554-b07cb6dc1f6b h1:s3+wlMmmtpPUoOGVyS5nyR62htnwD/TEfA0NVbDk7zc=
|
||||||
maunium.net/go/mautrix v0.2.0-beta.4.0.20200426213554-b07cb6dc1f6b/go.mod h1:SkGZzch8CvU2qKtNpYxtzZ0sQxfVEJ3IsVVLSUBUx9Y=
|
maunium.net/go/mautrix v0.2.0-beta.4.0.20200426213554-b07cb6dc1f6b/go.mod h1:SkGZzch8CvU2qKtNpYxtzZ0sQxfVEJ3IsVVLSUBUx9Y=
|
||||||
|
maunium.net/go/mautrix v0.2.0-beta.4.0.20200427215704-fe82e2b914c8 h1:xflYDdpEonVTaw1Diq4z3ZK72Y8/TutiQgKOrHgfOCA=
|
||||||
|
maunium.net/go/mautrix v0.2.0-beta.4.0.20200427215704-fe82e2b914c8/go.mod h1:SkGZzch8CvU2qKtNpYxtzZ0sQxfVEJ3IsVVLSUBUx9Y=
|
||||||
maunium.net/go/mauview v0.1.0 h1:x2WdkKI2zdriJuPAB0CKlwmnHGE7W9xfM5z6RgG+IIg=
|
maunium.net/go/mauview v0.1.0 h1:x2WdkKI2zdriJuPAB0CKlwmnHGE7W9xfM5z6RgG+IIg=
|
||||||
maunium.net/go/mauview v0.1.0/go.mod h1:og9WbzmWe9SNYNyOFlCv8qa9zMcOvG2nzRJ5vYyud9U=
|
maunium.net/go/mauview v0.1.0/go.mod h1:og9WbzmWe9SNYNyOFlCv8qa9zMcOvG2nzRJ5vYyud9U=
|
||||||
maunium.net/go/tcell v0.1.0 h1:XzsEoGCvOw5nac+tlkSLzQcliLYTN4PrtA7ar2ptjSM=
|
maunium.net/go/tcell v0.1.0 h1:XzsEoGCvOw5nac+tlkSLzQcliLYTN4PrtA7ar2ptjSM=
|
||||||
|
@ -870,8 +870,28 @@ func (c *Container) Redact(roomID id.RoomID, eventID id.EventID, reason string)
|
|||||||
func (c *Container) SendEvent(evt *muksevt.Event) (id.EventID, error) {
|
func (c *Container) SendEvent(evt *muksevt.Event) (id.EventID, error) {
|
||||||
defer debug.Recover()
|
defer debug.Recover()
|
||||||
|
|
||||||
c.client.UserTyping(evt.RoomID, false, 0)
|
_, _ = c.client.UserTyping(evt.RoomID, false, 0)
|
||||||
c.typing = 0
|
c.typing = 0
|
||||||
|
room := c.GetRoom(evt.RoomID)
|
||||||
|
if room != nil && room.Encrypted {
|
||||||
|
encrypted, err := c.crypto.EncryptMegolmEvent(evt.RoomID, evt.Type, evt.Content)
|
||||||
|
if err != nil {
|
||||||
|
if err != crypto.SessionExpired && err != crypto.SessionNotShared && err != crypto.NoGroupSession {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
debug.Print("Got", err, "while trying to encrypt message, sharing group session and trying again...")
|
||||||
|
err = c.crypto.ShareGroupSession(room.ID, room.GetMemberList())
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
encrypted, err = c.crypto.EncryptMegolmEvent(evt.RoomID, evt.Type, evt.Content)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
evt.Type = event.EventEncrypted
|
||||||
|
evt.Content = event.Content{Parsed: encrypted}
|
||||||
|
}
|
||||||
resp, err := c.client.SendMessageEvent(evt.RoomID, evt.Type, &evt.Content, mautrix.ReqSendEvent{TransactionID: evt.Unsigned.TransactionID})
|
resp, err := c.client.SendMessageEvent(evt.RoomID, evt.Type, &evt.Content, mautrix.ReqSendEvent{TransactionID: evt.Unsigned.TransactionID})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
@ -650,6 +650,17 @@ func (room *Room) GetMembers() map[id.UserID]*Member {
|
|||||||
return room.memberCache
|
return room.memberCache
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (room *Room) GetMemberList() []id.UserID {
|
||||||
|
members := room.GetMembers()
|
||||||
|
memberList := make([]id.UserID, len(members))
|
||||||
|
index := 0
|
||||||
|
for userID, _ := range members {
|
||||||
|
memberList[index] = userID
|
||||||
|
index++
|
||||||
|
}
|
||||||
|
return memberList
|
||||||
|
}
|
||||||
|
|
||||||
// GetMember returns the member with the given MXID.
|
// GetMember returns the member with the given MXID.
|
||||||
// If the member doesn't exist, nil is returned.
|
// If the member doesn't exist, nil is returned.
|
||||||
func (room *Room) GetMember(userID id.UserID) *Member {
|
func (room *Room) GetMember(userID id.UserID) *Member {
|
||||||
|
@ -83,7 +83,7 @@ func (es EventSource) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type EventHandler func(source EventSource, event *event.Event)
|
type EventHandler func(source EventSource, event *event.Event)
|
||||||
type SyncHandler func(resp *mautrix.RespSync)
|
type SyncHandler func(resp *mautrix.RespSync, since string)
|
||||||
|
|
||||||
type GomuksSyncer struct {
|
type GomuksSyncer struct {
|
||||||
rooms *rooms.RoomCache
|
rooms *rooms.RoomCache
|
||||||
@ -122,7 +122,7 @@ func (s *GomuksSyncer) ProcessResponse(res *mautrix.RespSync, since string) (err
|
|||||||
s.Progress.Step()
|
s.Progress.Step()
|
||||||
}
|
}
|
||||||
wait.Add(len(s.globalListeners))
|
wait.Add(len(s.globalListeners))
|
||||||
s.notifyGlobalListeners(res, callback)
|
s.notifyGlobalListeners(res, since, callback)
|
||||||
wait.Wait()
|
wait.Wait()
|
||||||
|
|
||||||
s.processSyncEvents(nil, res.Presence.Events, EventSourcePresence)
|
s.processSyncEvents(nil, res.Presence.Events, EventSourcePresence)
|
||||||
@ -158,10 +158,10 @@ func (s *GomuksSyncer) ProcessResponse(res *mautrix.RespSync, since string) (err
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *GomuksSyncer) notifyGlobalListeners(res *mautrix.RespSync, callback func()) {
|
func (s *GomuksSyncer) notifyGlobalListeners(res *mautrix.RespSync, since string, callback func()) {
|
||||||
for _, listener := range s.globalListeners {
|
for _, listener := range s.globalListeners {
|
||||||
go func(listener SyncHandler) {
|
go func(listener SyncHandler) {
|
||||||
listener(res)
|
listener(res, since)
|
||||||
callback()
|
callback()
|
||||||
}(listener)
|
}(listener)
|
||||||
}
|
}
|
||||||
@ -288,6 +288,7 @@ func (s *GomuksSyncer) GetFilterJSON(_ id.UserID) *mautrix.Filter {
|
|||||||
event.StateCanonicalAlias,
|
event.StateCanonicalAlias,
|
||||||
event.StatePowerLevels,
|
event.StatePowerLevels,
|
||||||
event.StateTombstone,
|
event.StateTombstone,
|
||||||
|
event.StateEncryption,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Timeline: mautrix.FilterPart{
|
Timeline: mautrix.FilterPart{
|
||||||
|
Loading…
Reference in New Issue
Block a user