Philipp Hörist pushed to branch master at gajim / python-nbxmpp
Commits:
225267ed by lovetox at 2021-03-05T23:08:10+01:00
Roster: Handle roster pushes
- - - - -
2 changed files:
- nbxmpp/modules/roster.py
- nbxmpp/structs.py
Changes:
=====================================
nbxmpp/modules/roster.py
=====================================
@@ -22,7 +22,8 @@ from nbxmpp.protocol import Iq
from nbxmpp.protocol import NodeProcessed
from nbxmpp.structs import RosterData
from nbxmpp.structs import RosterItem
-# from nbxmpp.structs import StanzaHandler
+from nbxmpp.structs import RosterPush
+from nbxmpp.structs import StanzaHandler
from nbxmpp.errors import StanzaError
from nbxmpp.errors import MalformedStanzaError
from nbxmpp.task import iq_request_task
@@ -36,11 +37,11 @@ class Roster(BaseModule):
self._client = client
self.handlers = [
- # StanzaHandler(name='iq',
- # callback=self._process_roster_push,
- # typ='set',
- # priority=15,
- # ns=Namespace.ROSTER),
+ StanzaHandler(name='iq',
+ callback=self._process_roster_push,
+ typ='set',
+ priority=15,
+ ns=Namespace.ROSTER),
]
@iq_request_task
@@ -67,21 +68,28 @@ class Roster(BaseModule):
raise MalformedStanzaError('query node missing', response)
yield RosterData(None, version)
- yield self._parse_push(response, ver_support)
+ pushed_items, version = self._parse_push(response, ver_support)
+ yield RosterData(pushed_items, version)
def _process_roster_push(self, _client, stanza, properties):
from_ = stanza.getFrom()
if from_ is not None:
- if not self._con.get_bound_jid().bare == from_:
+ if not self._client.get_bound_jid().bare == from_:
self._log.warning('Malicious Roster Push from %s', from_)
raise NodeProcessed
ver_support = self._client.features.has_roster_version()
- properties.roster = self._parse_push(stanza, ver_support)
+ pushed_items, version = self._parse_push(stanza, ver_support)
+ if len(pushed_items) != 1:
+ self._log.warning('Roster push contains more than one item')
+ self._log.warning(stanza)
+ raise NodeProcessed
+
+ item = pushed_items[0]
+ properties.roster = RosterPush(item, version)
self._log.info('Roster Push, version: %s', properties.roster.version)
- for item in properties.roster.items:
- self._log.info(item)
+ self._log.info(item)
self._ack_roster_push(stanza)
@@ -90,7 +98,7 @@ class Roster(BaseModule):
to=stanza.getFrom(),
frm=stanza.getTo(),
attrs={'id': stanza.getID()})
- self._con.send_stanza(iq)
+ self._client.send_stanza(iq)
@iq_request_task
def delete_item(self, jid):
@@ -126,8 +134,7 @@ class Roster(BaseModule):
pushed_items.append(roster_item)
- return RosterData(pushed_items, version)
-
+ return pushed_items, version
def _make_delete(jid):
=====================================
nbxmpp/structs.py
=====================================
@@ -134,6 +134,7 @@ MAMPreferencesData = namedtuple('MAMPreferencesData',
'default always never')
LastActivityData = namedtuple('LastActivityData', 'seconds status')
RosterData = namedtuple('RosterData', 'items version')
+RosterPush = namedtuple('RosterPush', 'item version')
@dataclass
View it on GitLab:
https://dev.gajim.org/gajim/python-nbxmpp/-/commit/225267edef7026d3217dd196682c541c8643499e
--
View it on GitLab:
https://dev.gajim.org/gajim/python-nbxmpp/-/commit/225267edef7026d3217dd196682c541c8643499e
You're receiving this email because of your account on dev.gajim.org.
_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits