comparison sat_pubsub/remote_roster.py @ 242:a6170637690d

remote roster partial support
author Goffi <goffi@goffi.org>
date Sun, 27 May 2012 15:36:06 +0200
parents
children 06494c9b25f2
comparison
equal deleted inserted replaced
241:d2bdff8a4b45 242:a6170637690d
1 #!/usr/bin/python
2 #-*- coding: utf-8 -*-
3 #
4 """
5 Copyright (c) 2003-2011 Ralph Meijer
6 Copyright (c) 2012 Jérôme Poisson
7
8
9 This program is free software: you can redistribute it and/or modify
10 it under the terms of the GNU Affero General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU Affero General Public License for more details.
18
19 You should have received a copy of the GNU Affero General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>.
21 --
22
23 This program is based on Idavoll (http://idavoll.ik.nu/),
24 originaly written by Ralph Meijer (http://ralphm.net/blog/)
25 It is sublicensed under AGPL v3 (or any later version) as allowed by the original
26 license.
27
28 --
29
30 Here is a copy of the original license:
31
32 Copyright (c) 2003-2011 Ralph Meijer
33
34 Permission is hereby granted, free of charge, to any person obtaining
35 a copy of this software and associated documentation files (the
36 "Software"), to deal in the Software without restriction, including
37 without limitation the rights to use, copy, modify, merge, publish,
38 distribute, sublicense, and/or sell copies of the Software, and to
39 permit persons to whom the Software is furnished to do so, subject to
40 the following conditions:
41
42 The above copyright notice and this permission notice shall be
43 included in all copies or substantial portions of the Software.
44
45 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
46 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
47 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
48 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
49 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
50 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
51 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
52
53 """
54
55 """
56 Remote roster client.
57
58 This module access roster throught a hacked version of
59 remote roster management http://jkaluza.fedorapeople.org/remote-roster.html
60 """
61
62 from wokkel import xmppim
63 from wokkel.compat import IQ
64 from twisted.words.xish import domish
65
66 NS_ROSTER = 'jabber:iq:roster'
67
68 class RosterClient(xmppim.RosterClientProtocol):
69 """Similar to classic RosterClient, but we can get any jid managed by the host server"""
70 #FIXME: need to manage updates, and database sync
71 #TODO: cache
72
73 def getRoster(self, to_jid):
74 """
75 Retrieve contact list.
76
77 @return: Roster as a mapping from L{JID} to L{RosterItem}.
78 @rtype: L{twisted.internet.defer.Deferred}
79 """
80
81 def processRoster(result):
82 roster = {}
83 for element in domish.generateElementsQNamed(result.query.children,
84 'item', NS_ROSTER):
85 item = self._parseRosterItem(element)
86 roster[item.jid.userhost()] = item
87
88 return roster
89
90 iq = IQ(self.xmlstream, 'get')
91 iq.addElement((NS_ROSTER, 'query'))
92 iq["to"] = to_jid.userhost()
93 d = iq.send()
94 d.addCallback(processRoster)
95 return d
96
97