/src/services/RosterRetrieval.py

http://pyaimt.googlecode.com/ · Python · 74 lines · 58 code · 14 blank · 2 comment · 6 complexity · 9c9045409c38d46a84080851e6f03995 MD5 · raw file

  1. # Copyright 2004-2006 Daniel Henninger <jadestorm@nc.rr.com>
  2. # Licensed for distribution under the GPL version 2, check COPYING for details
  3. import utils
  4. from twisted.words.xish.domish import Element
  5. from twisted.words.protocols.jabber.jid import internJID
  6. import config
  7. import lang
  8. from debug import LogEvent, INFO, WARN, ERROR
  9. import globals
  10. class RosterRetrieval:
  11. def __init__(self, pytrans):
  12. self.pytrans = pytrans
  13. self.pytrans.adhoc.addCommand("retrieveroster", self.incomingIq, "command_RosterRetrieval")
  14. def incomingIq(self, el):
  15. to = el.getAttribute("from")
  16. fro = el.getAttribute("from")
  17. froj = internJID(fro)
  18. ID = el.getAttribute("id")
  19. if not hasattr(self.pytrans, "legacycon"):
  20. self.pytrans.iq.sendIqError(to=to, fro=config.jid, ID=ID, xmlns=globals.COMMANDS, etype="cancel", condition="service-unavailable")
  21. ulang = utils.getLang(el)
  22. if not self.pytrans.sessions.has_key(froj.userhost()):
  23. self.pytrans.iq.sendIqError(to=fro, fro=config.jid, ID=ID, xmlns=globals.COMMANDS, etype="cancel", condition="service-unavailable")
  24. return
  25. s = self.pytrans.sessions[froj.userhost()]
  26. if not s.ready:
  27. self.pytrans.iq.sendIqError(to=fro, fro=config.jid, ID=ID, xmlns=globals.COMMANDS, etype="cancel", condition="service-unavailable")
  28. return
  29. iq = Element((None, "iq"))
  30. iq.attributes["to"] = to
  31. iq.attributes["from"] = config.jid
  32. if ID:
  33. iq.attributes["id"] = ID
  34. iq.attributes["type"] = "result"
  35. command = iq.addElement("command")
  36. command.attributes["sessionid"] = self.pytrans.makeMessageID()
  37. command.attributes["node"] = "retrieveroster"
  38. command.attributes["xmlns"] = globals.COMMANDS
  39. command.attributes["status"] = "completed"
  40. x = command.addElement("x")
  41. x.attributes["xmlns"] = globals.XDATA
  42. x.attributes["type"] = "result"
  43. title = x.addElement("title")
  44. title.addContent(lang.get("command_RosterRetrieval", ulang))
  45. reported = x.addElement("reported")
  46. reported.addChild(utils.makeDataFormElement(None, "legacyid", "Legacy ID"))
  47. reported.addChild(utils.makeDataFormElement(None, "nick", "Nickname"))
  48. entities = s.pytrans.xdb.getList("roster", s.jabberID)
  49. if entities != None:
  50. for e in entities:
  51. name = e[0]
  52. attrs = e[1]
  53. item = x.addElement("item")
  54. field = item.addElement("field")
  55. field.attributes["var"] = "legacyid"
  56. field.addElement("value").addContent(name)
  57. field = item.addElement("field")
  58. field.attributes["var"] = "nick"
  59. field.addElement("value").addContent(attrs.get('nickname',''))
  60. self.pytrans.send(iq)