48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
|
# -*- 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
|