import logging import base64 from xml.etree import cElementTree as ET from sleekxmpp.xmlstream.stanzabase import ElementBase, registerStanzaPlugin from sleekxmpp.plugins import base from sleekxmpp.xmlstream.handler.callback import Callback from sleekxmpp.xmlstream.matcher.xpath import MatchXPath from sleekxmpp.stanza.iq import Iq import object class AliasQuery(ElementBase): namespace = 'alias:query' name = 'query' plugin_attrib = 'alias' interfaces = set(('node', 'type', 'items', 'object')) sub_interfaces = set(('items')) class AliasPlugin(base.base_plugin): def plugin_init(self) : self.description = 'Plugin to handle alias queries' registerStanzaPlugin(Iq, AliasQuery) self.xmpp.registerHandler( Callback('Alias queries', MatchXPath('{%s}iq/{%s}query' % (self.xmpp.default_ns, AliasQuery.namespace)), self.handle_alias_query)) def handle_alias_query(self, iq): receiver = base64.b64decode(iq['to'].user) handler = object.ObjectHandler(receiver) node = iq['alias']['node'] if node == "" : node = handler.get_home_node() if iq['alias']['type'] == 'items': logging.debug('childs of {} requested'.format(node)) childs = handler.get_child_list(node, iq['alias']['from']) test = ET.Element("test") for child in childs : test.append(ET.Element("item", {'node':child})) iq.reply().set_payload(test).send()