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()
|