From 2b032b7d02dadcdd25cb8baea6a7854522745c2f Mon Sep 17 00:00:00 2001 From: mathieui Date: Sun, 16 May 2021 11:31:15 +0200 Subject: fix: unsupported typ= parameter in OTR plugin still broken because of pycrypto though --- plugins/otr.py | 66 ++++++++++++++++++++++++++++++---------------------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/plugins/otr.py b/plugins/otr.py index 23843788..6c15f3d2 100644 --- a/plugins/otr.py +++ b/plugins/otr.py @@ -388,29 +388,27 @@ class PoezioContext(Context): log.debug('OTR conversation with %s refreshed', self.peer) if self.getCurrentTrust(): msg = OTR_REFRESH_TRUSTED % format_dict - tab.add_message(InfoMessage(msg), typ=self.log) + tab.add_message(InfoMessage(msg)) else: msg = OTR_REFRESH_UNTRUSTED % format_dict - tab.add_message(InfoMessage(msg), typ=self.log) + tab.add_message(InfoMessage(msg)) hl(tab) elif newstate == STATE_FINISHED or newstate == STATE_PLAINTEXT: log.debug('OTR conversation with %s finished', self.peer) if tab: - tab.add_message(InfoMessage(OTR_END % format_dict), typ=self.log) + tab.add_message(InfoMessage(OTR_END % format_dict)) hl(tab) elif newstate == STATE_ENCRYPTED and tab: if self.getCurrentTrust(): - tab.add_message(InfoMessage(OTR_START_TRUSTED % format_dict), typ=self.log) + tab.add_message(InfoMessage(OTR_START_TRUSTED % format_dict)) else: format_dict['our_fpr'] = self.user.getPrivkey() format_dict['remote_fpr'] = self.getCurrentKey() tab.add_message( InfoMessage(OTR_TUTORIAL % format_dict), - typ=0 ) tab.add_message( InfoMessage(OTR_START_UNTRUSTED % format_dict), - typ=self.log, ) hl(tab) @@ -650,7 +648,7 @@ class Plugin(BasePlugin): # Received an OTR error proto_error = err.args[0].error # pylint: disable=no-member format_dict['err'] = proto_error.decode('utf-8', errors='replace') - tab.add_message(InfoMessage(OTR_ERROR % format_dict), typ=0) + tab.add_message(InfoMessage(OTR_ERROR % format_dict)) del msg['body'] del msg['html'] hl(tab) @@ -660,7 +658,7 @@ class Plugin(BasePlugin): # Encrypted message received, but unreadable as we do not have # an OTR session in place. text = MESSAGE_UNREADABLE % format_dict - tab.add_message(InfoMessage(text), typ=0) + tab.add_message(InfoMessage(text)) hl(tab) del msg['body'] del msg['html'] @@ -669,7 +667,7 @@ class Plugin(BasePlugin): except crypt.InvalidParameterError: # Malformed OTR payload and stuff text = MESSAGE_INVALID % format_dict - tab.add_message(InfoMessage(text), typ=0) + tab.add_message(InfoMessage(text)) hl(tab) del msg['body'] del msg['html'] @@ -680,7 +678,7 @@ class Plugin(BasePlugin): import traceback exc = traceback.format_exc() format_dict['exc'] = exc - tab.add_message(InfoMessage(POTR_ERROR % format_dict), typ=0) + tab.add_message(InfoMessage(POTR_ERROR % format_dict)) log.error('Unspecified error in the OTR plugin', exc_info=True) return # No error, proceed with the message @@ -699,10 +697,10 @@ class Plugin(BasePlugin): abort = get_tlv(tlvs, potr.proto.SMPABORTTLV) if abort: ctx.reset_smp() - tab.add_message(InfoMessage(SMP_ABORTED_PEER % format_dict), typ=0) + tab.add_message(InfoMessage(SMP_ABORTED_PEER % format_dict)) elif ctx.in_smp and not ctx.smpIsValid(): ctx.reset_smp() - tab.add_message(InfoMessage(SMP_ABORTED % format_dict), typ=0) + tab.add_message(InfoMessage(SMP_ABORTED % format_dict)) elif smp1 or smp1q: # Received an SMP request (with a question or not) if smp1q: @@ -720,22 +718,22 @@ class Plugin(BasePlugin): # we did not initiate it ctx.smp_own = False format_dict['q'] = question - tab.add_message(InfoMessage(SMP_REQUESTED % format_dict), typ=0) + tab.add_message(InfoMessage(SMP_REQUESTED % format_dict)) elif smp2: # SMP reply received if not ctx.in_smp: ctx.reset_smp() else: - tab.add_message(InfoMessage(SMP_PROGRESS % format_dict), typ=0) + tab.add_message(InfoMessage(SMP_PROGRESS % format_dict)) elif smp3 or smp4: # Type 4 (SMP message 3) or 5 (SMP message 4) TLVs received # in both cases it is the final message of the SMP exchange if ctx.smpIsSuccess(): - tab.add_message(InfoMessage(SMP_SUCCESS % format_dict), typ=0) + tab.add_message(InfoMessage(SMP_SUCCESS % format_dict)) if not ctx.getCurrentTrust(): - tab.add_message(InfoMessage(SMP_RECIPROCATE % format_dict), typ=0) + tab.add_message(InfoMessage(SMP_RECIPROCATE % format_dict)) else: - tab.add_message(InfoMessage(SMP_FAIL % format_dict), typ=0) + tab.add_message(InfoMessage(SMP_FAIL % format_dict)) ctx.reset_smp() hl(tab) self.core.refresh_window() @@ -747,7 +745,13 @@ class Plugin(BasePlugin): """ format_dict['msg'] = err.args[0].decode('utf-8') text = MESSAGE_UNENCRYPTED % format_dict - tab.add_message(text, jid=msg['from'], typ=ctx.log) + tab.add_message( + Message( + text, + nickname=tab.nick, + jid=msg['from'], + ), + ) del msg['body'] del msg['html'] hl(tab) @@ -798,7 +802,6 @@ class Plugin(BasePlugin): user=user, nick_color=nick_color ), - typ=ctx.log, ) hl(tab) self.core.refresh_window() @@ -849,7 +852,6 @@ class Plugin(BasePlugin): identifier=msg['id'], jid=self.core.xmpp.boundjid, ), - typ=ctx.log ) # remove everything from the message so that it doesn’t get sent del msg['body'] @@ -857,7 +859,7 @@ class Plugin(BasePlugin): del msg['html'] elif is_relevant(tab) and ctx and ctx.getPolicy('REQUIRE_ENCRYPTION'): warning_msg = MESSAGE_NOT_SENT % format_dict - tab.add_message(InfoMessage(warning_msg), typ=0) + tab.add_message(InfoMessage(warning_msg)) del msg['body'] del msg['replace'] del msg['html'] @@ -875,7 +877,7 @@ class Plugin(BasePlugin): ('\n - /message %s' % jid) for jid in res) format_dict['help'] = help_msg warning_msg = INCOMPATIBLE_TAB % format_dict - tab.add_message(InfoMessage(warning_msg), typ=0) + tab.add_message(InfoMessage(warning_msg)) del msg['body'] del msg['replace'] del msg['html'] @@ -923,22 +925,22 @@ class Plugin(BasePlugin): self.otr_start(tab, name, format_dict) elif action == 'ourfpr': format_dict['fpr'] = self.account.getPrivkey() - tab.add_message(InfoMessage(OTR_OWN_FPR % format_dict), typ=0) + tab.add_message(InfoMessage(OTR_OWN_FPR % format_dict)) elif action == 'fpr': if name in self.contexts: ctx = self.contexts[name] if ctx.getCurrentKey() is not None: format_dict['fpr'] = ctx.getCurrentKey() - tab.add_message(InfoMessage(OTR_REMOTE_FPR % format_dict), typ=0) + tab.add_message(InfoMessage(OTR_REMOTE_FPR % format_dict)) else: - tab.add_message(InfoMessage(OTR_NO_FPR % format_dict), typ=0) + tab.add_message(InfoMessage(OTR_NO_FPR % format_dict)) elif action == 'drop': # drop the privkey (and obviously, end the current conversations before that) for context in self.contexts.values(): if context.state not in (STATE_FINISHED, STATE_PLAINTEXT): context.disconnect() self.account.drop_privkey() - tab.add_message(InfoMessage(KEY_DROPPED % format_dict), typ=0) + tab.add_message(InfoMessage(KEY_DROPPED % format_dict)) elif action == 'trust': ctx = self.get_context(name) key = ctx.getCurrentKey() @@ -950,7 +952,7 @@ class Plugin(BasePlugin): format_dict['key'] = key ctx.setTrust(fpr, 'verified') self.account.saveTrusts() - tab.add_message(InfoMessage(TRUST_ADDED % format_dict), typ=0) + tab.add_message(InfoMessage(TRUST_ADDED % format_dict)) elif action == 'untrust': ctx = self.get_context(name) key = ctx.getCurrentKey() @@ -962,7 +964,7 @@ class Plugin(BasePlugin): format_dict['key'] = key ctx.setTrust(fpr, '') self.account.saveTrusts() - tab.add_message(InfoMessage(TRUST_REMOVED % format_dict), typ=0) + tab.add_message(InfoMessage(TRUST_REMOVED % format_dict)) self.core.refresh_window() def otr_start(self, tab, name, format_dict): @@ -977,7 +979,7 @@ class Plugin(BasePlugin): if otr.state != STATE_ENCRYPTED: format_dict['secs'] = secs text = OTR_NOT_ENABLED % format_dict - tab.add_message(InfoMessage(text), typ=0) + tab.add_message(InfoMessage(text)) self.core.refresh_window() if secs > 0: @@ -985,7 +987,7 @@ class Plugin(BasePlugin): self.api.add_timed_event(event) body = self.get_context(name).sendMessage(0, b'?OTRv?').decode() self.core.xmpp.send_message(mto=name, mtype='chat', mbody=body) - tab.add_message(InfoMessage(OTR_REQUEST % format_dict), typ=0) + tab.add_message(InfoMessage(OTR_REQUEST % format_dict)) @staticmethod def completion_otr(the_input): @@ -1035,13 +1037,13 @@ class Plugin(BasePlugin): ctx.smpInit(secret, question) else: ctx.smpInit(secret) - tab.add_message(InfoMessage(SMP_INITIATED % format_dict), typ=0) + tab.add_message(InfoMessage(SMP_INITIATED % format_dict)) elif action == 'answer': ctx.smpGotSecret(secret) elif action == 'abort': if ctx.in_smp: ctx.smpAbort() - tab.add_message(InfoMessage(SMP_ABORTED % format_dict), typ=0) + tab.add_message(InfoMessage(SMP_ABORTED % format_dict)) self.core.refresh_window() @staticmethod -- cgit v1.2.3