annotate sat/plugins/plugin_misc_groupblog.py @ 2716:06160b529da6

core (memory/sqlite): changed history constraint /!\ Database schema change /!\ History was using a unique constraint on `profile_id, timestamp, source, dest, source_res, dest_res`, which can cause trouble because several messages send quickly by the same person can have a common timestamp (specially with delayed messages where precision is second), resulting in message loss. The new constraint use `profile_id, stanza_id, source, dest` where `stanza_id` is XEP-0359 stanza_id, so it's unique by definition, and no message should be lost anymore. Because sqlite doesn't support altering table with a constraint change, we have to create new tables and copy old data to new one, which can be pretty long. Sqlite update mechanism with "specifics" has been fixed when several updates are applied (e.g. moving from v5 to v7) and a specific is in the workflow.
author Goffi <goffi@goffi.org>
date Sun, 09 Dec 2018 14:07:26 +0100
parents 56f94936df1e
children 003b8b4b56a7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1934
2daf7b4c6756 use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents: 1919
diff changeset
1 #!/usr/bin/env python2
307
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
3
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
4 # SAT plugin for microbloging with roster access
2483
0046283a285d dates update
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
5 # Copyright (C) 2009-2018 Jérôme Poisson (goffi@goffi.org)
307
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
6
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
7 # This program is free software: you can redistribute it and/or modify
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
10 # (at your option) any later version.
307
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
11
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
12 # This program is distributed in the hope that it will be useful,
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
15 # GNU Affero General Public License for more details.
307
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
16
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
307
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
19
771
bfabeedbf32e core: i18n refactoring:
Goffi <goffi@goffi.org>
parents: 770
diff changeset
20 from sat.core.i18n import _
916
1a759096ccbd core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents: 892
diff changeset
21 from sat.core.constants import Const as C
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 944
diff changeset
22 from sat.core.log import getLogger
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
23
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 944
diff changeset
24 log = getLogger(__name__)
476
b9fd32b46306 plugin groupblog: added disco info + misc fixes
Goffi <goffi@goffi.org>
parents: 471
diff changeset
25 from twisted.internet import defer
708
6aa71c853bf5 plugin group blog: management of extra data/rich text for blog comments
Goffi <goffi@goffi.org>
parents: 707
diff changeset
26 from sat.core import exceptions
476
b9fd32b46306 plugin groupblog: added disco info + misc fixes
Goffi <goffi@goffi.org>
parents: 471
diff changeset
27 from wokkel import disco, data_form, iwokkel
b9fd32b46306 plugin groupblog: added disco info + misc fixes
Goffi <goffi@goffi.org>
parents: 471
diff changeset
28 from zope.interface import implements
1919
d3354c80bd1f core (tools): moved common to a separate package, and put data method in a data_format module
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
29 from sat.tools.common import data_format
615
6f4c31192c7c plugins XEP-0060, XEP-0277, groupblog: comments implementation (first draft, not finished yet):
Goffi <goffi@goffi.org>
parents: 609
diff changeset
30
476
b9fd32b46306 plugin groupblog: added disco info + misc fixes
Goffi <goffi@goffi.org>
parents: 471
diff changeset
31 try:
b9fd32b46306 plugin groupblog: added disco info + misc fixes
Goffi <goffi@goffi.org>
parents: 471
diff changeset
32 from twisted.words.protocols.xmlstream import XMPPHandler
b9fd32b46306 plugin groupblog: added disco info + misc fixes
Goffi <goffi@goffi.org>
parents: 471
diff changeset
33 except ImportError:
b9fd32b46306 plugin groupblog: added disco info + misc fixes
Goffi <goffi@goffi.org>
parents: 471
diff changeset
34 from wokkel.subprotocols import XMPPHandler
307
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
35
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
36 NS_PUBSUB = "http://jabber.org/protocol/pubsub"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
37 NS_GROUPBLOG = "http://salut-a-toi.org/protocol/groupblog"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
38 # NS_PUBSUB_EXP = 'http://goffi.org/protocol/pubsub' #for non official features
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
39 NS_PUBSUB_EXP = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
40 NS_PUBSUB
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
41 ) # XXX: we can't use custom namespace as Wokkel's PubSubService use official NS
1485
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
42 NS_PUBSUB_GROUPBLOG = NS_PUBSUB_EXP + "#groupblog"
462
d9456d94cd12 plugin groupblog: next-gen group blog first draft
Goffi <goffi@goffi.org>
parents: 459
diff changeset
43 NS_PUBSUB_ITEM_CONFIG = NS_PUBSUB_EXP + "#item-config"
307
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
44
1268
bb30bf3ae932 plugins XEP-0060, XEP-0277, groupblog: make use of RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents: 1243
diff changeset
45
307
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
46 PLUGIN_INFO = {
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
47 C.PI_NAME: "Group blogging through collections",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
48 C.PI_IMPORT_NAME: "GROUPBLOG",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
49 C.PI_TYPE: "MISC",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
50 C.PI_PROTOCOLS: [],
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
51 C.PI_DEPENDENCIES: ["XEP-0277"],
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
52 C.PI_MAIN: "GroupBlog",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
53 C.PI_HANDLER: "yes",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
54 C.PI_DESCRIPTION: _("""Implementation of microblogging fine permissions"""),
307
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
55 }
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
56
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
57
588
beaf6bec2fcd Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
58 class GroupBlog(object):
462
d9456d94cd12 plugin groupblog: next-gen group blog first draft
Goffi <goffi@goffi.org>
parents: 459
diff changeset
59 """This class use a SàT PubSub Service to manage access on microblog"""
307
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
60
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
61 def __init__(self, host):
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 944
diff changeset
62 log.info(_("Group blog plugin initialization"))
307
1e4575e12581 Group blog first draft
Goffi <goffi@goffi.org>
parents:
diff changeset
63 self.host = host
1662
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
64 self._p = self.host.plugins["XEP-0060"]
1671
1895846fc9cb plugin XEP-0277, group blog: added item2data trigger + group permission are parsed when receiving a new item
Goffi <goffi@goffi.org>
parents: 1664
diff changeset
65 host.trigger.add("XEP-0277_item2data", self._item2dataTrigger)
1662
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
66 host.trigger.add("XEP-0277_data2entry", self._data2entryTrigger)
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
67 host.trigger.add("XEP-0277_comments", self._commentsTrigger)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
68
1420
7c0acb966fd6 plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
69 ## plugin management methods ##
7c0acb966fd6 plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
70
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
71 def getHandler(self, client):
476
b9fd32b46306 plugin groupblog: added disco info + misc fixes
Goffi <goffi@goffi.org>
parents: 471
diff changeset
72 return GroupBlog_handler()
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
73
465
78e67a59d51d plugin groupblog: added getLastGroupBlogs method
Goffi <goffi@goffi.org>
parents: 462
diff changeset
74 @defer.inlineCallbacks
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
75 def profileConnected(self, client):
1492
6ec2741b7268 plugin groupblog: item access availability on serveur is checked on profile connection, and getFeatures is filled accordingly (with "available" key)
Goffi <goffi@goffi.org>
parents: 1485
diff changeset
76 try:
2148
a543eda2c923 core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents: 2145
diff changeset
77 yield self.host.checkFeatures(client, (NS_PUBSUB_GROUPBLOG,))
1492
6ec2741b7268 plugin groupblog: item access availability on serveur is checked on profile connection, and getFeatures is filled accordingly (with "available" key)
Goffi <goffi@goffi.org>
parents: 1485
diff changeset
78 except exceptions.FeatureNotFound:
6ec2741b7268 plugin groupblog: item access availability on serveur is checked on profile connection, and getFeatures is filled accordingly (with "available" key)
Goffi <goffi@goffi.org>
parents: 1485
diff changeset
79 client.server_groupblog_available = False
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
80 log.warning(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
81 _(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
82 u"Server is not able to manage item-access pubsub, we can't use group blog"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
83 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
84 )
1485
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
85 else:
1492
6ec2741b7268 plugin groupblog: item access availability on serveur is checked on profile connection, and getFeatures is filled accordingly (with "available" key)
Goffi <goffi@goffi.org>
parents: 1485
diff changeset
86 client.server_groupblog_available = True
6ec2741b7268 plugin groupblog: item access availability on serveur is checked on profile connection, and getFeatures is filled accordingly (with "available" key)
Goffi <goffi@goffi.org>
parents: 1485
diff changeset
87 log.info(_(u"Server can manage group blogs"))
1485
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
88
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
89 def getFeatures(self, profile):
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
90 try:
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
91 client = self.host.getClient(profile)
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
92 except exceptions.ProfileNotSetError:
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
93 return {}
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
94 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
95 return {"available": C.boolConst(client.server_groupblog_available)}
1485
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
96 except AttributeError:
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
97 if self.host.isConnected(profile):
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
98 log.debug("Profile is not connected, service is not checked yet")
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
99 else:
1673
95522b37bf5a plugin group blog: minor log change
Goffi <goffi@goffi.org>
parents: 1672
diff changeset
100 log.error("client.server_groupblog_available should be available !")
1485
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
101 return {}
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
102
1671
1895846fc9cb plugin XEP-0277, group blog: added item2data trigger + group permission are parsed when receiving a new item
Goffi <goffi@goffi.org>
parents: 1664
diff changeset
103 def _item2dataTrigger(self, item_elt, entry_elt, microblog_data):
1895846fc9cb plugin XEP-0277, group blog: added item2data trigger + group permission are parsed when receiving a new item
Goffi <goffi@goffi.org>
parents: 1664
diff changeset
104 """Parse item to find group permission elements"""
1895846fc9cb plugin XEP-0277, group blog: added item2data trigger + group permission are parsed when receiving a new item
Goffi <goffi@goffi.org>
parents: 1664
diff changeset
105 config_form = data_form.findForm(item_elt, NS_PUBSUB_ITEM_CONFIG)
1895846fc9cb plugin XEP-0277, group blog: added item2data trigger + group permission are parsed when receiving a new item
Goffi <goffi@goffi.org>
parents: 1664
diff changeset
106 if config_form is None:
1895846fc9cb plugin XEP-0277, group blog: added item2data trigger + group permission are parsed when receiving a new item
Goffi <goffi@goffi.org>
parents: 1664
diff changeset
107 return
1895846fc9cb plugin XEP-0277, group blog: added item2data trigger + group permission are parsed when receiving a new item
Goffi <goffi@goffi.org>
parents: 1664
diff changeset
108 access_model = config_form.get(self._p.OPT_ACCESS_MODEL, self._p.ACCESS_OPEN)
2201
40dd9eb2692c plugin groupblog, XEP-0060: added ACCESS_PUBLISHER_ROSTER and switched to it in groupblog
Goffi <goffi@goffi.org>
parents: 2148
diff changeset
109 if access_model == self._p.ACCESS_PUBLISHER_ROSTER:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
110 data_format.iter2dict(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
111 "group",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
112 config_form.fields[self._p.OPT_ROSTER_GROUPS_ALLOWED].values,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
113 microblog_data,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
114 )
1671
1895846fc9cb plugin XEP-0277, group blog: added item2data trigger + group permission are parsed when receiving a new item
Goffi <goffi@goffi.org>
parents: 1664
diff changeset
115
1662
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
116 def _data2entryTrigger(self, client, mb_data, entry_elt, item_elt):
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
117 """Build fine access permission if needed
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
118
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
119 This trigger check if "group*" key are present,
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
120 and create a fine item config to restrict view to these groups
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
121 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
122 groups = list(data_format.dict2iter("group", mb_data))
1662
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
123 if not groups:
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
124 return
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
125 if not client.server_groupblog_available:
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
126 raise exceptions.CancelError(u"GroupBlog is not available")
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
127 log.debug(u"This entry use group blog")
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
128 form = data_form.Form("submit", formNamespace=NS_PUBSUB_ITEM_CONFIG)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
129 access = data_form.Field(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
130 None, self._p.OPT_ACCESS_MODEL, value=self._p.ACCESS_PUBLISHER_ROSTER
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
131 )
1662
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
132 allowed = data_form.Field(None, self._p.OPT_ROSTER_GROUPS_ALLOWED, values=groups)
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
133 form.addField(access)
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
134 form.addField(allowed)
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
135 item_elt.addChild(form.toElement())
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
136
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
137 def _commentsTrigger(self, client, mb_data, options):
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
138 """This method is called when a comments node is about to be created
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
139
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
140 It changes the access mode to roster if needed, and give the authorized groups
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
141 """
9aa2a703e460 plugin group blog: group permissions are used if "group*" keys are found in mbdata (in data2entry and comments trigger)
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
142 if "group" in mb_data:
2201
40dd9eb2692c plugin groupblog, XEP-0060: added ACCESS_PUBLISHER_ROSTER and switched to it in groupblog
Goffi <goffi@goffi.org>
parents: 2148
diff changeset
143 options[self._p.OPT_ACCESS_MODEL] = self._p.ACCESS_PUBLISHER_ROSTER
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
144 options[self._p.OPT_ROSTER_GROUPS_ALLOWED] = list(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
145 data_format.dict2iter("group", mb_data)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
146 )
1485
9fcc16ef163a plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation
Goffi <goffi@goffi.org>
parents: 1459
diff changeset
147
1268
bb30bf3ae932 plugins XEP-0060, XEP-0277, groupblog: make use of RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents: 1243
diff changeset
148
476
b9fd32b46306 plugin groupblog: added disco info + misc fixes
Goffi <goffi@goffi.org>
parents: 471
diff changeset
149 class GroupBlog_handler(XMPPHandler):
b9fd32b46306 plugin groupblog: added disco info + misc fixes
Goffi <goffi@goffi.org>
parents: 471
diff changeset
150 implements(iwokkel.IDisco)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
151
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
152 def getDiscoInfo(self, requestor, target, nodeIdentifier=""):
476
b9fd32b46306 plugin groupblog: added disco info + misc fixes
Goffi <goffi@goffi.org>
parents: 471
diff changeset
153 return [disco.DiscoFeature(NS_GROUPBLOG)]
b9fd32b46306 plugin groupblog: added disco info + misc fixes
Goffi <goffi@goffi.org>
parents: 471
diff changeset
154
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
155 def getDiscoItems(self, requestor, target, nodeIdentifier=""):
476
b9fd32b46306 plugin groupblog: added disco info + misc fixes
Goffi <goffi@goffi.org>
parents: 471
diff changeset
156 return []