Implement jabber:iq:gateway protocol
jabber:iq:protocol translate legacy username into JID. darcs-hash:20070606153149-86b55-2d9efcea2c8271f57f561d33f4e95e100aa5256e.gz
This commit is contained in:
@@ -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
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -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
|
||||||
###########################################################################
|
###########################################################################
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user