Mercurial > libervia-backend
diff sat/core/sat_main.py @ 2658:4e130cc9bfc0
core (memore/encryption): new methods and checks:
Following methods are now available though bridge:
- messageEncryptionStop
- messageEncryptionGet: retrieve encryption data for a message session
- encryptionPluginsGet: retrieve all registered encryption plugin
Following methods are available for internal use:
- getPlugins: retrieve registerd plugins
- getNSFromName: retrieve namespace from plugin name
- getBridgeData: serialise session data (to be used with bridge)
- markAsEncrypted: mark message data as encrypted (to be set by encryption plugin in MessageReceived trigger)
Behaviours improvments:
- start and stop send messageEncryptionStarted and messageEncryptionStopped signals, and a message feedback
- new "replace" arguments in start allows to replace a plugin if one is already running (instead of raising a ConflictError)
- plugins declare themselves as "directed" (i.e. working with only one device at a time) or not.
This is checked while dealing with jids, an exception is raised when a full jid is received for a non directed encryption.
- use of new data_format (de)serialise
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 11 Aug 2018 18:24:55 +0200 |
parents | 712cb4ff3e13 |
children | bc122b68eacd |
line wrap: on
line diff
--- a/sat/core/sat_main.py Sat Aug 11 18:24:55 2018 +0200 +++ b/sat/core/sat_main.py Sat Aug 11 18:24:55 2018 +0200 @@ -113,6 +113,11 @@ self.bridge.register_method("messageSend", self._messageSend) self.bridge.register_method("messageEncryptionStart", self._messageEncryptionStart) + self.bridge.register_method("messageEncryptionStop", + self._messageEncryptionStop) + self.bridge.register_method("messageEncryptionGet", + self._messageEncryptionGet) + self.bridge.register_method("encryptionPluginsGet", self._encryptionPluginsGet) self.bridge.register_method("getConfig", self._getConfig) self.bridge.register_method("setParam", self.setParam) self.bridge.register_method("getParamA", self.memory.getStringParamA) @@ -657,6 +662,17 @@ def registerEncryptionPlugin(self, *args, **kwargs): return encryption.EncryptionHandler.registerPlugin(*args, **kwargs) + def _encryptionPluginsGet(self): + plugins = encryption.EncryptionHandler.getPlugins() + ret = [] + for p in plugins: + ret.append({ + u"name": p.name, + u"namespace": p.namespace, + u"priority": unicode(p.priority), + }) + return ret + ## XMPP methods ## def _messageSend(self, to_jid_s, message, subject=None, mess_type="auto", extra=None, @@ -673,18 +689,28 @@ {unicode(key): unicode(value) for key, value in extra.items()}, ) - def _messageEncryptionStart(self, to_jid_s, encryption_ns, + def _messageEncryptionStart(self, to_jid_s, encryption_ns, replace=False, profile_key=C.PROF_KEY_NONE): client = self.getClient(profile_key) to_jid = jid.JID(to_jid_s) - return client.encryption.start(to_jid, encryption_ns.strip() or None) + return client.encryption.start(to_jid, encryption_ns.strip() or None, replace) + + def _messageEncryptionStop(self, to_jid_s, profile_key=C.PROF_KEY_NONE): + client = self.getClient(profile_key) + to_jid = jid.JID(to_jid_s) + return client.encryption.stop(to_jid) + + def _messageEncryptionGet(self, to_jid_s, profile_key=C.PROF_KEY_NONE): + client = self.getClient(profile_key) + to_jid = jid.JID(to_jid_s) + session_data = client.encryption.getSession(to_jid) + return client.encryption.getBridgeData(session_data) def _setPresence(self, to="", show="", statuses=None, profile_key=C.PROF_KEY_NONE): return self.setPresence(jid.JID(to) if to else None, show, statuses, profile_key) - def setPresence( - self, to_jid=None, show="", statuses=None, profile_key=C.PROF_KEY_NONE - ): + def setPresence(self, to_jid=None, show="", statuses=None, + profile_key=C.PROF_KEY_NONE): """Send our presence information""" if statuses is None: statuses = {}