Implement jabber:iq:gateway protocol

jabber:iq:protocol translate legacy username into JID.

darcs-hash:20070606153149-86b55-2d9efcea2c8271f57f561d33f4e95e100aa5256e.gz
This commit is contained in:
David Rousselie
2007-06-06 17:31:49 +02:00
parent fb65e54100
commit db4d7fd2ac
4 changed files with 85 additions and 0 deletions

View File

@@ -186,6 +186,10 @@ class JCLComponent(Component, object):
self.handle_get_register) self.handle_get_register)
self.stream.set_iq_set_handler("query", "jabber:iq:register", self.stream.set_iq_set_handler("query", "jabber:iq:register",
self.handle_set_register) self.handle_set_register)
self.stream.set_iq_get_handler("query", "jabber:iq:gateway",
self.handle_get_gateway)
self.stream.set_iq_set_handler("query", "jabber:iq:gateway",
self.handle_set_gateway)
self.stream.set_presence_handler("available", self.stream.set_presence_handler("available",
self.handle_presence_available) self.handle_presence_available)
@@ -286,6 +290,34 @@ class JCLComponent(Component, object):
self.send_stanzas(result) self.send_stanzas(result)
return result return result
def handle_get_gateway(self, info_query):
"""Handle IQ-get "jabber:iq:gateway" requests.
Return prompt and description.
"""
self.__logger.debug("GET_GATEWAY")
info_query = info_query.make_result_response()
lang_class = self.lang.get_lang_class_from_node(info_query.get_node())
query = info_query.new_query("jabber:iq:gateway")
query.newTextChild(query.ns(), "desc", lang_class.get_gateway_desc)
query.newTextChild(query.ns(), "prompt", lang_class.get_gateway_prompt)
self.stream.send(info_query)
return 1
def handle_set_gateway(self, info_query):
"""Handle IQ-set "jabber:iq:gateway" requests.
Return well formed JID from legacy ID.
"""
self.__logger.debug("SET_GATEWAY")
prompt_nodes = info_query.xpath_eval("jig:query/jig:prompt",
{"jig" : "jabber:iq:gateway"})
# TODO : Add malformed content error handling
jid = prompt_nodes[0].content.replace("@", "%") + "@" + unicode(self.jid)
info_query = info_query.make_result_response()
query = info_query.new_query("jabber:iq:gateway")
query.newTextChild(query.ns(), "jid", jid)
self.stream.send(info_query)
return 1
def disco_get_info(self, node, info_query): def disco_get_info(self, node, info_query):
"""Discovery get info handler """Discovery get info handler
""" """

View File

@@ -77,6 +77,7 @@ class MockStream(object):
raise Exception("IQ type unknown: " + iq_type) raise Exception("IQ type unknown: " + iq_type)
if not ns in ["jabber:iq:version", if not ns in ["jabber:iq:version",
"jabber:iq:register", "jabber:iq:register",
"jabber:iq:gateway",
"http://jabber.org/protocol/disco#items", "http://jabber.org/protocol/disco#items",
"http://jabber.org/protocol/disco#info"]: "http://jabber.org/protocol/disco#info"]:
raise Exception("Unknown namespace: " + ns) raise Exception("Unknown namespace: " + ns)
@@ -447,6 +448,50 @@ class JCLComponent_TestCase(unittest.TestCase):
self.comp.signal_handler(42, None) self.comp.signal_handler(42, None)
self.assertFalse(self.comp.running) self.assertFalse(self.comp.running)
###########################################################################
# 'handle_get_gateway' tests
###########################################################################
def test_handle_get_gateway(self):
self.comp.stream = MockStream()
self.comp.stream_class = MockStream
info_query = Iq(stanza_type = "get",
from_jid = "user1@test.com")
info_query.new_query("jabber:iq:gateway")
self.comp.handle_get_gateway(info_query)
self.assertEquals(len(self.comp.stream.sent), 1)
iq_sent = self.comp.stream.sent[0]
self.assertEquals(iq_sent.get_to(), "user1@test.com")
self.assertEquals(len(iq_sent.xpath_eval("*/*")), 2)
desc_nodes = iq_sent.xpath_eval("jig:query/jig:desc",
{"jig" : "jabber:iq:gateway"})
self.assertEquals(len(desc_nodes), 1)
self.assertEquals(desc_nodes[0].content, Lang.en.get_gateway_desc)
prompt_nodes = iq_sent.xpath_eval("jig:query/jig:prompt",
{"jig" : "jabber:iq:gateway"})
self.assertEquals(len(prompt_nodes), 1)
self.assertEquals(prompt_nodes[0].content, Lang.en.get_gateway_prompt)
###########################################################################
# 'handle_set_gateway' tests
###########################################################################
def test_handle_set_gateway(self):
self.comp.stream = MockStream()
self.comp.stream_class = MockStream
info_query = Iq(stanza_type = "get",
from_jid = "user1@test.com")
query = info_query.new_query("jabber:iq:gateway")
prompt = query.newChild(None, "prompt", None)
prompt.addContent("user@test.com")
self.comp.handle_set_gateway(info_query)
self.assertEquals(len(self.comp.stream.sent), 1)
iq_sent = self.comp.stream.sent[0]
self.assertEquals(iq_sent.get_to(), "user1@test.com")
self.assertEquals(len(iq_sent.xpath_eval("*/*")), 1)
jid_nodes = iq_sent.xpath_eval("jig:query/jig:jid",
{"jig" : "jabber:iq:gateway"})
self.assertEquals(len(jid_nodes), 1)
self.assertEquals(jid_nodes[0].content, "user%test.com@jcl.test.com")
########################################################################### ###########################################################################
# 'disco_get_info' tests # 'disco_get_info' tests
########################################################################### ###########################################################################

View File

@@ -107,6 +107,9 @@ class Lang:
error_subject = u"Error" error_subject = u"Error"
error_body = u"An error has occured:\n\t%s" error_body = u"An error has occured:\n\t%s"
get_gateway_desc = u"Please enter the email address of your contact"
get_gateway_prompt = u"Email address"
class fr: class fr:
component_name = u"composant générique Jabber Component Library" component_name = u"composant générique Jabber Component Library"
register_title = u"Enregistrement d'une nouvelle connexion" register_title = u"Enregistrement d'une nouvelle connexion"
@@ -145,6 +148,9 @@ class Lang:
error_subject = u"Erreur" error_subject = u"Erreur"
error_body = u"Une erreur est survenue :\n\t%s" error_body = u"Une erreur est survenue :\n\t%s"
get_gateway_desc = u"Entrer l'adresse email de votre contact"
get_gateway_prompt = u"Adresse email"
class nl: class nl:
# TODO: when finish, delete this line and uncomment in tests/lang.py the makeSuite(Language_nl_TestCase, 'test') line # TODO: when finish, delete this line and uncomment in tests/lang.py the makeSuite(Language_nl_TestCase, 'test') line
register_title = u"Registratie van verbindingen voor Jabber Mail" register_title = u"Registratie van verbindingen voor Jabber Mail"

View File

@@ -111,6 +111,8 @@ class Language_TestCase(unittest.TestCase):
self.assertNotEquals(self.lang_class.error_subject, None) self.assertNotEquals(self.lang_class.error_subject, None)
self.assertNotEquals(self.lang_class.error_body % (""), None) self.assertNotEquals(self.lang_class.error_body % (""), None)
self.assertNotEquals(self.lang_class.get_gateway_desc, None)
self.assertNotEquals(self.lang_class.get_gateway_prompt, None)
class Language_fr_TestCase(Language_TestCase): class Language_fr_TestCase(Language_TestCase):
def setUp(self): def setUp(self):