core (disco): added missing disco extensions when generating the cap hash.

This commit is contained in:
Goffi 2019-03-01 19:28:11 +01:00
commit 8ae596600d
2 changed files with 33 additions and 11 deletions

View file

@ -356,6 +356,7 @@ class Discovery(object):
"""
s = []
# identities
byte_identities = [
ByteIdentity(service)
for service in services
@ -367,6 +368,7 @@ class Discovery(object):
for identity in byte_identities:
s.append(str(identity))
s.append("<")
# features
byte_features = [
service.encode("utf-8")
for service in services
@ -376,9 +378,26 @@ class Discovery(object):
for feature in byte_features:
s.append(feature)
s.append("<")
# TODO: manage XEP-0128 data form here
# extensions
ext = services.extensions.values()
ext.sort(key=lambda f: f.formNamespace.encode('utf-8'))
for extension in ext:
s.append(extension.formNamespace.encode('utf-8'))
s.append("<")
fields = extension.fieldList
fields.sort(key=lambda f: f.var.encode('utf-8'))
for field in fields:
s.append(field.var.encode('utf-8'))
s.append("<")
values = [v.encode('utf-8') for v in field.values]
values.sort()
for value in values:
s.append(value)
s.append("<")
cap_hash = b64encode(sha1("".join(s)).digest())
log.debug(_(u"Capability hash generated: [%s]") % cap_hash)
log.debug(_(u"Capability hash generated: [{cap_hash}]").format(cap_hash=cap_hash))
return cap_hash
@defer.inlineCallbacks

View file

@ -165,9 +165,10 @@ class XEP_0115_handler(XMPPHandler):
if c_hash != "sha-1": # unknown hash method
log.warning(
_(
u"Unknown hash method for entity capabilities: [%(hash_method)s] (entity: %(jid)s, node: %(node)s)"
u"Unknown hash method for entity capabilities: [{hash_method}] "
u"(entity: {entity_jid}, node: {node})"
)
% {"hash_method": c_hash, "jid": from_jid, "node": c_node}
.format(hash_method = c_hash, entity_jid = from_jid, node = c_node)
)
def cb(__):
@ -177,14 +178,16 @@ class XEP_0115_handler(XMPPHandler):
if computed_hash != c_ver:
log.warning(
_(
u"Computed hash differ from given hash:\ngiven: [%(given_hash)s]\ncomputed: [%(computed_hash)s]\n(entity: %(jid)s, node: %(node)s)"
u"Computed hash differ from given hash:\n"
u"given: [{given}]\n"
u"computed: [{computed}]\n"
u"(entity: {entity_jid}, node: {node})"
).format(
given = c_ver,
computed = computed_hash,
entity_jid = from_jid,
node = c_node,
)
% {
"given_hash": c_ver,
"computed_hash": computed_hash,
"jid": from_jid,
"node": c_node,
}
)
def eb(failure):