Make fetch_devices and fetch_bundle public
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
parent
3a85411df8
commit
c8341e0f83
2 changed files with 18 additions and 12 deletions
|
@ -6,6 +6,7 @@ Version XXX:
|
||||||
* Improvements:
|
* Improvements:
|
||||||
- Added py.typed to the repository for static type checking tools
|
- Added py.typed to the repository for static type checking tools
|
||||||
- New delete_session method
|
- New delete_session method
|
||||||
|
- New fetch_devices and fetch_bundle methods
|
||||||
Version 0.6.1:
|
Version 0.6.1:
|
||||||
2022-03-14 Maxime “pep” Buquet <pep@bouah.net>
|
2022-03-14 Maxime “pep” Buquet <pep@bouah.net>
|
||||||
* Improvements:
|
* Improvements:
|
||||||
|
|
|
@ -415,7 +415,10 @@ class XEP_0384(BasePlugin):
|
||||||
else:
|
else:
|
||||||
log.debug('Not publishing.')
|
log.debug('Not publishing.')
|
||||||
|
|
||||||
async def _fetch_bundle(self, jid: str, device_id: int) -> Optional[ExtendedPublicBundle]:
|
async def fetch_bundle(self, jid: JID, device_id: int) -> None:
|
||||||
|
"""
|
||||||
|
Fetch bundles for specified jid / device_id pair.
|
||||||
|
"""
|
||||||
log.debug('Fetching bundle for JID: %r, device: %r', jid, device_id)
|
log.debug('Fetching bundle for JID: %r, device: %r', jid, device_id)
|
||||||
node = f'{OMEMO_BUNDLES_NS}:{device_id}'
|
node = f'{OMEMO_BUNDLES_NS}:{device_id}'
|
||||||
try:
|
try:
|
||||||
|
@ -424,10 +427,18 @@ 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)
|
bundle = _parse_bundle(self.omemo_backend, bundle)
|
||||||
|
if bundle is not None:
|
||||||
|
log.debug('Encryption: Bundle %r found!', device_id)
|
||||||
|
devices = self.bundles.setdefault(jid.bare, {})
|
||||||
|
devices[device_id] = bundle
|
||||||
|
else:
|
||||||
|
log.debug('Encryption: Bundle %r not found!', device_id)
|
||||||
|
|
||||||
async def _fetch_device_list(self, jid: JID) -> None:
|
async def fetch_devices(self, jid: JID) -> None:
|
||||||
"""Manually query PEP OMEMO_DEVICES_NS nodes"""
|
"""
|
||||||
|
Manually query PEP OMEMO_DEVICES_NS nodes
|
||||||
|
"""
|
||||||
log.debug('Fetching device list for JID: %r', jid)
|
log.debug('Fetching device list for JID: %r', jid)
|
||||||
iq = await self.xmpp['xep_0060'].get_items(jid.full, OMEMO_DEVICES_NS)
|
iq = await self.xmpp['xep_0060'].get_items(jid.full, OMEMO_DEVICES_NS)
|
||||||
return await self._read_device_list(jid, iq['pubsub']['items'])
|
return await self._read_device_list(jid, iq['pubsub']['items'])
|
||||||
|
@ -819,16 +830,10 @@ class XEP_0384(BasePlugin):
|
||||||
for exn in errors:
|
for exn in errors:
|
||||||
if isinstance(exn, omemo.exceptions.NoDevicesException):
|
if isinstance(exn, omemo.exceptions.NoDevicesException):
|
||||||
log.debug('Encryption: Missing device list for JID: %r', exn.bare_jid)
|
log.debug('Encryption: Missing device list for JID: %r', exn.bare_jid)
|
||||||
await self._fetch_device_list(JID(exn.bare_jid))
|
await self.fetch_devices(JID(exn.bare_jid))
|
||||||
elif isinstance(exn, omemo.exceptions.MissingBundleException):
|
elif isinstance(exn, omemo.exceptions.MissingBundleException):
|
||||||
log.debug('Encryption: Missing bundle for JID: %r, device: %r', exn.bare_jid, exn.device)
|
log.debug('Encryption: Missing bundle for JID: %r, device: %r', exn.bare_jid, exn.device)
|
||||||
bundle = await self._fetch_bundle(exn.bare_jid, exn.device)
|
await self.fetch_bundle(JID(exn.bare_jid), exn.device)
|
||||||
if bundle is not None:
|
|
||||||
log.debug('Encryption: Bundle %r found!', exn.device)
|
|
||||||
devices = self.bundles.setdefault(exn.bare_jid, {})
|
|
||||||
devices[exn.device] = bundle
|
|
||||||
else:
|
|
||||||
log.debug('Encryption: Bundle %r not found.', exn.device)
|
|
||||||
elif isinstance(exn, omemo.exceptions.TrustException):
|
elif isinstance(exn, omemo.exceptions.TrustException):
|
||||||
# On TrustException, there are two possibilities.
|
# On TrustException, there are two possibilities.
|
||||||
# Either trust has not been explicitely set yet, and is
|
# Either trust has not been explicitely set yet, and is
|
||||||
|
|
Loading…
Reference in a new issue