real multi-domain support

This commit is contained in:
Aine
2022-11-16 09:00:19 +02:00
parent f3be3aeabb
commit ebe9606aa9
9 changed files with 233 additions and 174 deletions

View File

@@ -147,12 +147,13 @@ func (b *Bot) SendEmailReply(ctx context.Context) {
b.Error(ctx, evt.RoomID, "mailbox is not configured, kupo")
return
}
domain := utils.SanitizeDomain(cfg.Domain())
b.lock(evt.RoomID.String())
defer b.unlock(evt.RoomID.String())
fromMailbox := mailbox + "@" + b.domains[0]
meta := b.getParentEmail(evt)
fromMailbox := mailbox + "@" + domain
meta := b.getParentEmail(evt, domain)
// when email was sent from matrix and reply was sent from matrix again
if fromMailbox != meta.From {
meta.To = meta.From
@@ -173,7 +174,7 @@ func (b *Bot) SendEmailReply(ctx context.Context) {
}
body := content.Body
meta.MessageID = utils.MessageID(evt.ID, b.domains[0])
meta.MessageID = utils.MessageID(evt.ID, domain)
meta.References = meta.References + " " + meta.MessageID
b.log.Debug("send email reply: %+v", meta)
email := utils.NewEmail(meta.MessageID, meta.InReplyTo, meta.References, meta.Subject, meta.From, meta.To, body, "", nil)
@@ -240,7 +241,7 @@ func (b *Bot) getParentEvent(evt *event.Event) (id.EventID, *event.Event) {
return threadID, decrypted
}
func (b *Bot) getParentEmail(evt *event.Event) parentEmail {
func (b *Bot) getParentEmail(evt *event.Event, domain string) parentEmail {
var parent parentEmail
threadID, parentEvt := b.getParentEvent(evt)
parent.ThreadID = threadID
@@ -251,7 +252,7 @@ func (b *Bot) getParentEmail(evt *event.Event) parentEmail {
return parent
}
parent.MessageID = utils.MessageID(parentEvt.ID, b.domains[0])
parent.MessageID = utils.MessageID(parentEvt.ID, domain)
parent.From = utils.EventField[string](&parentEvt.Content, eventFromKey)
parent.To = utils.EventField[string](&parentEvt.Content, eventToKey)
parent.InReplyTo = utils.EventField[string](&parentEvt.Content, eventMessageIDkey)
@@ -298,8 +299,9 @@ func (b *Bot) saveSentMetadata(ctx context.Context, queued bool, threadID id.Eve
b.Error(ctx, evt.RoomID, "cannot send notice: %v", err)
return
}
b.setThreadID(evt.RoomID, utils.MessageID(evt.ID, b.domains[0]), threadID)
b.setThreadID(evt.RoomID, utils.MessageID(msgID, b.domains[0]), threadID)
domain := utils.SanitizeDomain(cfg.Domain())
b.setThreadID(evt.RoomID, utils.MessageID(evt.ID, domain), threadID)
b.setThreadID(evt.RoomID, utils.MessageID(msgID, domain), threadID)
b.setLastEventID(evt.RoomID, threadID, msgID)
}