diff options
Diffstat (limited to 'plugin.py')
| -rw-r--r-- | plugin.py | 50 |
1 files changed, 29 insertions, 21 deletions
@@ -2,7 +2,7 @@ import logging import base64 from xml.etree import cElementTree as ET -from sleekxmpp.xmlstream.stanzabase import ElementBase, registerStanzaPlugin +from sleekxmpp.xmlstream.stanzabase import ElementBase, register_stanza_plugin from sleekxmpp.plugins import base from sleekxmpp.xmlstream.handler.callback import Callback from sleekxmpp.xmlstream.matcher.xpath import MatchXPath @@ -17,33 +17,41 @@ class AliasQuery(ElementBase): interfaces = set(('node', 'type', 'items', 'object')) sub_interfaces = set(('items')) + def addItem(self, node, permission = None): + item = AliasItem(None, self) + item['node'] = node + if permission is not None: + item['permission'] = permission + +class AliasItem(ElementBase): + namespace = 'alias:query' + name = 'item' + plugin_attrib = 'item' + interfaces = set(('node', 'permission')) class AliasPlugin(base.base_plugin): - def plugin_init(self) : + 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)) + register_stanza_plugin(Iq, AliasQuery) + query_parser = MatchXPath('{{{}}}iq/{{{}}}query'.format(self.xmpp.default_ns, + AliasQuery.namespace)) + self.xmpp.register_handler(Callback('Alias queries', query_parser, + self.handle_alias_query)) def handle_alias_query(self, iq): - receiver = base64.b64decode(iq['to'].user) - handler = object.ObjectHandler(receiver) + callee = base64.b64decode(iq['to'].user) + caller = iq['alias']['from'] + handler = object.ObjectHandler(callee) node = iq['alias']['node'] - if node == "" : + if not 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() - - - - + childs = handler.get_child_list(node, caller) + reply = AliasQuery() + reply['node'] = node + reply['type'] = 'items' + for child in childs: + reply.addItem(child, "test") + iq.reply().set_payload(reply).send()
\ No newline at end of file |
