aboutsummaryrefslogtreecommitdiffstats
path: root/plugin.py
blob: d250f970f22574ce9ff3e55440630fb736f729d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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()