xep_0384: Add a way to specify parameters to the plugin

Users can now specify replacements for the storage backend, otpk policy,
and the omemo backend.

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
Maxime “pep” Buquet 2019-01-12 18:45:47 +00:00
parent a490ca6066
commit ae8fd402f8

View file

@ -131,24 +131,26 @@ class XEP_0384(BasePlugin):
dependencies = {'xep_0163'} dependencies = {'xep_0163'}
default_config = { default_config = {
'data_dir': None, 'data_dir': None,
'storage_backend': SyncFileStorage,
'otpk_policy': KeepingOTPKPolicy,
'omemo_backend': SignalBackend,
} }
backend_loaded = HAS_OMEMO backend_loaded = HAS_OMEMO
def plugin_init(self): def plugin_init(self) -> None:
if not self.backend_loaded: if not self.backend_loaded:
log.info("xep_0384 cannot be loaded as the backend omemo library " log.info("xep_0384 cannot be loaded as the backend omemo library "
"is not available") "is not available")
return return None
if not self.data_dir: if not self.data_dir:
log.info("xep_0384 canoot be loaded as there is not data directory " log.info("xep_0384 canoot be loaded as there is not data directory "
"specified") "specified")
return None return None
storage = SyncFileStorage(self.data_dir) storage = self.storage_backend(self.data_dir)
otpkpolicy = KeepingOTPKPolicy() otpkpolicy = self.otpk_policy()
self._omemo_backend = SignalBackend
bare_jid = self.xmpp.boundjid.bare bare_jid = self.xmpp.boundjid.bare
self._device_id = _load_device_id(self.data_dir) self._device_id = _load_device_id(self.data_dir)
@ -156,7 +158,7 @@ class XEP_0384(BasePlugin):
self._omemo = SessionManager.create( self._omemo = SessionManager.create(
storage, storage,
otpkpolicy, otpkpolicy,
self._omemo_backend, self.omemo_backend,
bare_jid, bare_jid,
self._device_id, self._device_id,
) )
@ -168,6 +170,7 @@ class XEP_0384(BasePlugin):
self.xmpp.add_event_handler('omemo_device_list_publish', self._receive_device_list) self.xmpp.add_event_handler('omemo_device_list_publish', self._receive_device_list)
asyncio.ensure_future(self._set_device_list()) asyncio.ensure_future(self._set_device_list())
asyncio.ensure_future(self._publish_bundle()) asyncio.ensure_future(self._publish_bundle())
return None
def plugin_end(self): def plugin_end(self):
if not self.backend_loaded: if not self.backend_loaded:
@ -183,7 +186,7 @@ class XEP_0384(BasePlugin):
return self._device_id return self._device_id
def _generate_bundle_iq(self) -> Iq: def _generate_bundle_iq(self) -> Iq:
bundle = self._omemo.public_bundle.serialize(self._omemo_backend) bundle = self._omemo.public_bundle.serialize(self._omemo)
iq = self.xmpp.Iq(stype='set') iq = self.xmpp.Iq(stype='set')
publish = iq['pubsub']['publish'] publish = iq['pubsub']['publish']
@ -221,7 +224,7 @@ class XEP_0384(BasePlugin):
return None return None
bundle = iq['pubsub']['items']['item']['bundle'] bundle = iq['pubsub']['items']['item']['bundle']
return _parse_bundle(self._omemo_backend, bundle) return _parse_bundle(self._omemo, bundle)
async def _fetch_device_list(self, jid: JID) -> None: async def _fetch_device_list(self, jid: JID) -> None:
jid = JID(jid) jid = JID(jid)