mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-05 12:17:06 +00:00
Encrypt outgoing messages by !history command
This commit is contained in:
parent
71671a1b03
commit
942352a8df
1 changed files with 32 additions and 1 deletions
|
|
@ -3032,10 +3032,41 @@ func (c *Client) sendMessagesReverse(chatID int64, messages []*client.Message, p
|
||||||
from = sChatId
|
from = sChatId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body := c.formatMessage(0, 0, false, !isMUC, message)
|
||||||
|
|
||||||
|
// OMEMO encrypt hook - same rules as SendMessageToGateway's (see
|
||||||
|
// its doc comment): personal-chat pseudo-JIDs only, gated on
|
||||||
|
// the per-chat active flag, once per logical (historical)
|
||||||
|
// message. Real content must never go out in the clear if
|
||||||
|
// OMEMO is active but a session can't be established or
|
||||||
|
// encryption fails - gateway.OMEMOSendFailedBody is sent
|
||||||
|
// instead. This is the !history command's send path
|
||||||
|
// (sendMessagesReverse's plain branch) - easy to miss since it
|
||||||
|
// bypasses SendMessageToGateway entirely.
|
||||||
|
var envelope *e2ee.Envelope
|
||||||
|
if !isMUC && body != "" {
|
||||||
|
if backend, ok := gateway.E2EE.Backend(); ok {
|
||||||
|
owner := e2ee.OwnedPeer(c.Session.Login, gateway.CHATJID(chatID, false))
|
||||||
|
if active, _ := backend.Enabled(owner); active {
|
||||||
|
peer := e2ee.PeerID(c.jid)
|
||||||
|
if err := c.ensureOMEMOSession(backend, owner, peer); err != nil {
|
||||||
|
log.Error(errors.Wrap(err, "Failed to establish OMEMO session"))
|
||||||
|
body = gateway.OMEMOSendFailedBody
|
||||||
|
} else if env, err := backend.Encrypt(owner, []e2ee.PeerID{peer}, []byte(body)); err != nil {
|
||||||
|
log.Error(errors.Wrap(err, "Failed to encrypt OMEMO message"))
|
||||||
|
body = gateway.OMEMOSendFailedBody
|
||||||
|
} else {
|
||||||
|
envelope = &env
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for _, to := range plainTos {
|
for _, to := range plainTos {
|
||||||
gateway.SendMessage(to, from, c.xmpp,
|
gateway.SendMessage(to, from, c.xmpp,
|
||||||
gateway.SMBody(c.formatMessage(0, 0, false, !isMUC, message)), gateway.SMId(sId),
|
gateway.SMBody(body), gateway.SMId(sId),
|
||||||
gateway.SMReply(reply), gateway.SMIsGroupchat(isMUC), gateway.SMOriginalFrom(originalFrom),
|
gateway.SMReply(reply), gateway.SMIsGroupchat(isMUC), gateway.SMOriginalFrom(originalFrom),
|
||||||
|
gateway.SMOMEMOEnvelope(envelope),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue