plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
This commit is contained in:
parent
9498114b61
commit
721f404803
1 changed files with 52 additions and 20 deletions
|
|
@ -28,6 +28,7 @@ from sat.core import exceptions
|
|||
from wokkel import disco, data_form, iwokkel
|
||||
from wokkel import rsm
|
||||
from zope.interface import implements
|
||||
from tools import common
|
||||
# import uuid
|
||||
|
||||
try:
|
||||
|
|
@ -48,7 +49,7 @@ NS_PUBSUB_AUTO_CREATE = NS_PUBSUB + "#auto-create"
|
|||
ACCESS_TYPE_MAP = { 'PUBLIC': 'open',
|
||||
'GROUP': 'roster',
|
||||
'JID': None, #JID is not yet managed
|
||||
}
|
||||
}
|
||||
|
||||
MAX_ITEMS = 5
|
||||
MAX_COMMENTS = 5
|
||||
|
|
@ -60,10 +61,9 @@ PLUGIN_INFO = {
|
|||
"type": "MISC",
|
||||
"protocols": [],
|
||||
"dependencies": ["XEP-0277"],
|
||||
"recommendations": ["XEP-0059"],
|
||||
"main": "GroupBlog",
|
||||
"handler": "yes",
|
||||
"description": _("""Implementation of microblogging with roster access""")
|
||||
"description": _("""Implementation of microblogging fine permissions""")
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -88,32 +88,33 @@ class GroupBlog(object):
|
|||
def __init__(self, host):
|
||||
log.info(_("Group blog plugin initialization"))
|
||||
self.host = host
|
||||
self._p = self.host.plugins["XEP-0060"]
|
||||
|
||||
host.bridge.addMethod("sendGroupBlog", ".plugin", in_sign='sassa{ss}s', out_sign='',
|
||||
method=self.sendGroupBlog,
|
||||
async=True)
|
||||
# host.bridge.addMethod("sendGroupBlog", ".plugin", in_sign='sassa{ss}s', out_sign='',
|
||||
# method=self.sendGroupBlog,
|
||||
# async=True)
|
||||
|
||||
host.bridge.addMethod("deleteGroupBlog", ".plugin", in_sign='(sss)ss', out_sign='',
|
||||
method=self.deleteGroupBlog,
|
||||
async=True)
|
||||
# host.bridge.addMethod("deleteGroupBlog", ".plugin", in_sign='(sss)ss', out_sign='',
|
||||
# method=self.deleteGroupBlog,
|
||||
# async=True)
|
||||
|
||||
host.bridge.addMethod("updateGroupBlog", ".plugin", in_sign='(sss)ssa{ss}s', out_sign='',
|
||||
method=self.updateGroupBlog,
|
||||
async=True)
|
||||
# host.bridge.addMethod("updateGroupBlog", ".plugin", in_sign='(sss)ssa{ss}s', out_sign='',
|
||||
# method=self.updateGroupBlog,
|
||||
# async=True)
|
||||
|
||||
host.bridge.addMethod("sendGroupBlogComment", ".plugin", in_sign='ssa{ss}s', out_sign='',
|
||||
method=self.sendGroupBlogComment,
|
||||
async=True)
|
||||
# host.bridge.addMethod("sendGroupBlogComment", ".plugin", in_sign='ssa{ss}s', out_sign='',
|
||||
# method=self.sendGroupBlogComment,
|
||||
# async=True)
|
||||
|
||||
# host.bridge.addMethod("getGroupBlogs", ".plugin",
|
||||
# in_sign='sasa{ss}bs', out_sign='(aa{ss}a{ss})',
|
||||
# method=self.getGroupBlogs,
|
||||
# async=True)
|
||||
|
||||
host.bridge.addMethod("getGroupBlogsWithComments", ".plugin",
|
||||
in_sign='sasa{ss}is', out_sign='(a(a{ss}(aa{ss}a{ss}))a{ss})',
|
||||
method=self.getGroupBlogsWithComments,
|
||||
async=True)
|
||||
# host.bridge.addMethod("getGroupBlogsWithComments", ".plugin",
|
||||
# in_sign='sasa{ss}is', out_sign='(a(a{ss}(aa{ss}a{ss}))a{ss})',
|
||||
# method=self.getGroupBlogsWithComments,
|
||||
# async=True)
|
||||
|
||||
# host.bridge.addMethod("getMassiveGroupBlogs", ".plugin",
|
||||
# in_sign='sasa{ss}s', out_sign='a{s(aa{ss}a{ss})}',
|
||||
|
|
@ -130,6 +131,8 @@ class GroupBlog(object):
|
|||
# async=True)
|
||||
|
||||
# host.trigger.add("PubSubItemsReceived", self.pubSubItemsReceivedTrigger)
|
||||
host.trigger.add("XEP-0277_data2entry", self._data2entryTrigger)
|
||||
host.trigger.add("XEP-0277_comments", self._commentsTrigger)
|
||||
|
||||
## plugin management methods ##
|
||||
|
||||
|
|
@ -140,7 +143,7 @@ class GroupBlog(object):
|
|||
def profileConnected(self, profile):
|
||||
client = self.host.getClient(profile)
|
||||
try:
|
||||
yield self.host.checkFeatures((NS_PUBSUB_GROUPBLOG, NS_PUBSUB_AUTO_CREATE), profile=profile)
|
||||
yield self.host.checkFeatures((NS_PUBSUB_GROUPBLOG,), profile=profile)
|
||||
except exceptions.FeatureNotFound:
|
||||
client.server_groupblog_available = False
|
||||
log.warning(_(u"Server is not able to manage item-access pubsub, we can't use group blog"))
|
||||
|
|
@ -162,6 +165,35 @@ class GroupBlog(object):
|
|||
log.error("Service should be available !")
|
||||
return {}
|
||||
|
||||
def _data2entryTrigger(self, client, mb_data, entry_elt, item_elt):
|
||||
"""Build fine access permission if needed
|
||||
|
||||
This trigger check if "group*" key are present,
|
||||
and create a fine item config to restrict view to these groups
|
||||
"""
|
||||
groups = list(common.dict2iter('group', mb_data))
|
||||
if not groups:
|
||||
return
|
||||
if not client.server_groupblog_available:
|
||||
raise exceptions.CancelError(u"GroupBlog is not available")
|
||||
log.debug(u"This entry use group blog")
|
||||
form = data_form.Form('submit', formNamespace=NS_PUBSUB_ITEM_CONFIG)
|
||||
# FIXME: ACCESS_ROSTER need to be changed to a new ACCESS_PUBLISHER_ROSTER when available
|
||||
access = data_form.Field(None, self._p.OPT_ACCESS_MODEL, value=self._p.ACCESS_ROSTER)
|
||||
allowed = data_form.Field(None, self._p.OPT_ROSTER_GROUPS_ALLOWED, values=groups)
|
||||
form.addField(access)
|
||||
form.addField(allowed)
|
||||
item_elt.addChild(form.toElement())
|
||||
|
||||
def _commentsTrigger(self, client, mb_data, options):
|
||||
"""This method is called when a comments node is about to be created
|
||||
|
||||
It changes the access mode to roster if needed, and give the authorized groups
|
||||
"""
|
||||
if "group" in mb_data:
|
||||
# FIXME: ACCESS_ROSTER need to be changed to a new ACCESS_PUBLISHER_ROSTER when available
|
||||
options[self._p.OPT_ACCESS_MODEL] = self._p.ACCESS_ROSTER
|
||||
options[self._p.OPT_ROSTER_GROUPS_ALLOWED] = list(common.dict2iter('group', mb_data))
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def _initialise(self, profile_key):
|
||||
|
|
|
|||
Loading…
Reference in a new issue