Remove the while loop; add dummy encrypted_reply

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
Maxime “pep” Buquet 2019-02-23 12:10:30 +00:00
parent 368bbd9005
commit b71a367bcb

View file

@ -58,7 +58,7 @@ class EchoBot(ClientXMPP):
self.send_presence() self.send_presence()
self.get_roster() self.get_roster()
def message(self, msg: Message) -> None: def message(self, msg: Message, allow_untrusted: bool = False) -> None:
""" """
Process incoming message stanzas. Be aware that this also Process incoming message stanzas. Be aware that this also
includes MUC messages and error messages. It is usually includes MUC messages and error messages. It is usually
@ -77,58 +77,48 @@ class EchoBot(ClientXMPP):
self.plain_reply(msg, 'This message was not encrypted.\n%(body)s' % msg) self.plain_reply(msg, 'This message was not encrypted.\n%(body)s' % msg)
return None return None
allow_untrusted = False try:
while True: body = self['xep_0384'].decrypt_message(msg, allow_untrusted)
try: self.encrypted_reply(msg, 'Thanks for sending\n%s' % body.decode("utf8"))
body = self['xep_0384'].decrypt_message( except (MissingOwnKey,):
msg, # The message is missing our own key, it was not encrypted for
allow_untrusted=allow_untrusted, # us, and we can't decrypt it.
) self.plain_reply(
self.encrypted_reply(msg, 'Thanks for sending\n%s' % body.decode("utf8")) msg,
break 'I can\'t decrypt this message as it is not encrypted for me.',
except (MissingOwnKey,): )
# The message is missing our own key, it was not encrypted for except (NoAvailableSession,) as exn:
# us, and we can't decrypt it. # We received a message from that contained a session that we
self.plain_reply( # don't know about (deleted session storage, etc.). We can't
msg, # decrypt the message, and it's going to be lost.
'I can\'t decrypt this message as it is not encrypted for me.', # Here, as we need to initiate a new encrypted session, it is
) # best if we send an encrypted message directly. XXX: Is it
break # where we talk about self-healing messages?
except (NoAvailableSession,) as exn: self.encrypted_reply(
# We received a message from that contained a session that we msg,
# don't know about (deleted session storage, etc.). We can't 'I can\'t decrypt this message as it uses an encrypted '
# decrypt the message, and it's going to be lost. 'session I don\'t know about.',
# Here, as we need to initiate a new encrypted session, it is )
# best if we send an encrypted message directly. XXX: Is it except (UndecidedException, UntrustedException) as exn:
# where we talk about self-healing messages? # We received a message from an untrusted device. We can
self.encrypted_reply( # choose to decrypt the message nonetheless, with the
msg, # `allow_untrusted` flag on the `decrypt_message` call, which
'I can\'t decrypt this message as it uses an encrypted ' # we will do here. This is only possible for decryption,
'session I don\'t know about.', # encryption will require us to decide if we trust the device
) # or not. Clients _should_ indicate that the message was not
break # trusted, or in undecided state, if they decide to decrypt it
except (UndecidedException, UntrustedException) as exn: # anyway.
# We received a message from an untrusted device. We can self.plain_reply(
# choose to decrypt the message nonetheless, with the msg,
# `allow_untrusted` flag on the `decrypt_message` call, which "Your device '%s' is not in my trusted devices." % exn.device,
# we will do here. This is only possible for decryption, )
# encryption will require us to decide if we trust the device # We resend, setting the `allow_untrusted` parameter to True.
# or not. Clients _should_ indicate that the message was not self.message(msg, allow_untrusted=True)
# trusted, or in undecided state, if they decide to decrypt it except (EncryptionPrepareException,):
# anyway. # Slixmpp tried its best, but there were errors it couldn't
allow_untrusted = True # resolve. At this point you should have seen other exceptions
# and given a chance to resolve them already.
self.plain_reply( self.plain_reply(msg, 'I was not able to decrypt the message.')
msg,
"Your device '%(device)s' is not in my trusted devices." % exn,
)
# Now we let the loop go on for decrypt_message to run again.
except (EncryptionPrepareException,):
# Slixmpp tried its best, but there were errors it couldn't
# resolve. At this point you should have seen other exceptions
# and given a chance to resolve them already.
self.plain_reply(msg, 'I was not able to decrypt the message.')
break
return None return None
@ -143,8 +133,11 @@ class EchoBot(ClientXMPP):
msg['body'] = body msg['body'] = body
msg.send() msg.send()
def encrypted_reply(self, msg, body) -> None: def encrypted_reply(self, original_msg, body) -> None:
pass """Helper to reply with encrypted messages"""
# TODO: Send the message encrypted.
self.plain_reply(msg, body)
if __name__ == '__main__': if __name__ == '__main__':