mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-05 04:07:07 +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
|
||||
}
|
||||
|
||||
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 {
|
||||
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.SMOMEMOEnvelope(envelope),
|
||||
)
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in a new issue