123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- # Copyright (C) 2019 Philipp Hörist <philipp AT hoerist.com>
- # Copyright (C) 2019 Pavel R. <pd at narayana dot im>
-
- # This file is part of Gajim OTR Plugin.
- #
- # Gajim OTR Plugin is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published
- # by the Free Software Foundation; version 3 only.
- #
- # This software is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You can always obtain full license text at <http://www.gnu.org/licenses/>.
-
- # TODO: Fingerprints authentication GUI
- # TODO: SMP authentication GUI
- ERROR = None
-
- import logging
- from gajim.plugins import GajimPlugin
- from gajim.common import app
- try: from .otr import *
- except ImportError: ERROR = 'python3-potr is missing'
-
- # ...
- class OTRPlugin(GajimPlugin):
- log = logging.getLogger('gajim.p.otr')
-
- # init plugin #
- def init(self):
- self.encryption_name = 'OTR'
- self.description = 'Provides Off-the-Record encryption'
- self.activatable = (not ERROR)
- self.available_text = (ERROR)
- self.instances = {}
- self.getinstance = lambda acct: self.instances.get(acct) or self.instances.setdefault(acct,OTR(self,acct))
- self.gui_extension_points = {
- 'encrypt' + self.encryption_name: (self._encrypt_message, None),
- 'decrypt': (self._decrypt_message, None),
- }
-
- # activate encryption #
- @staticmethod
- def activate_encryption(ctl):
- return True
-
- # encrypt file (just return same file)
- @staticmethod
- def encrypt_file(file, account, callback):
- callback(file)
-
- # encrypt message #
- def _encrypt_message(self,con,event,callback):
- if not event.message or event.type_ != 'chat': return # drop empty and non-chat messages
- otr = self.getinstance(event.conn.name)
- otr.encrypt(event,callback)
-
- # decrypt message #
- def _decrypt_message(self,con,event,callback):
- if (event.encrypted) or (event.name[0:2] == 'gc') or not (event.msgtxt or '').startswith('?OTR'): return # skip non-OTR messages..
- if (event.name[0:3] == 'mam'): return setattr(event,'msgtxt','') # skip MAM messages (we can not decrypt OTR out of session)..
- if (app.config.get_per('encryption','%s-%s'%(event.conn.name,event.jid),'encryption')!=self.encryption_name): return # skip all when encryption not set to OTR
- otr = self.getinstance(event.conn.name)
- otr.decrypt(event,callback)
|