summaryrefslogtreecommitdiff
path: root/plugins/otr.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/otr.py')
-rw-r--r--plugins/otr.py39
1 files changed, 29 insertions, 10 deletions
diff --git a/plugins/otr.py b/plugins/otr.py
index bdffeac2..d453f2bd 100644
--- a/plugins/otr.py
+++ b/plugins/otr.py
@@ -62,7 +62,12 @@ Command added to Conversation Tabs and Private Tabs:
- The ``ourfpr`` command gives you the fingerprint of your own key
- The ``trust`` command marks the current remote key as trusted for the current remote JID
- The ``untrust`` command removes that trust
- - Finally, the ``drop`` command is used if you want to delete your private key (not recoverable)
+ - Finally, the ``drop`` command is used if you want to delete your private key (not recoverable).
+
+ .. warning::
+
+ With ``drop``, the private key is only removed from the filesystem, *NOT* with multiple rewrites in a secure
+ manner, you should do that yourself if you want to be sure.
To use OTR, make sure the plugin is loaded (if not, then do ``/load otr``).
@@ -131,7 +136,13 @@ Configuration
Allow OTRv1
-The :term:`allow_v1` and :term:`allow_v2` configuration parameters are tab-specific.
+ log
+ **Default:** false
+
+ Log conversations (OTR start/end marker, and messages).
+
+The :term:`allow_v1`, :term:`allow_v2` and :term:`log` configuration
+parameters are tab-specific.
Important details
-----------------
@@ -214,24 +225,24 @@ class PoezioContext(Context):
log.debug('OTR conversation with %s refreshed', self.peer)
if tab:
if self.getCurrentTrust():
- tab.add_message('Refreshed \x19btrusted\x19o OTR conversation with %s' % self.peer)
+ tab.add_message('Refreshed \x19btrusted\x19o OTR conversation with %s' % self.peer, typ=self.log)
else:
tab.add_message('Refreshed \x19buntrusted\x19o OTR conversation with %s (key: %s)' %
- (self.peer, self.getCurrentKey()))
+ (self.peer, self.getCurrentKey()), typ=self.log)
hl(tab)
elif newstate == STATE_FINISHED or newstate == STATE_PLAINTEXT:
log.debug('OTR conversation with %s finished', self.peer)
if tab:
- tab.add_message('Ended OTR conversation with %s' % self.peer)
+ tab.add_message('Ended OTR conversation with %s' % self.peer, typ=self.log)
hl(tab)
else:
if newstate == STATE_ENCRYPTED:
if tab:
if self.getCurrentTrust():
- tab.add_message('Started \x19btrusted\x19o OTR conversation with %s' % self.peer)
+ tab.add_message('Started \x19btrusted\x19o OTR conversation with %s' % self.peer, typ=self.log)
else:
tab.add_message('Started \x19buntrusted\x19o OTR conversation with %s (key: %s)' %
- (self.peer, self.getCurrentKey()))
+ (self.peer, self.getCurrentKey()), typ=self.log)
hl(tab)
log.debug('Set encryption state of %s to %s', self.peer, states[newstate])
@@ -367,11 +378,13 @@ class Plugin(BasePlugin):
if not jid in self.contexts:
flags = POLICY_FLAGS.copy()
policy = self.config.get_by_tabname('encryption_policy', 'ondemand', jid).lower()
+ logging_policy = self.config.get_by_tabname('log', 'false', jid).lower()
allow_v2 = self.config.get_by_tabname('allow_v2', 'true', jid).lower()
flags['ALLOW_V2'] = (allow_v2 != 'false')
allow_v1 = self.config.get_by_tabname('allow_v1', 'false', jid).lower()
flags['ALLOW_V1'] = (allow_v1 == 'true')
self.contexts[jid] = PoezioContext(self.account, jid, self.core.xmpp, self.core)
+ self.contexts[jid].log = 1 if logging_policy != 'false' else 0
self.contexts[jid].flags = flags
return self.contexts[jid]
@@ -406,7 +419,7 @@ class Plugin(BasePlugin):
tab.add_message('The following message from %s was not encrypted:\n%s' % (msg['from'], err.args[0].decode('utf-8')),
jid=msg['from'], nick_color=theming.get_theme().COLOR_REMOTE_USER,
- typ=0)
+ typ=ctx.log)
del msg['body']
del msg['html']
hl(tab)
@@ -434,7 +447,7 @@ class Plugin(BasePlugin):
self.core.refresh_window()
return
except:
- tab.add_message('An unspecified error occured')
+ tab.add_message('An unspecified error in the OTR plugin occured', typ=0)
log.error('Unspecified error in the OTR plugin', exc_info=True)
return
@@ -451,7 +464,7 @@ class Plugin(BasePlugin):
body = txt.decode()
tab.add_message(body, nickname=tab.nick, jid=msg['from'],
- forced_user=user, typ=0, nick_color=theming.get_theme().COLOR_REMOTE_USER)
+ forced_user=user, typ=ctx.log, nick_color=theming.get_theme().COLOR_REMOTE_USER)
hl(tab)
self.core.refresh_window()
del msg['body']
@@ -469,6 +482,12 @@ class Plugin(BasePlugin):
ctx = self.contexts.get(name)
if ctx and ctx.state == STATE_ENCRYPTED:
ctx.sendMessage(0, msg['body'].encode('utf-8'))
+ tab.add_message(msg['body'],
+ nickname=self.core.own_nick or tab.own_nick,
+ nick_color=theming.get_theme().COLOR_OWN_NICK,
+ identifier=msg['id'],
+ jid=self.core.xmpp.boundjid,
+ typ=0)
# remove everything from the message so that it doesn’t get sent
del msg['body']
del msg['replace']