echo_bot: Don't pass the whole message to plain_reply and encrypted_reply anymore
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
parent
cea2345f29
commit
ba028d98c8
1 changed files with 14 additions and 16 deletions
|
@ -77,25 +77,27 @@ class EchoBot(ClientXMPP):
|
||||||
for stanza objects and the Message stanza to see
|
for stanza objects and the Message stanza to see
|
||||||
how it may be used.
|
how it may be used.
|
||||||
"""
|
"""
|
||||||
|
mfrom = mto = msg['from']
|
||||||
|
mtype = msg['type']
|
||||||
|
|
||||||
if msg['type'] not in ('chat', 'normal'):
|
if mtype not in ('chat', 'normal'):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if not self['xep_0384'].is_encrypted(msg):
|
if not self['xep_0384'].is_encrypted(msg):
|
||||||
await self.plain_reply(msg, 'Echo unencrypted message:%(body)s' % msg)
|
await self.plain_reply(mto, mtype, 'Echo unencrypted message:%(body)s' % msg)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
mfrom = msg['from']
|
|
||||||
encrypted = msg['omemo_encrypted']
|
encrypted = msg['omemo_encrypted']
|
||||||
body = self['xep_0384'].decrypt_message(encrypted, mfrom, allow_untrusted)
|
body = self['xep_0384'].decrypt_message(encrypted, mfrom, allow_untrusted)
|
||||||
await self.encrypted_reply(msg, 'Echo: %s' % body.decode("utf8"))
|
decoded = body.decode('utf8')
|
||||||
|
await self.encrypted_reply(mto, mtype, 'Echo: %s' % decoded)
|
||||||
return None
|
return None
|
||||||
except (MissingOwnKey,):
|
except (MissingOwnKey,):
|
||||||
# The message is missing our own key, it was not encrypted for
|
# The message is missing our own key, it was not encrypted for
|
||||||
# us, and we can't decrypt it.
|
# us, and we can't decrypt it.
|
||||||
await self.plain_reply(
|
await self.plain_reply(
|
||||||
msg,
|
mto, mtype,
|
||||||
'Error: Message not encrypted for me.',
|
'Error: Message not encrypted for me.',
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
|
@ -107,7 +109,7 @@ class EchoBot(ClientXMPP):
|
||||||
# best if we send an encrypted message directly. XXX: Is it
|
# best if we send an encrypted message directly. XXX: Is it
|
||||||
# where we talk about self-healing messages?
|
# where we talk about self-healing messages?
|
||||||
await self.encrypted_reply(
|
await self.encrypted_reply(
|
||||||
msg,
|
mto, mtype,
|
||||||
'Error: Message uses an encrypted '
|
'Error: Message uses an encrypted '
|
||||||
'session I don\'t know about.',
|
'session I don\'t know about.',
|
||||||
)
|
)
|
||||||
|
@ -122,7 +124,7 @@ class EchoBot(ClientXMPP):
|
||||||
# trusted, or in undecided state, if they decide to decrypt it
|
# trusted, or in undecided state, if they decide to decrypt it
|
||||||
# anyway.
|
# anyway.
|
||||||
await self.plain_reply(
|
await self.plain_reply(
|
||||||
msg,
|
mto, mtype,
|
||||||
"Error: Your device '%s' is not in my trusted devices." % exn.device,
|
"Error: Your device '%s' is not in my trusted devices." % exn.device,
|
||||||
)
|
)
|
||||||
# We resend, setting the `allow_untrusted` parameter to True.
|
# We resend, setting the `allow_untrusted` parameter to True.
|
||||||
|
@ -140,22 +142,18 @@ class EchoBot(ClientXMPP):
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
async def plain_reply(self, original_msg, body):
|
async def plain_reply(self, mto: JID, mtype: str, body):
|
||||||
"""
|
"""
|
||||||
Helper to reply to messages
|
Helper to reply to messages
|
||||||
"""
|
"""
|
||||||
|
|
||||||
mto = original_msg['from']
|
|
||||||
mtype = original_msg['type']
|
|
||||||
msg = self.make_message(mto=mto, mtype=mtype)
|
msg = self.make_message(mto=mto, mtype=mtype)
|
||||||
msg['body'] = body
|
msg['body'] = body
|
||||||
return msg.send()
|
return msg.send()
|
||||||
|
|
||||||
async def encrypted_reply(self, original_msg, body):
|
async def encrypted_reply(self, mto: JID, mtype: str, body):
|
||||||
"""Helper to reply with encrypted messages"""
|
"""Helper to reply with encrypted messages"""
|
||||||
|
|
||||||
mto = original_msg['from']
|
|
||||||
mtype = original_msg['type']
|
|
||||||
msg = self.make_message(mto=mto, mtype=mtype)
|
msg = self.make_message(mto=mto, mtype=mtype)
|
||||||
msg['eme']['namespace'] = self.eme_ns
|
msg['eme']['namespace'] = self.eme_ns
|
||||||
msg['eme']['name'] = self['xep_0380'].mechanisms[self.eme_ns]
|
msg['eme']['name'] = self['xep_0380'].mechanisms[self.eme_ns]
|
||||||
|
@ -201,7 +199,7 @@ class EchoBot(ClientXMPP):
|
||||||
# generic message. The receiving end-user at this
|
# generic message. The receiving end-user at this
|
||||||
# point can bring up the issue if it happens.
|
# point can bring up the issue if it happens.
|
||||||
self.plain_reply(
|
self.plain_reply(
|
||||||
original_msg,
|
mto, mtype,
|
||||||
'Could not find keys for device "%d" of recipient "%s". Skipping.' %
|
'Could not find keys for device "%d" of recipient "%s". Skipping.' %
|
||||||
(error.device, error.bare_jid),
|
(error.device, error.bare_jid),
|
||||||
)
|
)
|
||||||
|
@ -210,13 +208,13 @@ class EchoBot(ClientXMPP):
|
||||||
device_list.append(error.device)
|
device_list.append(error.device)
|
||||||
except (IqError, IqTimeout) as exn:
|
except (IqError, IqTimeout) as exn:
|
||||||
self.plain_reply(
|
self.plain_reply(
|
||||||
original_msg,
|
mto, mfrom,
|
||||||
'An error occured while fetching information on a recipient.\n%r' % exn,
|
'An error occured while fetching information on a recipient.\n%r' % exn,
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
except Exception as exn:
|
except Exception as exn:
|
||||||
await self.plain_reply(
|
await self.plain_reply(
|
||||||
original_msg,
|
mto, mfrom,
|
||||||
'An error occured while attempting to encrypt.\n%r' % exn,
|
'An error occured while attempting to encrypt.\n%r' % exn,
|
||||||
)
|
)
|
||||||
raise
|
raise
|
||||||
|
|
Loading…
Reference in a new issue