Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0059.py @ 3528:849374e59178
component file sharing: quotas implementation:
quotas can now be specified using the `quotas_json` option of `component file_sharing`
section in settings. This must be a dict where:
- `users` key contains default quotas for all users
- `admins` key contains quotas for administrators (not implemented yet)
- `jids` contain bare JID to quota mapping, to have user-specific quota
The value can be either a int for quota in bytes, or a case insensitive string with an
optional multiplier symbol (e.g. "500 Mio"). `None` can be used for explicit unlimited
quota (which is the default is `users` is not set).
When a file size is too big for quota, upload is refused with an error message indicating
allowed quota, used space, and the size of the file that user wants to upload.
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 05 May 2021 15:37:33 +0200 |
parents | be6d91572633 |
children | ef144aaea2bb |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
3 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
4 # SAT plugin for Result Set Management (XEP-0059) |
3479 | 5 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
1766 | 6 # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org) |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
7 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
8 # This program is free software: you can redistribute it and/or modify |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
9 # it under the terms of the GNU Affero General Public License as published by |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
10 # the Free Software Foundation, either version 3 of the License, or |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
11 # (at your option) any later version. |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
12 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
13 # This program is distributed in the hope that it will be useful, |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
16 # GNU Affero General Public License for more details. |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
17 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
18 # You should have received a copy of the GNU Affero General Public License |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
19 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
20 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
21 from sat.core.i18n import _ |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
22 from sat.core.constants import Const as C |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
23 from sat.core.log import getLogger |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
24 |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
25 log = getLogger(__name__) |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
26 |
1769 | 27 from wokkel import disco |
28 from wokkel import iwokkel | |
29 from wokkel import rsm | |
30 | |
31 from twisted.words.protocols.jabber import xmlstream | |
3028 | 32 from zope.interface import implementer |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
33 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
34 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
35 PLUGIN_INFO = { |
3028 | 36 C.PI_NAME: "Result Set Management", |
37 C.PI_IMPORT_NAME: "XEP-0059", | |
38 C.PI_TYPE: "XEP", | |
39 C.PI_PROTOCOLS: ["XEP-0059"], | |
40 C.PI_MAIN: "XEP_0059", | |
41 C.PI_HANDLER: "yes", | |
42 C.PI_DESCRIPTION: _("""Implementation of Result Set Management"""), | |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
43 } |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
44 |
3028 | 45 RSM_PREFIX = "rsm_" |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
46 |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
47 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
48 class XEP_0059(object): |
1267
ea692d51a0ee
plugins XEP-0059, XEP-0060: leave internal wokkel extensions to sat.tmp.wokkel
souliane <souliane@mailoo.org>
parents:
1219
diff
changeset
|
49 # XXX: RSM management is done directly in Wokkel. |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
50 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
51 def __init__(self, host): |
3028 | 52 log.info(_("Result Set Management plugin initialization")) |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
53 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
54 def getHandler(self, client): |
1465
cbf38047ca60
plugin XEP-0059: fixed bad disco handling
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
55 return XEP_0059_handler() |
cbf38047ca60
plugin XEP-0059: fixed bad disco handling
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
56 |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
57 def parseExtra(self, extra): |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
58 """Parse extra dictionnary to retrieve RSM arguments |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
59 |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
60 @param extra(dict): data for parse |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
61 @return (rsm.RSMRequest, None): request with parsed arguments |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
62 or None if no RSM arguments have been found |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
63 """ |
3028 | 64 if int(extra.get(RSM_PREFIX + 'max', 0)) < 0: |
65 raise ValueError(_("rsm_max can't be negative")) | |
2763 | 66 |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
67 rsm_args = {} |
3028 | 68 for arg in ("max", "after", "before", "index"): |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
69 try: |
3028 | 70 argname = "max_" if arg == "max" else arg |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
71 rsm_args[argname] = extra.pop(RSM_PREFIX + arg) |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
72 except KeyError: |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
73 continue |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
74 |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
75 if rsm_args: |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
76 return rsm.RSMRequest(**rsm_args) |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
77 else: |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
78 return None |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
79 |
3308
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
80 def response2dict(self, rsm_response, data=None): |
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
81 """Return a dict with RSM response |
2717
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
82 |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
83 Key set in data can be: |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
84 - rsm_first: first item id in the page |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
85 - rsm_last: last item id in the page |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
86 - rsm_index: position of the first item in the full set (may be approximate) |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
87 - rsm_count: total number of items in the full set (may be approximage) |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
88 If a value doesn't exists, it's not set. |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
89 All values are set as strings. |
3308
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
90 @param rsm_response(rsm.RSMResponse): response to parse |
2717
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
91 @param data(dict, None): dict to update with rsm_* data. |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
92 If None, a new dict is created |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
93 @return (dict): data dict |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
94 """ |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
95 if data is None: |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
96 data = {} |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
97 if rsm_response.first is not None: |
3308
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
98 data["first"] = rsm_response.first |
2717
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
99 if rsm_response.last is not None: |
3308
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
100 data["last"] = rsm_response.last |
2717
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
101 if rsm_response.index is not None: |
3308
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
102 data["index"] = rsm_response.index |
2717
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
103 return data |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
104 |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
105 |
3028 | 106 @implementer(iwokkel.IDisco) |
1769 | 107 class XEP_0059_handler(xmlstream.XMPPHandler): |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
108 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
109 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
1769 | 110 return [disco.DiscoFeature(rsm.NS_RSM)] |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
111 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
112 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
113 return [] |