From ec266e91086d65ff7e87f4d30b15ff30f7eaf6dc Mon Sep 17 00:00:00 2001 From: Aine Date: Tue, 15 Nov 2022 19:22:15 +0200 Subject: [PATCH] wip encrypted parent event --- bot/bot.go | 6 +++--- bot/email.go | 19 +++++++++---------- cmd/cmd.go | 6 +++--- go.mod | 4 ++-- go.sum | 2 -- utils/email.go | 2 +- 6 files changed, 18 insertions(+), 21 deletions(-) diff --git a/bot/bot.go b/bot/bot.go index e098b25..f465f0e 100644 --- a/bot/bot.go +++ b/bot/bot.go @@ -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 func (b *Bot) SendNotice(ctx context.Context, roomID id.RoomID, message string) { - content := format.RenderMarkdown(message, true, true) - content.MsgType = event.MsgNotice - _, err := b.lp.Send(roomID, &content) + parsed := format.RenderMarkdown(message, true, true) + parsed.MsgType = event.MsgNotice + _, err := b.lp.Send(roomID, &event.Content{Parsed: &parsed}) if err != nil { sentry.GetHubFromContext(ctx).CaptureException(err) } diff --git a/bot/email.go b/bot/email.go index 8c34be1..49ea9b4 100644 --- a/bot/email.go +++ b/bot/email.go @@ -5,7 +5,6 @@ import ( "errors" "strings" - "maunium.net/go/mautrix/crypto" "maunium.net/go/mautrix/event" "maunium.net/go/mautrix/format" "maunium.net/go/mautrix/id" @@ -208,10 +207,13 @@ type parentEmail struct { func (b *Bot) getParentEvent(evt *event.Event) (id.EventID, *event.Event) { content := evt.Content.AsMessage() 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 { + b.log.Debug("event %s is the thread itself") return threadID, evt } 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 { 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) 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) { - 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 } - utils.ParseContent(parentEvt, event.EventEncrypted) decrypted, err := b.lp.GetMachine().DecryptMegolmEvent(evt) 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) 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 } @@ -286,7 +285,7 @@ func (b *Bot) saveSentMetadata(ctx context.Context, queued bool, threadID id.Eve content := email.Content(threadID, cfg.ContentOptions()) notice := format.RenderMarkdown(text, true, true) notice.MsgType = event.MsgNotice - msgContent, ok := content.Parsed.(event.MessageEventContent) + msgContent, ok := content.Parsed.(*event.MessageEventContent) if !ok { b.Error(ctx, evt.RoomID, "cannot parse message") return @@ -294,7 +293,7 @@ func (b *Bot) saveSentMetadata(ctx context.Context, queued bool, threadID id.Eve msgContent.Body = notice.Body msgContent.FormattedBody = notice.FormattedBody content.Parsed = msgContent - msgID, err := b.lp.Send(evt.RoomID, &content) + msgID, err := b.lp.Send(evt.RoomID, content) if err != nil { b.Error(ctx, evt.RoomID, "cannot send notice: %v", err) return diff --git a/cmd/cmd.go b/cmd/cmd.go index f856433..83f3fd1 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -83,9 +83,9 @@ func initBot(cfg *config.Config) { NoEncryption: cfg.NoEncryption, AccountDataSecret: cfg.DataSecret, LPLogger: mxlog, - APILogger: logger.New("api.", cfg.LogLevel), - StoreLogger: logger.New("store.", cfg.LogLevel), - CryptoLogger: logger.New("olm.", cfg.LogLevel), + APILogger: logger.New("api.", "INFO"), + StoreLogger: logger.New("store.", "INFO"), + CryptoLogger: logger.New("olm.", "INFO"), }) if err != nil { // nolint // Fatal = panic, not os.Exit() diff --git a/go.mod b/go.mod index 7663421..779a390 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module gitlab.com/etke.cc/postmoogle go 1.18 -// replace gitlab.com/etke.cc/linkpearl => ../linkpearl +replace gitlab.com/etke.cc/linkpearl => ../linkpearl require ( 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/trysmtp v1.0.0 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 maunium.net/go/mautrix v0.12.2 ) diff --git a/go.sum b/go.sum index 6637b1c..05c365b 100644 --- a/go.sum +++ b/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/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/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.2.0 h1:BRXPfhNivWL5Yq0BGQ39a2sW6t44aODpfxkWjYdzewE= golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= diff --git a/utils/email.go b/utils/email.go index cf6c80a..6b64415 100644 --- a/utils/email.go +++ b/utils/email.go @@ -135,7 +135,7 @@ func (e *Email) Content(threadID id.EventID, options *ContentOptions) *event.Con options.FromKey: e.From, options.ToKey: e.To, }, - Parsed: parsed, + Parsed: &parsed, } return &content }