annotate sat/plugins/plugin_xep_0059.py @ 2738:eb58f26ed236

plugin XEP-0384: update to last python-omemo + trust management: - Plugin has been updated to use last version of python-omemo (10.0.3). - A temporary method remove all storage data if they are found, this method must be removed before 0.7 release (only people using dev version should have old omemo data in there storage). - Trust management is not implemented, using new encryptionTrustUIGet method (an UI is also displayed when trust handling is needed before sending a message). - omemo.DefaultOTPKPolicy is now used, instead of previous test policy of always deleting. OMEMO e2e encryption is now functional for one2one conversations, including fingerprint management.
author Goffi <goffi@goffi.org>
date Wed, 02 Jan 2019 18:50:28 +0100
parents e3f6de6ce320
children c4190d5340ab
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: 1769
diff changeset
1 #!/usr/bin/env python2
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
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)
2483
0046283a285d dates update
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
5 # Copyright (C) 2009-2018 Jérôme Poisson (goffi@goffi.org)
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1465
diff changeset
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
1fc6a380f4db plugin xep-0059: minor cleaning
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
27 from wokkel import disco
1fc6a380f4db plugin xep-0059: minor cleaning
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
28 from wokkel import iwokkel
1fc6a380f4db plugin xep-0059: minor cleaning
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
29 from wokkel import rsm
1fc6a380f4db plugin xep-0059: minor cleaning
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
30
1fc6a380f4db plugin xep-0059: minor cleaning
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
31 from twisted.words.protocols.jabber import xmlstream
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
32 from zope.interface import implements
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 = {
2700
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
36 C.PI_NAME: u"Result Set Management",
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
37 C.PI_IMPORT_NAME: u"XEP-0059",
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
38 C.PI_TYPE: u"XEP",
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
39 C.PI_PROTOCOLS: [u"XEP-0059"],
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
40 C.PI_MAIN: u"XEP_0059",
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
41 C.PI_HANDLER: u"yes",
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
42 C.PI_DESCRIPTION: _(u"""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
2700
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
45 RSM_PREFIX = u"rsm_"
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):
2700
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
52 log.info(_(u"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 """
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
64 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
65 for arg in (u"max", u"after", u"before", u"index"):
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
66 try:
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
67 argname = "max_" if arg == u"max" else arg
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
68 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
69 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
70 continue
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
71
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
72 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
73 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
74 else:
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
75 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
76
2717
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
77 def serialise(self, rsm_response, data=None):
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
78 """Serialise data for RSM
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
79
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
80 Key set in data can be:
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
81 - rsm_first: first item id in the page
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
82 - rsm_last: last item id in the page
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
83 - 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
84 - 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
85 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
86 All values are set as strings.
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
87 @param rsm_response(rsm.RSMResponse): response to serialise
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
88 @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
89 If None, a new dict is created
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
90 @return (dict): data dict
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
91 """
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
92 if data is None:
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
93 data = {}
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
94 if rsm_response.first is not None:
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
95 data[u"rsm_first"] = rsm_response.first
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
96 if rsm_response.last is not None:
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
97 data[u"rsm_last"] = rsm_response.last
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
98 if rsm_response.index is not None:
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
99 data[u"rsm_index"] = unicode(rsm_response.index)
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
100 if rsm_response.index is not None:
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
101 data[u"rsm_index"] = unicode(rsm_response.index)
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
102 return data
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
103
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
104
1769
1fc6a380f4db plugin xep-0059: minor cleaning
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
105 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
106 implements(iwokkel.IDisco)
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
107
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
108 def getDiscoInfo(self, requestor, target, nodeIdentifier=""):
1769
1fc6a380f4db plugin xep-0059: minor cleaning
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
109 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
110
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
111 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
112 return []