wip encrypted parent event
This commit is contained in:
@@ -86,9 +86,9 @@ func (b *Bot) SendError(ctx context.Context, roomID id.RoomID, message string) {
|
|||||||
|
|
||||||
// SendNotice sends a notice message to the matrix room
|
// SendNotice sends a notice message to the matrix room
|
||||||
func (b *Bot) SendNotice(ctx context.Context, roomID id.RoomID, message string) {
|
func (b *Bot) SendNotice(ctx context.Context, roomID id.RoomID, message string) {
|
||||||
content := format.RenderMarkdown(message, true, true)
|
parsed := format.RenderMarkdown(message, true, true)
|
||||||
content.MsgType = event.MsgNotice
|
parsed.MsgType = event.MsgNotice
|
||||||
_, err := b.lp.Send(roomID, &content)
|
_, err := b.lp.Send(roomID, &event.Content{Parsed: &parsed})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sentry.GetHubFromContext(ctx).CaptureException(err)
|
sentry.GetHubFromContext(ctx).CaptureException(err)
|
||||||
}
|
}
|
||||||
|
|||||||
19
bot/email.go
19
bot/email.go
@@ -5,7 +5,6 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"maunium.net/go/mautrix/crypto"
|
|
||||||
"maunium.net/go/mautrix/event"
|
"maunium.net/go/mautrix/event"
|
||||||
"maunium.net/go/mautrix/format"
|
"maunium.net/go/mautrix/format"
|
||||||
"maunium.net/go/mautrix/id"
|
"maunium.net/go/mautrix/id"
|
||||||
@@ -208,10 +207,13 @@ type parentEmail struct {
|
|||||||
func (b *Bot) getParentEvent(evt *event.Event) (id.EventID, *event.Event) {
|
func (b *Bot) getParentEvent(evt *event.Event) (id.EventID, *event.Event) {
|
||||||
content := evt.Content.AsMessage()
|
content := evt.Content.AsMessage()
|
||||||
threadID := utils.EventParent(evt.ID, content)
|
threadID := utils.EventParent(evt.ID, content)
|
||||||
|
b.log.Debug("looking up for the parent event of %s within thread %s", evt.ID, threadID)
|
||||||
if threadID == evt.ID {
|
if threadID == evt.ID {
|
||||||
|
b.log.Debug("event %s is the thread itself")
|
||||||
return threadID, evt
|
return threadID, evt
|
||||||
}
|
}
|
||||||
lastEventID := b.getLastEventID(evt.RoomID, threadID)
|
lastEventID := b.getLastEventID(evt.RoomID, threadID)
|
||||||
|
b.log.Debug("the last event of the thread %s (and parent of the %s) is %s", threadID, evt.ID, lastEventID)
|
||||||
if lastEventID == evt.ID {
|
if lastEventID == evt.ID {
|
||||||
return threadID, evt
|
return threadID, evt
|
||||||
}
|
}
|
||||||
@@ -220,24 +222,21 @@ func (b *Bot) getParentEvent(evt *event.Event) (id.EventID, *event.Event) {
|
|||||||
b.log.Error("cannot get parent event: %v", err)
|
b.log.Error("cannot get parent event: %v", err)
|
||||||
return threadID, nil
|
return threadID, nil
|
||||||
}
|
}
|
||||||
|
utils.ParseContent(parentEvt, parentEvt.Type)
|
||||||
|
b.log.Debug("type of the parsed content is: %T", parentEvt.Content.Parsed)
|
||||||
|
|
||||||
if !b.lp.GetStore().IsEncrypted(evt.RoomID) {
|
if !b.lp.GetStore().IsEncrypted(evt.RoomID) {
|
||||||
utils.ParseContent(parentEvt, event.EventMessage)
|
b.log.Debug("found the last event (plaintext) of the thread %s (and parent of the %s): %+v", threadID, evt.ID, parentEvt)
|
||||||
return threadID, parentEvt
|
return threadID, parentEvt
|
||||||
}
|
}
|
||||||
|
|
||||||
utils.ParseContent(parentEvt, event.EventEncrypted)
|
|
||||||
decrypted, err := b.lp.GetMachine().DecryptMegolmEvent(evt)
|
decrypted, err := b.lp.GetMachine().DecryptMegolmEvent(evt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, crypto.IncorrectEncryptedContentType) || errors.Is(err, crypto.UnsupportedAlgorithm) {
|
|
||||||
utils.ParseContent(parentEvt, event.EventMessage)
|
|
||||||
return threadID, parentEvt
|
|
||||||
}
|
|
||||||
b.log.Error("cannot decrypt parent event: %v", err)
|
b.log.Error("cannot decrypt parent event: %v", err)
|
||||||
return threadID, nil
|
return threadID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
utils.ParseContent(decrypted, event.EventMessage)
|
b.log.Debug("found the last event (decrypted) of the thread %s (and parent of the %s): %+v", threadID, evt.ID, parentEvt)
|
||||||
return threadID, decrypted
|
return threadID, decrypted
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,7 +285,7 @@ func (b *Bot) saveSentMetadata(ctx context.Context, queued bool, threadID id.Eve
|
|||||||
content := email.Content(threadID, cfg.ContentOptions())
|
content := email.Content(threadID, cfg.ContentOptions())
|
||||||
notice := format.RenderMarkdown(text, true, true)
|
notice := format.RenderMarkdown(text, true, true)
|
||||||
notice.MsgType = event.MsgNotice
|
notice.MsgType = event.MsgNotice
|
||||||
msgContent, ok := content.Parsed.(event.MessageEventContent)
|
msgContent, ok := content.Parsed.(*event.MessageEventContent)
|
||||||
if !ok {
|
if !ok {
|
||||||
b.Error(ctx, evt.RoomID, "cannot parse message")
|
b.Error(ctx, evt.RoomID, "cannot parse message")
|
||||||
return
|
return
|
||||||
@@ -294,7 +293,7 @@ func (b *Bot) saveSentMetadata(ctx context.Context, queued bool, threadID id.Eve
|
|||||||
msgContent.Body = notice.Body
|
msgContent.Body = notice.Body
|
||||||
msgContent.FormattedBody = notice.FormattedBody
|
msgContent.FormattedBody = notice.FormattedBody
|
||||||
content.Parsed = msgContent
|
content.Parsed = msgContent
|
||||||
msgID, err := b.lp.Send(evt.RoomID, &content)
|
msgID, err := b.lp.Send(evt.RoomID, content)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Error(ctx, evt.RoomID, "cannot send notice: %v", err)
|
b.Error(ctx, evt.RoomID, "cannot send notice: %v", err)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -83,9 +83,9 @@ func initBot(cfg *config.Config) {
|
|||||||
NoEncryption: cfg.NoEncryption,
|
NoEncryption: cfg.NoEncryption,
|
||||||
AccountDataSecret: cfg.DataSecret,
|
AccountDataSecret: cfg.DataSecret,
|
||||||
LPLogger: mxlog,
|
LPLogger: mxlog,
|
||||||
APILogger: logger.New("api.", cfg.LogLevel),
|
APILogger: logger.New("api.", "INFO"),
|
||||||
StoreLogger: logger.New("store.", cfg.LogLevel),
|
StoreLogger: logger.New("store.", "INFO"),
|
||||||
CryptoLogger: logger.New("olm.", cfg.LogLevel),
|
CryptoLogger: logger.New("olm.", "INFO"),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// nolint // Fatal = panic, not os.Exit()
|
// nolint // Fatal = panic, not os.Exit()
|
||||||
|
|||||||
4
go.mod
4
go.mod
@@ -2,7 +2,7 @@ module gitlab.com/etke.cc/postmoogle
|
|||||||
|
|
||||||
go 1.18
|
go 1.18
|
||||||
|
|
||||||
// replace gitlab.com/etke.cc/linkpearl => ../linkpearl
|
replace gitlab.com/etke.cc/linkpearl => ../linkpearl
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/emersion/go-msgauth v0.6.6
|
github.com/emersion/go-msgauth v0.6.6
|
||||||
@@ -21,7 +21,7 @@ require (
|
|||||||
gitlab.com/etke.cc/go/secgen v1.1.1
|
gitlab.com/etke.cc/go/secgen v1.1.1
|
||||||
gitlab.com/etke.cc/go/trysmtp v1.0.0
|
gitlab.com/etke.cc/go/trysmtp v1.0.0
|
||||||
gitlab.com/etke.cc/go/validator v1.0.3
|
gitlab.com/etke.cc/go/validator v1.0.3
|
||||||
gitlab.com/etke.cc/linkpearl v0.0.0-20221115132622-75502dc94cc3
|
gitlab.com/etke.cc/linkpearl v0.0.0-20221115160030-7fcc97e37380
|
||||||
golang.org/x/net v0.2.0
|
golang.org/x/net v0.2.0
|
||||||
maunium.net/go/mautrix v0.12.2
|
maunium.net/go/mautrix v0.12.2
|
||||||
)
|
)
|
||||||
|
|||||||
2
go.sum
2
go.sum
@@ -101,8 +101,6 @@ gitlab.com/etke.cc/go/trysmtp v1.0.0 h1:f/7gSmzohKniVeLSLevI+ZsySYcPUGkT9cRlOTwj
|
|||||||
gitlab.com/etke.cc/go/trysmtp v1.0.0/go.mod h1:KqRuIB2IPElEEbAxXmFyKtm7S5YiuEb4lxwWthccqyE=
|
gitlab.com/etke.cc/go/trysmtp v1.0.0/go.mod h1:KqRuIB2IPElEEbAxXmFyKtm7S5YiuEb4lxwWthccqyE=
|
||||||
gitlab.com/etke.cc/go/validator v1.0.3 h1:qkMskwtA3Uiv1q7HTlNZaaZcIJTO4mp2p0KZAl53Xmo=
|
gitlab.com/etke.cc/go/validator v1.0.3 h1:qkMskwtA3Uiv1q7HTlNZaaZcIJTO4mp2p0KZAl53Xmo=
|
||||||
gitlab.com/etke.cc/go/validator v1.0.3/go.mod h1:3vdssRG4LwgdTr9IHz9MjGSEO+3/FO9hXPGMuSeweJ8=
|
gitlab.com/etke.cc/go/validator v1.0.3/go.mod h1:3vdssRG4LwgdTr9IHz9MjGSEO+3/FO9hXPGMuSeweJ8=
|
||||||
gitlab.com/etke.cc/linkpearl v0.0.0-20221115132622-75502dc94cc3 h1:JPmCa251r3zrUXvSSPbAT8qmMZR4bBIHwMAG1sCBttI=
|
|
||||||
gitlab.com/etke.cc/linkpearl v0.0.0-20221115132622-75502dc94cc3/go.mod h1:ClA7UlRUoeydy0a7AbJrGAdWYOX//twuThny198PA1k=
|
|
||||||
golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.2.0 h1:BRXPfhNivWL5Yq0BGQ39a2sW6t44aODpfxkWjYdzewE=
|
golang.org/x/crypto v0.2.0 h1:BRXPfhNivWL5Yq0BGQ39a2sW6t44aODpfxkWjYdzewE=
|
||||||
golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
|
golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ func (e *Email) Content(threadID id.EventID, options *ContentOptions) *event.Con
|
|||||||
options.FromKey: e.From,
|
options.FromKey: e.From,
|
||||||
options.ToKey: e.To,
|
options.ToKey: e.To,
|
||||||
},
|
},
|
||||||
Parsed: parsed,
|
Parsed: &parsed,
|
||||||
}
|
}
|
||||||
return &content
|
return &content
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user