1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- # -*- coding: utf-8 -*-
- """
- sleekxmpp.xmlstream.matcher.id
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Part of SleekXMPP: The Sleek XMPP Library
- :copyright: (c) 2011 Nathanael C. Fritz
- :license: MIT, see LICENSE for more details
- """
- from sleekxmpp.xmlstream.matcher.base import MatcherBase
- class MatchIDSender(MatcherBase):
- """
- The IDSender matcher selects stanzas that have the same stanza 'id'
- interface value as the desired ID, and that the 'from' value is one
- of a set of approved entities that can respond to a request.
- """
- def match(self, xml):
- """Compare the given stanza's ``'id'`` attribute to the stored
- ``id`` value, and verify the sender's JID.
- :param xml: The :class:`~sleekxmpp.xmlstream.stanzabase.ElementBase`
- stanza to compare against.
- """
- selfjid = self._criteria['self']
- peerjid = self._criteria['peer']
- allowed = {}
- allowed[''] = True
- allowed[selfjid.bare] = True
- allowed[selfjid.host] = True
- allowed[peerjid.full] = True
- allowed[peerjid.bare] = True
- allowed[peerjid.host] = True
- _from = xml['from']
- try:
- return xml['id'] == self._criteria['id'] and allowed[_from]
- except KeyError:
- return False
|