plugin group blog: item configuration data (which groups are allowed) are parsed and added to microblog data

This commit is contained in:
Goffi 2012-10-30 00:54:42 +01:00
commit da7965bb5f

View file

@ -139,7 +139,7 @@ class GroupBlog():
if hasattr(client,"_item_access_pubsub_pending"):
#XXX: we need to wait for item access pubsub service check
ignore = yield client._item_access_pubsub_pending
yield client._item_access_pubsub_pending
del client._item_access_pubsub_pending
if not client.item_access_pubsub:
@ -155,6 +155,7 @@ class GroupBlog():
origin_host = publisher.host.split('.')
event_host = event.sender.host.split('.')
#FIXME: basic origin check, must be improved
#TODO: automatic security test
if (not (origin_host)
or len(event_host) < len(origin_host)
or event_host[-len(origin_host):] != origin_host):
@ -162,12 +163,35 @@ class GroupBlog():
unicode(publisher)))
return
for item in event.items:
microblog_data = self.host.plugins["XEP-0277"].item2mbdata(item)
microblog_data = self.item2gbdata(item)
self.host.bridge.personalEvent(publisher.full(), "MICROBLOG", microblog_data, profile)
return False
return True
def _parseAccessData(self, microblog_data, item):
form_elts = filter(lambda elt: elt.name == "x", item.children)
for form_elt in form_elts:
form = data_form.Form.fromElement(form_elt)
if (form.formNamespace == NS_PUBSUB_ITEM_CONFIG):
access_model = form.get(OPT_ACCESS_MODEL, 'open')
if access_model == "roster":
try:
microblog_data["groups"] = '\n'.join(form.fields[OPT_ROSTER_GROUPS_ALLOWED].values)
except KeyError:
warning("No group found for roster access-model")
microblog_data["groups"] = ''
break
def item2gbdata(self, item):
""" Convert item to microblog data dictionary + add access data """
microblog_data = self.host.plugins["XEP-0277"].item2mbdata(item)
self._parseAccessData(microblog_data, item)
return microblog_data
def getNodeName(self, publisher):
"""Retrieve the name of publisher's node
@ -252,7 +276,7 @@ class GroupBlog():
profile, client = result
d = self.host.plugins["XEP-0060"].getItems(client.item_access_pubsub, self.getNodeName(jid.JID(pub_jid)),
max_items=max_items, profile_key=profile_key)
d.addCallback(lambda items: map(self.host.plugins["XEP-0277"].item2mbdata, items))
d.addCallback(lambda items: map(self.item2gbdata, items))
d.addErrback(lambda ignore: {}) #TODO: more complete error management (log !)
return d
@ -298,7 +322,7 @@ class GroupBlog():
for _jid in jids:
d = self.host.plugins["XEP-0060"].getItems(client.item_access_pubsub, self.getNodeName(jid.JID(_jid)),
max_items=max_items, profile_key=profile_key)
d.addCallback(lambda items, source_jid: (source_jid, map(self.host.plugins["XEP-0277"].item2mbdata, items)), _jid)
d.addCallback(lambda items, source_jid: (source_jid, map(self.item2gbdata, items)), _jid)
mblogs.append(d)
dlist = defer.DeferredList(mblogs)
dlist.addCallback(sendResult)