plugins XEP-0048, XEP-0049: feature is not checked anymore before using private XML storage, as feature announcement is not mandatory in XEP-0049

This commit is contained in:
Goffi 2014-04-10 16:12:50 +02:00
commit 3fcd7e22d9

View file

@ -19,7 +19,6 @@
from sat.core.i18n import _
from logging import debug, info, error, warning
from twisted.internet import defer
from wokkel import compat
from twisted.words.xish import domish
@ -44,7 +43,6 @@ class XEP_0049(object):
info(_("Plugin XEP-0049 initialization"))
self.host = host
@defer.inlineCallbacks
def privateXMLStore(self, element, profile_key):
"""Store private data
@param element: domish.Element to store (must have a namespace)
@ -53,13 +51,12 @@ class XEP_0049(object):
"""
assert isinstance(element, domish.Element)
client = self.host.getClient(profile_key)
yield self.host.checkFeature(XEP_0049.NS_PRIVATE, profile_key=client.profile)
# XXX: feature announcement in disco#info is not mandatory in XEP-0049, so we have to try to use private XML, and react according to the answer
iq_elt = compat.IQ(client.xmlstream)
query_elt = iq_elt.addElement('query', XEP_0049.NS_PRIVATE)
query_elt.addChild(element)
yield iq_elt.send()
return iq_elt.send()
@defer.inlineCallbacks
def privateXMLGet(self, node_name, namespace, profile_key):
"""Store private data
@param node_name: name of the node to get
@ -69,11 +66,14 @@ class XEP_0049(object):
"""
client = self.host.getClient(profile_key)
yield self.host.checkFeature(XEP_0049.NS_PRIVATE, profile_key=client.profile)
# XXX: see privateXMLStore note about feature checking
iq_elt = compat.IQ(client.xmlstream, 'get')
query_elt = iq_elt.addElement('query', XEP_0049.NS_PRIVATE)
query_elt.addElement(node_name, namespace)
answer_iq_elt = yield iq_elt.send()
answer_query_elt = answer_iq_elt.elements(XEP_0049.NS_PRIVATE, 'query').next()
defer.returnValue(answer_query_elt.firstChildElement())
def getCb(answer_iq_elt):
answer_query_elt = answer_iq_elt.elements(XEP_0049.NS_PRIVATE, 'query').next()
return answer_query_elt.firstChildElement()
d = iq_elt.send()
d.addCallback(getCb)
return d