diff options
author | Lance Stout <lancestout@gmail.com> | 2014-02-03 19:15:08 -0600 |
---|---|---|
committer | Lance Stout <lancestout@gmail.com> | 2014-02-03 19:15:08 -0600 |
commit | bd03f071c611225984223c6d942cab49b46bfcc8 (patch) | |
tree | 2a76615ab2786835216d51c96e98ff2ceee5feff /sleekxmpp/xmlstream/matcher/idsender.py | |
parent | 12995e280e7dcb9a34933d9e4fa3614d1b958eaa (diff) | |
download | slixmpp-bd03f071c611225984223c6d942cab49b46bfcc8.tar.gz slixmpp-bd03f071c611225984223c6d942cab49b46bfcc8.tar.bz2 slixmpp-bd03f071c611225984223c6d942cab49b46bfcc8.tar.xz slixmpp-bd03f071c611225984223c6d942cab49b46bfcc8.zip |
Fix verifying 'from' for IQ results.
Closes issue #278
Diffstat (limited to 'sleekxmpp/xmlstream/matcher/idsender.py')
-rw-r--r-- | sleekxmpp/xmlstream/matcher/idsender.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/sleekxmpp/xmlstream/matcher/idsender.py b/sleekxmpp/xmlstream/matcher/idsender.py new file mode 100644 index 00000000..5c2c1f51 --- /dev/null +++ b/sleekxmpp/xmlstream/matcher/idsender.py @@ -0,0 +1,47 @@ +# -*- 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 |