Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_xep_0384.py @ 4249:ba46d6a0ff3a
doc: style/typos/URL fixes
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 31 May 2024 11:08:20 +0200 |
parents | e11b13418ba6 |
children | 0d7bb4df2343 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
3 # Libervia plugin for OMEMO encryption |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
4 # Copyright (C) 2022-2022 Tim Henkes (me@syndace.dev) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 # This program is free software: you can redistribute it and/or modify |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # it under the terms of the GNU Affero General Public License as published by |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # the Free Software Foundation, either version 3 of the License, or |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 # (at your option) any later version. |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 # This program is distributed in the hope that it will be useful, |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # GNU Affero General Public License for more details. |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 # You should have received a copy of the GNU Affero General Public License |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
19 import base64 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
20 from datetime import datetime |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
21 import enum |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
22 import logging |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
23 import time |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
24 from typing import \ |
4219
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
25 Any, Dict, FrozenSet, Iterable, List, Literal, NamedTuple, Optional, Set, Type, Union, cast |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
26 import uuid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
27 import xml.etree.ElementTree as ET |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
28 from xml.sax.saxutils import quoteattr |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
29 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
30 from typing_extensions import Final, Never, assert_never |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
31 from wokkel import muc, pubsub # type: ignore[import] |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
32 import xmlschema |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
33 |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
34 from libervia.backend.core import exceptions |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
35 from libervia.backend.core.constants import Const as C |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
36 from libervia.backend.core.core_types import MessageData, SatXMPPEntity |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
37 from libervia.backend.core.i18n import _, D_ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
38 from libervia.backend.core.log import getLogger, Logger |
4073
7c5654c54fed
refactoring: rename `core.sat_main` to `core.main`
Goffi <goffi@goffi.org>
parents:
4072
diff
changeset
|
39 from libervia.backend.core.main import LiberviaBackend |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
40 from libervia.backend.core.xmpp import SatXMPPClient |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
41 from libervia.backend.memory import persistent |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
42 from libervia.backend.plugins.plugin_misc_text_commands import TextCommands |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
43 from libervia.backend.plugins.plugin_xep_0045 import XEP_0045 |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
44 from libervia.backend.plugins.plugin_xep_0060 import XEP_0060 |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
45 from libervia.backend.plugins.plugin_xep_0163 import XEP_0163 |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
46 from libervia.backend.plugins.plugin_xep_0334 import XEP_0334 |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
47 from libervia.backend.plugins.plugin_xep_0359 import XEP_0359 |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
48 from libervia.backend.plugins.plugin_xep_0420 import \ |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
49 XEP_0420, SCEAffixPolicy, SCEAffixValues, SCEProfile |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
50 from libervia.backend.tools import xml_tools |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
51 from twisted.internet import defer |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
52 from twisted.words.protocols.jabber import error, jid |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 from twisted.words.xish import domish |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
54 |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 try: |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 import omemo |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
57 import omemo.identity_key_pair |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
58 import twomemo |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
59 import twomemo.etree |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
60 import oldmemo |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
61 import oldmemo.etree |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
62 import oldmemo.migrations |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
63 from xmlschema import XMLSchemaValidationError |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
64 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
65 # An explicit version check of the OMEMO libraries should not be required here, since |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
66 # the stored data is fully versioned and the library will complain if a downgrade is |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
67 # attempted. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
68 except ImportError as import_error: |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
69 raise exceptions.MissingModule( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
70 "You are missing one or more package required by the OMEMO plugin. Please" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
71 " download/install the pip packages 'omemo', 'twomemo', 'oldmemo' and" |
3976
db45d49518f6
plugin XEP-0384: log `import_error` when import is failing
Goffi <goffi@goffi.org>
parents:
3972
diff
changeset
|
72 f" 'xmlschema'.\nexception: {import_error}" |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
73 ) from import_error |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
74 |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
76 __all__ = [ # pylint: disable=unused-variable |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
77 "PLUGIN_INFO", |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
78 "OMEMO" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
79 ] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
80 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
81 log = cast(Logger, getLogger(__name__)) # type: ignore[no-untyped-call] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
82 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
83 |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 PLUGIN_INFO = { |
3028 | 85 C.PI_NAME: "OMEMO", |
86 C.PI_IMPORT_NAME: "XEP-0384", | |
87 C.PI_TYPE: "SEC", | |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
88 C.PI_PROTOCOLS: [ "XEP-0384" ], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
89 C.PI_DEPENDENCIES: [ "XEP-0163", "XEP-0280", "XEP-0334", "XEP-0060", "XEP-0420" ], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
90 C.PI_RECOMMENDATIONS: [ "XEP-0045", "XEP-0359", C.TEXT_CMDS ], |
3028 | 91 C.PI_MAIN: "OMEMO", |
92 C.PI_HANDLER: "no", | |
93 C.PI_DESCRIPTION: _("""Implementation of OMEMO"""), | |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 } |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
95 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
96 |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
97 PARAM_CATEGORY = "Security" |
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
98 PARAM_NAME = "omemo_policy" |
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
99 |
4219
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
100 NamespaceType = Literal["urn:xmpp:omemo:2", "eu.siacs.conversations.axolotl"] |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
101 |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
102 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
103 class LogHandler(logging.Handler): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
104 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
105 Redirect python-omemo's log output to Libervia's log system. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
106 """ |
2654
e7bfbded652a
plugin XEP-0384, install: adapted plugin to omemo module changes + added omemo module to dependencies:
Goffi <goffi@goffi.org>
parents:
2648
diff
changeset
|
107 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
108 def emit(self, record: logging.LogRecord) -> None: |
2654
e7bfbded652a
plugin XEP-0384, install: adapted plugin to omemo module changes + added omemo module to dependencies:
Goffi <goffi@goffi.org>
parents:
2648
diff
changeset
|
109 log.log(record.levelname, record.getMessage()) |
e7bfbded652a
plugin XEP-0384, install: adapted plugin to omemo module changes + added omemo module to dependencies:
Goffi <goffi@goffi.org>
parents:
2648
diff
changeset
|
110 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
111 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
112 sm_logger = logging.getLogger(omemo.SessionManager.LOG_TAG) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
113 sm_logger.setLevel(logging.DEBUG) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
114 sm_logger.propagate = False |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
115 sm_logger.addHandler(LogHandler()) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
116 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
117 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
118 ikp_logger = logging.getLogger(omemo.identity_key_pair.IdentityKeyPair.LOG_TAG) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
119 ikp_logger.setLevel(logging.DEBUG) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
120 ikp_logger.propagate = False |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
121 ikp_logger.addHandler(LogHandler()) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
122 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
123 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
124 # TODO: Add handling for device labels, i.e. show device labels in the trust UI and give |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
125 # the user a way to change their own device label. |
2654
e7bfbded652a
plugin XEP-0384, install: adapted plugin to omemo module changes + added omemo module to dependencies:
Goffi <goffi@goffi.org>
parents:
2648
diff
changeset
|
126 |
e7bfbded652a
plugin XEP-0384, install: adapted plugin to omemo module changes + added omemo module to dependencies:
Goffi <goffi@goffi.org>
parents:
2648
diff
changeset
|
127 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
128 class MUCPlaintextCacheKey(NamedTuple): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
129 # pylint: disable=invalid-name |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
130 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
131 Structure identifying an encrypted message sent to a MUC. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
132 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
133 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
134 client: SatXMPPClient |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
135 room_jid: jid.JID |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
136 message_uid: str |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
137 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
138 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
139 @enum.unique |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
140 class TrustLevel(enum.Enum): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
141 """ |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
142 The trust levels required for ATM and BTBV. |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
143 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
144 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
145 TRUSTED: str = "TRUSTED" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
146 BLINDLY_TRUSTED: str = "BLINDLY_TRUSTED" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
147 UNDECIDED: str = "UNDECIDED" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
148 DISTRUSTED: str = "DISTRUSTED" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
149 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
150 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
151 TWOMEMO_DEVICE_LIST_NODE = "urn:xmpp:omemo:2:devices" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
152 OLDMEMO_DEVICE_LIST_NODE = "eu.siacs.conversations.axolotl.devicelist" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
153 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
154 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
155 class StorageImpl(omemo.Storage): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
156 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
157 Storage implementation for OMEMO based on :class:`persistent.LazyPersistentBinaryDict` |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
158 """ |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
159 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
160 def __init__(self, profile: str) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
161 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
162 @param profile: The profile this OMEMO data belongs to. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
163 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
164 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
165 # persistent.LazyPersistentBinaryDict does not cache at all, so keep the caching |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
166 # option of omemo.Storage enabled. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
167 super().__init__() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
168 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
169 self.__storage = persistent.LazyPersistentBinaryDict("XEP-0384", profile) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
170 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
171 async def _load(self, key: str) -> omemo.Maybe[omemo.JSONType]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
172 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
173 return omemo.Just(await self.__storage[key]) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
174 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
175 return omemo.Nothing() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
176 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
177 raise omemo.StorageException(f"Error while loading key {key}") from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
178 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
179 async def _store(self, key: str, value: omemo.JSONType) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
180 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
181 await self.__storage.force(key, value) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
182 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
183 raise omemo.StorageException(f"Error while storing key {key}: {value}") from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
184 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
185 async def _delete(self, key: str) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
186 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
187 await self.__storage.remove(key) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
188 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
189 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
190 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
191 raise omemo.StorageException(f"Error while deleting key {key}") from e |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
192 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
193 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
194 class LegacyStorageImpl(oldmemo.migrations.LegacyStorage): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
195 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
196 Legacy storage implementation to migrate data from the old XEP-0384 plugin. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
197 """ |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
198 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
199 KEY_DEVICE_ID = "DEVICE_ID" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
200 KEY_STATE = "STATE" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
201 KEY_SESSION = "SESSION" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
202 KEY_ACTIVE_DEVICES = "DEVICES" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
203 KEY_INACTIVE_DEVICES = "INACTIVE_DEVICES" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
204 KEY_TRUST = "TRUST" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
205 KEY_ALL_JIDS = "ALL_JIDS" |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
206 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
207 def __init__(self, profile: str, own_bare_jid: str) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
208 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
209 @param profile: The profile this OMEMO data belongs to. |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
210 @param own_bare_jid: The own bare JID, to return by the :meth:`load_own_data` call. |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
211 """ |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
212 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
213 self.__storage = persistent.LazyPersistentBinaryDict("XEP-0384", profile) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
214 self.__own_bare_jid = own_bare_jid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
215 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
216 async def loadOwnData(self) -> Optional[oldmemo.migrations.OwnData]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
217 own_device_id = await self.__storage.get(LegacyStorageImpl.KEY_DEVICE_ID, None) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
218 if own_device_id is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
219 return None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
220 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
221 return oldmemo.migrations.OwnData( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
222 own_bare_jid=self.__own_bare_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
223 own_device_id=own_device_id |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
224 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
225 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
226 async def deleteOwnData(self) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
227 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
228 await self.__storage.remove(LegacyStorageImpl.KEY_DEVICE_ID) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
229 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
230 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
231 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
232 async def loadState(self) -> Optional[oldmemo.migrations.State]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
233 return cast( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
234 Optional[oldmemo.migrations.State], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
235 await self.__storage.get(LegacyStorageImpl.KEY_STATE, None) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
236 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
237 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
238 async def deleteState(self) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
239 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
240 await self.__storage.remove(LegacyStorageImpl.KEY_STATE) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
241 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
242 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
243 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
244 async def loadSession( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
245 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
246 bare_jid: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
247 device_id: int |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
248 ) -> Optional[oldmemo.migrations.Session]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
249 key = "\n".join([ LegacyStorageImpl.KEY_SESSION, bare_jid, str(device_id) ]) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
250 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
251 return cast( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
252 Optional[oldmemo.migrations.Session], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
253 await self.__storage.get(key, None) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
254 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
255 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
256 async def deleteSession(self, bare_jid: str, device_id: int) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
257 key = "\n".join([ LegacyStorageImpl.KEY_SESSION, bare_jid, str(device_id) ]) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
258 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
259 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
260 await self.__storage.remove(key) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
261 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
262 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
263 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
264 async def loadActiveDevices(self, bare_jid: str) -> Optional[List[int]]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
265 key = "\n".join([ LegacyStorageImpl.KEY_ACTIVE_DEVICES, bare_jid ]) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
266 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
267 return cast( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
268 Optional[List[int]], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
269 await self.__storage.get(key, None) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
270 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
271 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
272 async def loadInactiveDevices(self, bare_jid: str) -> Optional[Dict[int, int]]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
273 key = "\n".join([ LegacyStorageImpl.KEY_INACTIVE_DEVICES, bare_jid ]) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
274 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
275 return cast( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
276 Optional[Dict[int, int]], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
277 await self.__storage.get(key, None) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
278 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
279 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
280 async def deleteActiveDevices(self, bare_jid: str) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
281 key = "\n".join([ LegacyStorageImpl.KEY_ACTIVE_DEVICES, bare_jid ]) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
282 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
283 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
284 await self.__storage.remove(key) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
285 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
286 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
287 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
288 async def deleteInactiveDevices(self, bare_jid: str) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
289 key = "\n".join([ LegacyStorageImpl.KEY_INACTIVE_DEVICES, bare_jid ]) |
3672
e4054b648111
plugin XEP-0384: fix calls outside of main thread:
Goffi <goffi@goffi.org>
parents:
3584
diff
changeset
|
290 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
291 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
292 await self.__storage.remove(key) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
293 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
294 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
295 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
296 async def loadTrust( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
297 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
298 bare_jid: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
299 device_id: int |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
300 ) -> Optional[oldmemo.migrations.Trust]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
301 key = "\n".join([ LegacyStorageImpl.KEY_TRUST, bare_jid, str(device_id) ]) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
302 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
303 return cast( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
304 Optional[oldmemo.migrations.Trust], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
305 await self.__storage.get(key, None) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
306 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
307 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
308 async def deleteTrust(self, bare_jid: str, device_id: int) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
309 key = "\n".join([ LegacyStorageImpl.KEY_TRUST, bare_jid, str(device_id) ]) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
310 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
311 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
312 await self.__storage.remove(key) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
313 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
314 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
315 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
316 async def listJIDs(self) -> Optional[List[str]]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
317 bare_jids = await self.__storage.get(LegacyStorageImpl.KEY_ALL_JIDS, None) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
318 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
319 return None if bare_jids is None else list(bare_jids) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
320 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
321 async def deleteJIDList(self) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
322 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
323 await self.__storage.remove(LegacyStorageImpl.KEY_ALL_JIDS) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
324 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
325 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
326 |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
327 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
328 async def download_oldmemo_bundle( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
329 client: SatXMPPClient, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
330 xep_0060: XEP_0060, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
331 bare_jid: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
332 device_id: int |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
333 ) -> oldmemo.oldmemo.BundleImpl: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
334 """Download the oldmemo bundle corresponding to a specific device. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
335 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
336 @param client: The client. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
337 @param xep_0060: The XEP-0060 plugin instance to use for pubsub interactions. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
338 @param bare_jid: The bare JID the device belongs to. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
339 @param device_id: The id of the device. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
340 @return: The bundle. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
341 @raise BundleDownloadFailed: if the download failed. Feel free to raise a subclass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
342 instead. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
343 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
344 # Bundle downloads are needed by the session manager and for migrations from legacy, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
345 # thus it is made a separate function. |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
346 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
347 namespace = oldmemo.oldmemo.NAMESPACE |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
348 node = f"eu.siacs.conversations.axolotl.bundles:{device_id}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
349 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
350 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
351 items, __ = await xep_0060.get_items(client, jid.JID(bare_jid), node, max_items=1) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
352 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
353 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
354 f"Bundle download failed for {bare_jid}: {device_id} under namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
355 f" {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
356 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
357 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
358 if len(items) != 1: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
359 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
360 f"Bundle download failed for {bare_jid}: {device_id} under namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
361 f" {namespace}: Unexpected number of items retrieved: {len(items)}." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
362 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
363 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
364 element = \ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
365 next(iter(xml_tools.domish_elt_2_et_elt(cast(domish.Element, items[0]))), None) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
366 if element is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
367 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
368 f"Bundle download failed for {bare_jid}: {device_id} under namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
369 f" {namespace}: Item download succeeded but parsing failed: {element}." |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
370 ) |
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
371 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
372 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
373 return oldmemo.etree.parse_bundle(element, bare_jid, device_id) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
374 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
375 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
376 f"Bundle parsing failed for {bare_jid}: {device_id} under namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
377 f" {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
378 ) from e |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
379 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
380 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
381 # ATM only supports protocols based on SCE, which is currently only omemo:2, and relies on |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
382 # so many implementation details of the encryption protocol that it makes more sense to |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
383 # add ATM to the OMEMO plugin directly instead of having it a separate Libervia plugin. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
384 NS_TM: Final = "urn:xmpp:tm:1" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
385 NS_ATM: Final = "urn:xmpp:atm:1" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
386 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
387 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
388 TRUST_MESSAGE_SCHEMA = xmlschema.XMLSchema("""<?xml version='1.0' encoding='UTF-8'?> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
389 <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
390 targetNamespace='urn:xmpp:tm:1' |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
391 xmlns='urn:xmpp:tm:1' |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
392 elementFormDefault='qualified'> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
393 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
394 <xs:element name='trust-message'> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
395 <xs:complexType> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
396 <xs:sequence> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
397 <xs:element ref='key-owner' minOccurs='1' maxOccurs='unbounded'/> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
398 </xs:sequence> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
399 <xs:attribute name='usage' type='xs:string' use='required'/> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
400 <xs:attribute name='encryption' type='xs:string' use='required'/> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
401 </xs:complexType> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
402 </xs:element> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
403 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
404 <xs:element name='key-owner'> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
405 <xs:complexType> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
406 <xs:sequence> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
407 <xs:element |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
408 name='trust' type='xs:base64Binary' minOccurs='0' maxOccurs='unbounded'/> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
409 <xs:element |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
410 name='distrust' type='xs:base64Binary' minOccurs='0' maxOccurs='unbounded'/> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
411 </xs:sequence> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
412 <xs:attribute name='jid' type='xs:string' use='required'/> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
413 </xs:complexType> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
414 </xs:element> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
415 </xs:schema> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
416 """) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
417 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
418 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
419 # This is compatible with omemo:2's SCE profile |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
420 TM_SCE_PROFILE = SCEProfile( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
421 rpad_policy=SCEAffixPolicy.REQUIRED, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
422 time_policy=SCEAffixPolicy.REQUIRED, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
423 to_policy=SCEAffixPolicy.OPTIONAL, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
424 from_policy=SCEAffixPolicy.OPTIONAL, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
425 custom_policies={} |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
426 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
427 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
428 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
429 class TrustUpdate(NamedTuple): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
430 # pylint: disable=invalid-name |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
431 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
432 An update to the trust status of an identity key, used by Automatic Trust Management. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
433 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
434 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
435 target_jid: jid.JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
436 target_key: bytes |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
437 target_trust: bool |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
438 |
4216 | 439 def to_dict(self) -> dict[str, Any]: |
440 """Convert the instance to a serialised dictionary""" | |
441 data = { | |
442 "target_jid": self.target_jid.full(), | |
443 "target_key": self.target_key.hex(), | |
444 "target_trust": self.target_trust, | |
445 } | |
446 return data | |
447 | |
448 @staticmethod | |
449 def from_dict(data: dict[str, Any]) -> "TrustUpdate": | |
450 """Load a serialized dictionary""" | |
451 data["target_jid"] = jid.JID(data["target_jid"]) | |
452 data["target_key"] = bytes.fromhex(data["target_key"]) | |
453 return TrustUpdate(**data) | |
454 | |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
455 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
456 class TrustMessageCacheEntry(NamedTuple): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
457 # pylint: disable=invalid-name |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
458 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
459 An entry in the trust message cache used by ATM. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
460 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
461 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
462 sender_jid: jid.JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
463 sender_key: bytes |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
464 timestamp: datetime |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
465 trust_update: TrustUpdate |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
466 |
4216 | 467 def to_dict(self) -> dict[str, Any]: |
468 """Convert the instance to a serialised dictionary""" | |
469 data = { | |
470 "sender_jid": self.sender_jid.full(), | |
471 "sender_key": self.sender_key.hex(), | |
472 "timestamp": self.timestamp.isoformat(), | |
473 "trust_update": self.trust_update.to_dict() | |
474 } | |
475 return data | |
476 | |
477 @staticmethod | |
478 def from_dict(data: dict[str, Any]) -> "TrustMessageCacheEntry": | |
479 """Load a serialized dictionary""" | |
480 data["sender_jid"] = jid.JID(data["sender_jid"]) | |
481 data["sender_key"] = bytes.fromhex(data["sender_key"]) | |
482 data["timestamp"] = datetime.fromisoformat(data["timestamp"]) | |
483 data["trust_update"] = TrustUpdate.from_dict(data["trust_update"]) | |
484 return TrustMessageCacheEntry(**data) | |
485 | |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
486 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
487 class PartialTrustMessage(NamedTuple): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
488 # pylint: disable=invalid-name |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
489 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
490 A structure representing a partial trust message, used by :func:`send_trust_messages` |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
491 to build trust messages. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
492 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
493 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
494 recipient_jid: jid.JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
495 updated_jid: jid.JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
496 trust_updates: FrozenSet[TrustUpdate] |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
497 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
498 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
499 async def manage_trust_message_cache( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
500 client: SatXMPPClient, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
501 session_manager: omemo.SessionManager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
502 applied_trust_updates: FrozenSet[TrustUpdate] |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
503 ) -> None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
504 """Manage the ATM trust message cache after trust updates have been applied. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
505 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
506 @param client: The client this operation runs under. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
507 @param session_manager: The session manager to use. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
508 @param applied_trust_updates: The trust updates that have already been applied, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
509 triggering this cache management run. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
510 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
511 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
512 trust_message_cache = persistent.LazyPersistentBinaryDict( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
513 "XEP-0384/TM", |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
514 client.profile |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
515 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
516 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
517 # Load cache entries |
4216 | 518 cache_entries = { |
519 TrustMessageCacheEntry.from_dict(d) | |
520 for d in await trust_message_cache.get("cache", []) | |
521 } | |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
522 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
523 # Expire cache entries that were overwritten by the applied trust updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
524 cache_entries_by_target = { |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
525 ( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
526 cache_entry.trust_update.target_jid.userhostJID(), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
527 cache_entry.trust_update.target_key |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
528 ): cache_entry |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
529 for cache_entry |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
530 in cache_entries |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
531 } |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
532 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
533 for trust_update in applied_trust_updates: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
534 cache_entry = cache_entries_by_target.get( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
535 (trust_update.target_jid.userhostJID(), trust_update.target_key), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
536 None |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
537 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
538 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
539 if cache_entry is not None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
540 cache_entries.remove(cache_entry) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
541 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
542 # Apply cached Trust Messages by newly trusted devices |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
543 new_trust_updates: Set[TrustUpdate] = set() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
544 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
545 for trust_update in applied_trust_updates: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
546 if trust_update.target_trust: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
547 # Iterate over a copy such that cache_entries can be modified |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
548 for cache_entry in set(cache_entries): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
549 if ( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
550 cache_entry.sender_jid.userhostJID() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
551 == trust_update.target_jid.userhostJID() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
552 and cache_entry.sender_key == trust_update.target_key |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
553 ): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
554 trust_level = ( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
555 TrustLevel.TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
556 if cache_entry.trust_update.target_trust |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
557 else TrustLevel.DISTRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
558 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
559 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
560 # Apply the trust update |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
561 await session_manager.set_trust( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
562 cache_entry.trust_update.target_jid.userhost(), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
563 cache_entry.trust_update.target_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
564 trust_level.name |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
565 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
566 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
567 # Track the fact that this trust update has been applied |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
568 new_trust_updates.add(cache_entry.trust_update) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
569 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
570 # Remove the corresponding cache entry |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
571 cache_entries.remove(cache_entry) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
572 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
573 # Store the updated cache entries |
4216 | 574 await trust_message_cache.force( |
575 "cache", | |
576 [tm.to_dict() for tm in cache_entries] | |
577 ) | |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
578 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
579 # TODO: Notify the user ("feedback") about automatically updated trust? |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
580 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
581 if len(new_trust_updates) > 0: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
582 # If any trust has been updated, recursively perform another run of cache |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
583 # management |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
584 await manage_trust_message_cache( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
585 client, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
586 session_manager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
587 frozenset(new_trust_updates) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
588 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
589 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
590 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
591 async def get_trust_as_trust_updates( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
592 session_manager: omemo.SessionManager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
593 target_jid: jid.JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
594 ) -> FrozenSet[TrustUpdate]: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
595 """Get the trust status of all known keys of a JID as trust updates for use with ATM. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
596 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
597 @param session_manager: The session manager to load the trust from. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
598 @param target_jid: The JID to load the trust for. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
599 @return: The trust updates encoding the trust status of all known keys of the JID that |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
600 are either explicitly trusted or distrusted. Undecided keys are not included in |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
601 the trust updates. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
602 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
603 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
604 devices = await session_manager.get_device_information(target_jid.userhost()) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
605 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
606 trust_updates: Set[TrustUpdate] = set() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
607 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
608 for device in devices: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
609 trust_level = TrustLevel(device.trust_level_name) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
610 target_trust: bool |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
611 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
612 if trust_level is TrustLevel.TRUSTED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
613 target_trust = True |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
614 elif trust_level is TrustLevel.DISTRUSTED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
615 target_trust = False |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
616 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
617 # Skip devices that are not explicitly trusted or distrusted |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
618 continue |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
619 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
620 trust_updates.add(TrustUpdate( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
621 target_jid=target_jid.userhostJID(), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
622 target_key=device.identity_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
623 target_trust=target_trust |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
624 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
625 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
626 return frozenset(trust_updates) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
627 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
628 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
629 async def send_trust_messages( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
630 client: SatXMPPClient, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
631 session_manager: omemo.SessionManager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
632 applied_trust_updates: FrozenSet[TrustUpdate] |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
633 ) -> None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
634 """Send information about updated trust to peers via ATM (XEP-0450). |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
635 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
636 @param client: The client. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
637 @param session_manager: The session manager. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
638 @param applied_trust_updates: The trust updates that have already been applied, to |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
639 notify other peers about. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
640 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
641 # NOTE: This currently sends information about oldmemo trust too. This is not |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
642 # specified and experimental, but since twomemo and oldmemo share the same identity |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
643 # keys and trust systems, this could be a cool side effect. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
644 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
645 # Send Trust Messages for newly trusted and distrusted devices |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
646 own_jid = client.jid.userhostJID() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
647 own_trust_updates = await get_trust_as_trust_updates(session_manager, own_jid) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
648 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
649 # JIDs of which at least one device's trust has been updated |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
650 updated_jids = frozenset({ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
651 trust_update.target_jid.userhostJID() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
652 for trust_update |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
653 in applied_trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
654 }) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
655 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
656 trust_messages: Set[PartialTrustMessage] = set() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
657 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
658 for updated_jid in updated_jids: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
659 # Get the trust updates for that JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
660 trust_updates = frozenset({ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
661 trust_update for trust_update in applied_trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
662 if trust_update.target_jid.userhostJID() == updated_jid |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
663 }) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
664 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
665 if updated_jid == own_jid: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
666 # If the own JID is updated, _all_ peers have to be notified |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
667 # TODO: Using my author's privilege here to shamelessly access private fields |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
668 # and storage keys until I've added public API to get a list of peers to |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
669 # python-omemo. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
670 storage: omemo.Storage = getattr(session_manager, "_SessionManager__storage") |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
671 peer_jids = frozenset({ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
672 jid.JID(bare_jid).userhostJID() for bare_jid in (await storage.load_list( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
673 f"/{OMEMO.NS_TWOMEMO}/bare_jids", |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
674 str |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
675 )).maybe([]) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
676 }) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
677 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
678 if len(peer_jids) == 0: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
679 # If there are no peers to notify, notify our other devices about the |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
680 # changes directly |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
681 trust_messages.add(PartialTrustMessage( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
682 recipient_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
683 updated_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
684 trust_updates=trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
685 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
686 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
687 # Otherwise, notify all peers about the changes in trust and let carbons |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
688 # handle the copy to our own JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
689 for peer_jid in peer_jids: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
690 trust_messages.add(PartialTrustMessage( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
691 recipient_jid=peer_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
692 updated_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
693 trust_updates=trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
694 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
695 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
696 # Also send full trust information about _every_ peer to our newly |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
697 # trusted devices |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
698 peer_trust_updates = \ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
699 await get_trust_as_trust_updates(session_manager, peer_jid) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
700 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
701 trust_messages.add(PartialTrustMessage( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
702 recipient_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
703 updated_jid=peer_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
704 trust_updates=peer_trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
705 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
706 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
707 # Send information about our own devices to our newly trusted devices |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
708 trust_messages.add(PartialTrustMessage( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
709 recipient_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
710 updated_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
711 trust_updates=own_trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
712 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
713 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
714 # Notify our other devices about the changes in trust |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
715 trust_messages.add(PartialTrustMessage( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
716 recipient_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
717 updated_jid=updated_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
718 trust_updates=trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
719 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
720 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
721 # Send a summary of our own trust to newly trusted devices |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
722 trust_messages.add(PartialTrustMessage( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
723 recipient_jid=updated_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
724 updated_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
725 trust_updates=own_trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
726 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
727 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
728 # All trust messages prepared. Merge all trust messages directed at the same |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
729 # recipient. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
730 recipient_jids = { trust_message.recipient_jid for trust_message in trust_messages } |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
731 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
732 for recipient_jid in recipient_jids: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
733 updated: Dict[jid.JID, Set[TrustUpdate]] = {} |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
734 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
735 for trust_message in trust_messages: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
736 # Merge trust messages directed at that recipient |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
737 if trust_message.recipient_jid == recipient_jid: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
738 # Merge the trust updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
739 updated[trust_message.updated_jid] = \ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
740 updated.get(trust_message.updated_jid, set()) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
741 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
742 updated[trust_message.updated_jid] |= trust_message.trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
743 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
744 # Build the trust message |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
745 trust_message_elt = domish.Element((NS_TM, "trust-message")) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
746 trust_message_elt["usage"] = NS_ATM |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
747 trust_message_elt["encryption"] = twomemo.twomemo.NAMESPACE |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
748 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
749 for updated_jid, trust_updates in updated.items(): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
750 key_owner_elt = trust_message_elt.addElement((NS_TM, "key-owner")) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
751 key_owner_elt["jid"] = updated_jid.userhost() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
752 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
753 for trust_update in trust_updates: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
754 serialized_identity_key = \ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
755 base64.b64encode(trust_update.target_key).decode("ASCII") |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
756 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
757 if trust_update.target_trust: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
758 key_owner_elt.addElement( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
759 (NS_TM, "trust"), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
760 content=serialized_identity_key |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
761 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
762 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
763 key_owner_elt.addElement( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
764 (NS_TM, "distrust"), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
765 content=serialized_identity_key |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
766 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
767 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
768 # Finally, encrypt and send the trust message! |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
769 message_data = client.generate_message_xml(MessageData({ |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
770 "from": own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
771 "to": recipient_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
772 "uid": str(uuid.uuid4()), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
773 "message": {}, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
774 "subject": {}, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
775 "type": C.MESS_TYPE_CHAT, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
776 "extra": {}, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
777 "timestamp": time.time() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
778 })) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
779 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
780 message_data["xml"].addChild(trust_message_elt) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
781 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
782 plaintext = XEP_0420.pack_stanza(TM_SCE_PROFILE, message_data["xml"]) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
783 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
784 feedback_jid = recipient_jid |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
785 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
786 # TODO: The following is mostly duplicate code |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
787 try: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
788 messages, encryption_errors = await session_manager.encrypt( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
789 frozenset({ own_jid.userhost(), recipient_jid.userhost() }), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
790 { OMEMO.NS_TWOMEMO: plaintext }, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
791 backend_priority_order=[ OMEMO.NS_TWOMEMO ], |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
792 identifier=feedback_jid.userhost() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
793 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
794 except Exception as e: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
795 msg = _( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
796 # pylint: disable=consider-using-f-string |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
797 "Can't encrypt message for {entities}: {reason}".format( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
798 entities=', '.join({ own_jid.userhost(), recipient_jid.userhost() }), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
799 reason=e |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
800 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
801 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
802 log.warning(msg) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
803 client.feedback(feedback_jid, msg, { |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
804 C.MESS_EXTRA_INFO: C.EXTRA_INFO_ENCR_ERR |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
805 }) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
806 raise e |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
807 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
808 if len(encryption_errors) > 0: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
809 log.warning( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
810 f"Ignored the following non-critical encryption errors:" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
811 f" {encryption_errors}" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
812 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
813 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
814 encrypted_errors_stringified = ", ".join([ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
815 f"device {err.device_id} of {err.bare_jid} under namespace" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
816 f" {err.namespace}" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
817 for err |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
818 in encryption_errors |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
819 ]) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
820 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
821 client.feedback( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
822 feedback_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
823 D_( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
824 "There were non-critical errors during encryption resulting in some" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
825 " of your destinees' devices potentially not receiving the message." |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
826 " This happens when the encryption data/key material of a device is" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
827 " incomplete or broken, which shouldn't happen for actively used" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
828 " devices, and can usually be ignored. The following devices are" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
829 f" affected: {encrypted_errors_stringified}." |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
830 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
831 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
832 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
833 message = next( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
834 message for message in messages |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
835 if message.namespace == OMEMO.NS_TWOMEMO |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
836 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
837 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
838 # Add the encrypted element |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
839 message_data["xml"].addChild(xml_tools.et_elt_2_domish_elt( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
840 twomemo.etree.serialize_message(message) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
841 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
842 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
843 await client.a_send(message_data["xml"]) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
844 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
845 |
4072
040095a5dc7f
refactoring: rename `SAT` class to `LiberviaBackend`
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
846 def make_session_manager(sat: LiberviaBackend, profile: str) -> Type[omemo.SessionManager]: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
847 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
848 @param sat: The SAT instance. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
849 @param profile: The profile. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
850 @return: A non-abstract subclass of :class:`~omemo.session_manager.SessionManager` |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
851 with XMPP interactions and trust handled via the SAT instance. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
852 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
853 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
854 client = sat.get_client(profile) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
855 xep_0060 = cast(XEP_0060, sat.plugins["XEP-0060"]) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
856 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
857 class SessionManagerImpl(omemo.SessionManager): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
858 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
859 Session manager implementation handling XMPP interactions and trust via an |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
860 instance of :class:`~sat.core.sat_main.SAT`. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
861 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
862 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
863 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
864 async def _upload_bundle(bundle: omemo.Bundle) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
865 if isinstance(bundle, twomemo.twomemo.BundleImpl): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
866 element = twomemo.etree.serialize_bundle(bundle) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
867 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
868 node = "urn:xmpp:omemo:2:bundles" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
869 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
870 await xep_0060.send_item( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
871 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
872 client.jid.userhostJID(), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
873 node, |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
874 xml_tools.et_elt_2_domish_elt(element), |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
875 item_id=str(bundle.device_id), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
876 extra={ |
3933
cecf45416403
plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents:
3929
diff
changeset
|
877 XEP_0060.EXTRA_PUBLISH_OPTIONS: { |
4218
c0f3f29377f1
plugin XEP-0384: be sure to have `open` access model for created nodes.
Goffi <goffi@goffi.org>
parents:
4216
diff
changeset
|
878 XEP_0060.OPT_ACCESS_MODEL: "open", |
3933
cecf45416403
plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents:
3929
diff
changeset
|
879 XEP_0060.OPT_MAX_ITEMS: "max" |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
880 }, |
3933
cecf45416403
plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents:
3929
diff
changeset
|
881 XEP_0060.EXTRA_ON_PRECOND_NOT_MET: "raise" |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
882 } |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
883 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
884 except (error.StanzaError, Exception) as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
885 if ( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
886 isinstance(e, error.StanzaError) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
887 and e.condition == "conflict" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
888 and e.appCondition is not None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
889 # pylint: disable=no-member |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
890 and e.appCondition.name == "precondition-not-met" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
891 ): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
892 # publish options couldn't be set on the fly, manually reconfigure |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
893 # the node and publish again |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
894 raise omemo.BundleUploadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
895 f"precondition-not-met: {bundle}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
896 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
897 # TODO: What can I do here? The correct node configuration is a |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
898 # MUST in the XEP. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
899 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
900 raise omemo.BundleUploadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
901 f"Bundle upload failed: {bundle}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
902 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
903 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
904 return |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
905 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
906 if isinstance(bundle, oldmemo.oldmemo.BundleImpl): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
907 element = oldmemo.etree.serialize_bundle(bundle) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
908 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
909 node = f"eu.siacs.conversations.axolotl.bundles:{bundle.device_id}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
910 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
911 await xep_0060.send_item( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
912 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
913 client.jid.userhostJID(), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
914 node, |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
915 xml_tools.et_elt_2_domish_elt(element), |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
916 item_id=xep_0060.ID_SINGLETON, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
917 extra={ |
4218
c0f3f29377f1
plugin XEP-0384: be sure to have `open` access model for created nodes.
Goffi <goffi@goffi.org>
parents:
4216
diff
changeset
|
918 XEP_0060.EXTRA_PUBLISH_OPTIONS: { |
c0f3f29377f1
plugin XEP-0384: be sure to have `open` access model for created nodes.
Goffi <goffi@goffi.org>
parents:
4216
diff
changeset
|
919 XEP_0060.OPT_ACCESS_MODEL: "open", |
c0f3f29377f1
plugin XEP-0384: be sure to have `open` access model for created nodes.
Goffi <goffi@goffi.org>
parents:
4216
diff
changeset
|
920 XEP_0060.OPT_MAX_ITEMS: 1 |
c0f3f29377f1
plugin XEP-0384: be sure to have `open` access model for created nodes.
Goffi <goffi@goffi.org>
parents:
4216
diff
changeset
|
921 }, |
3933
cecf45416403
plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents:
3929
diff
changeset
|
922 XEP_0060.EXTRA_ON_PRECOND_NOT_MET: "publish_without_options" |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
923 } |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
924 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
925 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
926 raise omemo.BundleUploadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
927 f"Bundle upload failed: {bundle}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
928 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
929 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
930 return |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
931 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
932 raise omemo.UnknownNamespace(f"Unknown namespace: {bundle.namespace}") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
933 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
934 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
935 async def _download_bundle( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
936 namespace: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
937 bare_jid: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
938 device_id: int |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
939 ) -> omemo.Bundle: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
940 if namespace == twomemo.twomemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
941 node = "urn:xmpp:omemo:2:bundles" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
942 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
943 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
944 items, __ = await xep_0060.get_items( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
945 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
946 jid.JID(bare_jid), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
947 node, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
948 item_ids=[ str(device_id) ] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
949 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
950 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
951 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
952 f"Bundle download failed for {bare_jid}: {device_id} under" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
953 f" namespace {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
954 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
955 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
956 if len(items) != 1: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
957 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
958 f"Bundle download failed for {bare_jid}: {device_id} under" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
959 f" namespace {namespace}: Unexpected number of items retrieved:" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
960 f" {len(items)}." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
961 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
962 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
963 element = next( |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
964 iter(xml_tools.domish_elt_2_et_elt(cast(domish.Element, items[0]))), |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
965 None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
966 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
967 if element is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
968 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
969 f"Bundle download failed for {bare_jid}: {device_id} under" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
970 f" namespace {namespace}: Item download succeeded but parsing" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
971 f" failed: {element}." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
972 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
973 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
974 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
975 return twomemo.etree.parse_bundle(element, bare_jid, device_id) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
976 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
977 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
978 f"Bundle parsing failed for {bare_jid}: {device_id} under" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
979 f" namespace {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
980 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
981 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
982 if namespace == oldmemo.oldmemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
983 return await download_oldmemo_bundle( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
984 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
985 xep_0060, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
986 bare_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
987 device_id |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
988 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
989 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
990 raise omemo.UnknownNamespace(f"Unknown namespace: {namespace}") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
991 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
992 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
993 async def _delete_bundle(namespace: str, device_id: int) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
994 if namespace == twomemo.twomemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
995 node = "urn:xmpp:omemo:2:bundles" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
996 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
997 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
998 await xep_0060.retract_items( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
999 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1000 client.jid.userhostJID(), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1001 node, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1002 [ str(device_id) ], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1003 notify=False |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1004 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1005 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1006 raise omemo.BundleDeletionFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1007 f"Bundle deletion failed for {device_id} under namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1008 f" {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1009 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1010 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1011 return |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1012 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1013 if namespace == oldmemo.oldmemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1014 node = f"eu.siacs.conversations.axolotl.bundles:{device_id}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1015 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1016 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1017 await xep_0060.deleteNode(client, client.jid.userhostJID(), node) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1018 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1019 raise omemo.BundleDeletionFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1020 f"Bundle deletion failed for {device_id} under namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1021 f" {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1022 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1023 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1024 return |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1025 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1026 raise omemo.UnknownNamespace(f"Unknown namespace: {namespace}") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1027 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1028 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1029 async def _upload_device_list( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1030 namespace: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1031 device_list: Dict[int, Optional[str]] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1032 ) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1033 element: Optional[ET.Element] = None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1034 node: Optional[str] = None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1035 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1036 if namespace == twomemo.twomemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1037 element = twomemo.etree.serialize_device_list(device_list) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1038 node = TWOMEMO_DEVICE_LIST_NODE |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1039 if namespace == oldmemo.oldmemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1040 element = oldmemo.etree.serialize_device_list(device_list) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1041 node = OLDMEMO_DEVICE_LIST_NODE |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1042 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1043 if element is None or node is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1044 raise omemo.UnknownNamespace(f"Unknown namespace: {namespace}") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1045 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1046 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1047 await xep_0060.send_item( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1048 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1049 client.jid.userhostJID(), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1050 node, |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
1051 xml_tools.et_elt_2_domish_elt(element), |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1052 item_id=xep_0060.ID_SINGLETON, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1053 extra={ |
3933
cecf45416403
plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents:
3929
diff
changeset
|
1054 XEP_0060.EXTRA_PUBLISH_OPTIONS: { |
cecf45416403
plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents:
3929
diff
changeset
|
1055 XEP_0060.OPT_MAX_ITEMS: 1, |
cecf45416403
plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents:
3929
diff
changeset
|
1056 XEP_0060.OPT_ACCESS_MODEL: "open" |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1057 }, |
3933
cecf45416403
plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents:
3929
diff
changeset
|
1058 XEP_0060.EXTRA_ON_PRECOND_NOT_MET: "raise" |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1059 } |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1060 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1061 except (error.StanzaError, Exception) as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1062 if ( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1063 isinstance(e, error.StanzaError) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1064 and e.condition == "conflict" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1065 and e.appCondition is not None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1066 # pylint: disable=no-member |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1067 and e.appCondition.name == "precondition-not-met" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1068 ): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1069 # publish options couldn't be set on the fly, manually reconfigure the |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1070 # node and publish again |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1071 raise omemo.DeviceListUploadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1072 f"precondition-not-met for namespace {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1073 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1074 # TODO: What can I do here? The correct node configuration is a MUST |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1075 # in the XEP. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1076 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1077 raise omemo.DeviceListUploadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1078 f"Device list upload failed for namespace {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1079 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1080 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1081 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1082 async def _download_device_list( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1083 namespace: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1084 bare_jid: str |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1085 ) -> Dict[int, Optional[str]]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1086 node: Optional[str] = None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1087 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1088 if namespace == twomemo.twomemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1089 node = TWOMEMO_DEVICE_LIST_NODE |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1090 if namespace == oldmemo.oldmemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1091 node = OLDMEMO_DEVICE_LIST_NODE |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1092 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1093 if node is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1094 raise omemo.UnknownNamespace(f"Unknown namespace: {namespace}") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1095 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1096 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1097 items, __ = await xep_0060.get_items(client, jid.JID(bare_jid), node) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1098 except exceptions.NotFound: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1099 return {} |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1100 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1101 raise omemo.DeviceListDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1102 f"Device list download failed for {bare_jid} under namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1103 f" {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1104 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1105 |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
1106 if len(items) == 0: |
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
1107 return {} |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1108 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1109 if len(items) != 1: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1110 raise omemo.DeviceListDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1111 f"Device list download failed for {bare_jid} under namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1112 f" {namespace}: Unexpected number of items retrieved: {len(items)}." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1113 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1114 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1115 element = next( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1116 iter(xml_tools.domish_elt_2_et_elt(cast(domish.Element, items[0]))), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1117 None |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1118 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1119 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1120 if element is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1121 raise omemo.DeviceListDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1122 f"Device list download failed for {bare_jid} under namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1123 f" {namespace}: Item download succeeded but parsing failed:" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1124 f" {element}." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1125 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1126 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1127 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1128 if namespace == twomemo.twomemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1129 return twomemo.etree.parse_device_list(element) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1130 if namespace == oldmemo.oldmemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1131 return oldmemo.etree.parse_device_list(element) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1132 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1133 raise omemo.DeviceListDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1134 f"Device list download failed for {bare_jid} under namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1135 f" {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1136 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1137 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1138 raise omemo.UnknownNamespace(f"Unknown namespace: {namespace}") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1139 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1140 async def _evaluate_custom_trust_level( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1141 self, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1142 device: omemo.DeviceInformation |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1143 ) -> omemo.TrustLevel: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1144 # Get the custom trust level |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1145 try: |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1146 trust_level = TrustLevel(device.trust_level_name) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1147 except ValueError as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1148 raise omemo.UnknownTrustLevel( |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1149 f"Unknown trust level name {device.trust_level_name}" |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1150 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1151 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1152 # The first three cases are a straight-forward mapping |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1153 if trust_level is TrustLevel.TRUSTED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1154 return omemo.TrustLevel.TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1155 if trust_level is TrustLevel.UNDECIDED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1156 return omemo.TrustLevel.UNDECIDED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1157 if trust_level is TrustLevel.DISTRUSTED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1158 return omemo.TrustLevel.DISTRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1159 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1160 # The blindly trusted case is more complicated, since its evaluation depends |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1161 # on the trust system and phase |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1162 if trust_level is TrustLevel.BLINDLY_TRUSTED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1163 # Get the name of the active trust system |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1164 trust_system = cast(str, sat.memory.param_get_a( |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1165 PARAM_NAME, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1166 PARAM_CATEGORY, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1167 profile_key=profile |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1168 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1169 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1170 # If the trust model is BTBV, blind trust is always enabled |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1171 if trust_system == "btbv": |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1172 return omemo.TrustLevel.TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1173 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1174 # If the trust model is ATM, blind trust is disabled in the second phase |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1175 # and counts as undecided |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1176 if trust_system == "atm": |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1177 # Find out whether we are in phase one or two |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1178 devices = await self.get_device_information(device.bare_jid) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1179 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1180 phase_one = all(TrustLevel(device.trust_level_name) in { |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1181 TrustLevel.UNDECIDED, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1182 TrustLevel.BLINDLY_TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1183 } for device in devices) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1184 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1185 if phase_one: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1186 return omemo.TrustLevel.TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1187 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1188 return omemo.TrustLevel.UNDECIDED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1189 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1190 raise exceptions.InternalError( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1191 f"Unknown trust system active: {trust_system}" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1192 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1193 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1194 assert_never(trust_level) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1195 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1196 async def _make_trust_decision( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1197 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1198 undecided: FrozenSet[omemo.DeviceInformation], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1199 identifier: Optional[str] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1200 ) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1201 if identifier is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1202 raise omemo.TrustDecisionFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1203 "The identifier must contain the feedback JID." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1204 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1205 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1206 # The feedback JID is transferred via the identifier |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1207 feedback_jid = jid.JID(identifier).userhostJID() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1208 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1209 # Both the ATM and the BTBV trust models work with blind trust before the |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1210 # first manual verification is performed. Thus, we can separate bare JIDs into |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1211 # two pools here, one pool of bare JIDs for which blind trust is active, and |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1212 # one pool of bare JIDs for which manual trust is used instead. |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1213 bare_jids = { device.bare_jid for device in undecided } |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1214 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1215 blind_trust_bare_jids: Set[str] = set() |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1216 manual_trust_bare_jids: Set[str] = set() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1217 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1218 # For each bare JID, decide whether blind trust applies |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1219 for bare_jid in bare_jids: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1220 # Get all known devices belonging to the bare JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1221 devices = await self.get_device_information(bare_jid) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1222 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1223 # If the trust levels of all devices correspond to those used by blind |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1224 # trust, blind trust applies. Otherwise, fall back to manual trust. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1225 if all(TrustLevel(device.trust_level_name) in { |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1226 TrustLevel.UNDECIDED, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1227 TrustLevel.BLINDLY_TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1228 } for device in devices): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1229 blind_trust_bare_jids.add(bare_jid) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1230 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1231 manual_trust_bare_jids.add(bare_jid) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1232 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1233 # With the JIDs sorted into their respective pools, the undecided devices can |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1234 # be categorized too |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1235 blindly_trusted_devices = \ |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1236 { dev for dev in undecided if dev.bare_jid in blind_trust_bare_jids } |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1237 manually_trusted_devices = \ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1238 { dev for dev in undecided if dev.bare_jid in manual_trust_bare_jids } |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1239 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1240 # Blindly trust devices handled by blind trust |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1241 if len(blindly_trusted_devices) > 0: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1242 for device in blindly_trusted_devices: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1243 await self.set_trust( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1244 device.bare_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1245 device.identity_key, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1246 TrustLevel.BLINDLY_TRUSTED.name |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1247 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1248 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1249 blindly_trusted_devices_stringified = ", ".join([ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1250 f"device {device.device_id} of {device.bare_jid} under namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1251 f" {device.namespaces}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1252 for device |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1253 in blindly_trusted_devices |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1254 ]) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1255 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1256 client.feedback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1257 feedback_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1258 D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1259 "Not all destination devices are trusted, unknown devices will be" |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1260 " blindly trusted.\nFollowing devices have been automatically" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1261 f" trusted: {blindly_trusted_devices_stringified}." |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1262 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1263 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1264 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1265 # Prompt the user for manual trust decisions on the devices handled by manual |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1266 # trust |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1267 if len(manually_trusted_devices) > 0: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1268 client.feedback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1269 feedback_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1270 D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1271 "Not all destination devices are trusted, we can't encrypt" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1272 " message in such a situation. Please indicate if you trust" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1273 " those devices or not in the trust manager before we can" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1274 " send this message." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1275 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1276 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1277 await self.__prompt_manual_trust( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1278 frozenset(manually_trusted_devices), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1279 feedback_jid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1280 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1281 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1282 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1283 async def _send_message(message: omemo.Message, bare_jid: str) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1284 element: Optional[ET.Element] = None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1285 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1286 if message.namespace == twomemo.twomemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1287 element = twomemo.etree.serialize_message(message) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1288 if message.namespace == oldmemo.oldmemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1289 element = oldmemo.etree.serialize_message(message) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1290 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1291 if element is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1292 raise omemo.UnknownNamespace(f"Unknown namespace: {message.namespace}") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1293 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1294 message_data = client.generate_message_xml(MessageData({ |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1295 "from": client.jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1296 "to": jid.JID(bare_jid), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1297 "uid": str(uuid.uuid4()), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1298 "message": {}, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1299 "subject": {}, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1300 "type": C.MESS_TYPE_CHAT, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1301 "extra": {}, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1302 "timestamp": time.time() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1303 })) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1304 |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
1305 message_data["xml"].addChild(xml_tools.et_elt_2_domish_elt(element)) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1306 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1307 try: |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
1308 await client.a_send(message_data["xml"]) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1309 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1310 raise omemo.MessageSendingFailed() from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1311 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1312 async def __prompt_manual_trust( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1313 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1314 undecided: FrozenSet[omemo.DeviceInformation], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1315 feedback_jid: jid.JID |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1316 ) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1317 """Asks the user to decide on the manual trust level of a set of devices. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1318 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1319 Blocks until the user has made a decision and updates the trust levels of all |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1320 devices using :meth:`set_trust`. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1321 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1322 @param undecided: The set of devices to prompt manual trust for. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1323 @param feedback_jid: The bare JID to redirect feedback to. In case of a one to |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1324 one message, the recipient JID. In case of a MUC message, the room JID. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1325 @raise TrustDecisionFailed: if the user cancels the prompt. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1326 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1327 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1328 # This session manager handles encryption with both twomemo and oldmemo, but |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1329 # both are currently registered as different plugins and the `defer_xmlui` |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1330 # below requires a single namespace identifying the encryption plugin. Thus, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1331 # get the namespace of the requested encryption method from the encryption |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1332 # session using the feedback JID. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1333 encryption = client.encryption.getSession(feedback_jid) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1334 if encryption is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1335 raise omemo.TrustDecisionFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1336 f"Encryption not requested for {feedback_jid.userhost()}." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1337 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1338 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1339 namespace = encryption["plugin"].namespace |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1340 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1341 # Casting this to Any, otherwise all calls on the variable cause type errors |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1342 # pylint: disable=no-member |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1343 trust_ui = cast(Any, xml_tools.XMLUI( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1344 panel_type=C.XMLUI_FORM, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1345 title=D_("OMEMO trust management"), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1346 submit_id="" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1347 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1348 trust_ui.addText(D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1349 "This is OMEMO trusting system. You'll see below the devices of your " |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1350 "contacts, and a checkbox to trust them or not. A trusted device " |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1351 "can read your messages in plain text, so be sure to only validate " |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1352 "devices that you are sure are belonging to your contact. It's better " |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1353 "to do this when you are next to your contact and their device, so " |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1354 "you can check the \"fingerprint\" (the number next to the device) " |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1355 "yourself. Do *not* validate a device if the fingerprint is wrong!" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1356 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1357 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1358 own_device, __ = await self.get_own_device_information() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1359 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1360 trust_ui.change_container("label") |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1361 trust_ui.addLabel(D_("This device ID")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1362 trust_ui.addText(str(own_device.device_id)) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1363 trust_ui.addLabel(D_("This device's fingerprint")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1364 trust_ui.addText(" ".join(self.format_identity_key(own_device.identity_key))) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1365 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1366 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1367 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1368 # At least sort the devices by bare JID such that they aren't listed |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1369 # completely random |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1370 undecided_ordered = sorted(undecided, key=lambda device: device.bare_jid) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1371 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1372 for index, device in enumerate(undecided_ordered): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1373 trust_ui.addLabel(D_("Contact")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1374 trust_ui.addJid(jid.JID(device.bare_jid)) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1375 trust_ui.addLabel(D_("Device ID")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1376 trust_ui.addText(str(device.device_id)) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1377 trust_ui.addLabel(D_("Fingerprint")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1378 trust_ui.addText(" ".join(self.format_identity_key(device.identity_key))) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1379 trust_ui.addLabel(D_("Trust this device?")) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1380 trust_ui.addBool(f"trust_{index}", value=C.bool_const(False)) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1381 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1382 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1383 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1384 trust_ui_result = await xml_tools.defer_xmlui( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1385 sat, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1386 trust_ui, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1387 action_extra={ "meta_encryption_trust": namespace }, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1388 profile=profile |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1389 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1390 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1391 if C.bool(trust_ui_result.get("cancelled", "false")): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1392 raise omemo.TrustDecisionFailed("Trust UI cancelled.") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1393 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1394 data_form_result = cast(Dict[str, str], xml_tools.xmlui_result_2_data_form_result( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1395 trust_ui_result |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1396 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1397 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1398 trust_updates: Set[TrustUpdate] = set() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1399 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1400 for key, value in data_form_result.items(): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1401 if not key.startswith("trust_"): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1402 continue |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1403 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1404 device = undecided_ordered[int(key[len("trust_"):])] |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1405 target_trust = C.bool(value) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1406 trust_level = \ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1407 TrustLevel.TRUSTED if target_trust else TrustLevel.DISTRUSTED |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1408 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1409 await self.set_trust( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1410 device.bare_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1411 device.identity_key, |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1412 trust_level.name |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1413 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1414 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1415 trust_updates.add(TrustUpdate( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1416 target_jid=jid.JID(device.bare_jid).userhostJID(), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1417 target_key=device.identity_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1418 target_trust=target_trust |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1419 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1420 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1421 # Check whether ATM is enabled and handle everything in case it is |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1422 trust_system = cast(str, sat.memory.param_get_a( |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1423 PARAM_NAME, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1424 PARAM_CATEGORY, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1425 profile_key=profile |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1426 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1427 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1428 if trust_system == "atm": |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1429 await manage_trust_message_cache(client, self, frozenset(trust_updates)) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1430 await send_trust_messages(client, self, frozenset(trust_updates)) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1431 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1432 return SessionManagerImpl |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1433 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1434 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1435 async def prepare_for_profile( |
4072
040095a5dc7f
refactoring: rename `SAT` class to `LiberviaBackend`
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1436 sat: LiberviaBackend, |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1437 profile: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1438 initial_own_label: Optional[str], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1439 signed_pre_key_rotation_period: int = 7 * 24 * 60 * 60, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1440 pre_key_refill_threshold: int = 99, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1441 max_num_per_session_skipped_keys: int = 1000, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1442 max_num_per_message_skipped_keys: Optional[int] = None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1443 ) -> omemo.SessionManager: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1444 """Prepare the OMEMO library (storage, backends, core) for a specific profile. |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1445 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1446 @param sat: The SAT instance. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1447 @param profile: The profile. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1448 @param initial_own_label: The initial (optional) label to assign to this device if |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1449 supported by any of the backends. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1450 @param signed_pre_key_rotation_period: The rotation period for the signed pre key, in |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1451 seconds. The rotation period is recommended to be between one week (the default) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1452 and one month. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1453 @param pre_key_refill_threshold: The number of pre keys that triggers a refill to 100. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1454 Defaults to 99, which means that each pre key gets replaced with a new one right |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1455 away. The threshold can not be configured to lower than 25. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1456 @param max_num_per_session_skipped_keys: The maximum number of skipped message keys to |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1457 keep around per session. Once the maximum is reached, old message keys are deleted |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1458 to make space for newer ones. Accessible via |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1459 :attr:`max_num_per_session_skipped_keys`. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1460 @param max_num_per_message_skipped_keys: The maximum number of skipped message keys to |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1461 accept in a single message. When set to ``None`` (the default), this parameter |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1462 defaults to the per-session maximum (i.e. the value of the |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1463 ``max_num_per_session_skipped_keys`` parameter). This parameter may only be 0 if |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1464 the per-session maximum is 0, otherwise it must be a number between 1 and the |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1465 per-session maximum. Accessible via :attr:`max_num_per_message_skipped_keys`. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1466 @return: A session manager with ``urn:xmpp:omemo:2`` and |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1467 ``eu.siacs.conversations.axolotl`` capabilities, specifically for the given |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1468 profile. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1469 @raise BundleUploadFailed: if a bundle upload failed. Forwarded from |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1470 :meth:`~omemo.session_manager.SessionManager.create`. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1471 @raise BundleDownloadFailed: if a bundle download failed. Forwarded from |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1472 :meth:`~omemo.session_manager.SessionManager.create`. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1473 @raise BundleDeletionFailed: if a bundle deletion failed. Forwarded from |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1474 :meth:`~omemo.session_manager.SessionManager.create`. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1475 @raise DeviceListUploadFailed: if a device list upload failed. Forwarded from |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1476 :meth:`~omemo.session_manager.SessionManager.create`. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1477 @raise DeviceListDownloadFailed: if a device list download failed. Forwarded from |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1478 :meth:`~omemo.session_manager.SessionManager.create`. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1479 """ |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1480 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1481 client = sat.get_client(profile) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1482 xep_0060 = cast(XEP_0060, sat.plugins["XEP-0060"]) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1483 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1484 storage = StorageImpl(profile) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1485 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1486 # TODO: Untested |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1487 await oldmemo.migrations.migrate( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1488 LegacyStorageImpl(profile, client.jid.userhost()), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1489 storage, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1490 # TODO: Do we want BLINDLY_TRUSTED or TRUSTED here? |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1491 TrustLevel.BLINDLY_TRUSTED.name, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1492 TrustLevel.UNDECIDED.name, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1493 TrustLevel.DISTRUSTED.name, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1494 lambda bare_jid, device_id: download_oldmemo_bundle( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1495 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1496 xep_0060, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1497 bare_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1498 device_id |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1499 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1500 ) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1501 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1502 session_manager = await make_session_manager(sat, profile).create( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1503 [ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1504 twomemo.Twomemo( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1505 storage, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1506 max_num_per_session_skipped_keys, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1507 max_num_per_message_skipped_keys |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1508 ), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1509 oldmemo.Oldmemo( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1510 storage, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1511 max_num_per_session_skipped_keys, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1512 max_num_per_message_skipped_keys |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1513 ) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1514 ], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1515 storage, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1516 client.jid.userhost(), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1517 initial_own_label, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1518 TrustLevel.UNDECIDED.value, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1519 signed_pre_key_rotation_period, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1520 pre_key_refill_threshold, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1521 omemo.AsyncFramework.TWISTED |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1522 ) |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1523 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1524 # This shouldn't hurt here since we're not running on overly constrainted devices. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1525 # TODO: Consider ensuring data consistency regularly/in response to certain events |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1526 await session_manager.ensure_data_consistency() |
3240
d85b68e44297
plugin XEP-0384: fixed /omemo_reset + device ID type:
Goffi <goffi@goffi.org>
parents:
3237
diff
changeset
|
1527 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1528 # TODO: Correct entering/leaving of the history synchronization mode isn't terribly |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1529 # important for now, since it only prevents an extremely unlikely race condition of |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1530 # multiple devices choosing the same pre key for new sessions while the device was |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1531 # offline. I don't believe other clients seriously defend against that race condition |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1532 # either. In the long run, it might still be cool to have triggers for when history |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1533 # sync starts and ends (MAM, MUC catch-up, etc.) and to react to those triggers. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1534 await session_manager.after_history_sync() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1535 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1536 return session_manager |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1537 |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1538 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1539 DEFAULT_TRUST_MODEL_PARAM = f""" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1540 <params> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1541 <individual> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1542 <category name="{PARAM_CATEGORY}" label={quoteattr(D_('Security'))}> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1543 <param name="{PARAM_NAME}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1544 label={quoteattr(D_('OMEMO default trust policy'))} |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1545 type="list" security="3"> |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1546 <option value="atm" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1547 label={quoteattr(D_('Automatic Trust Management (more secure)'))} /> |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1548 <option value="btbv" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1549 label={quoteattr(D_('Blind Trust Before Verification (more user friendly)'))} |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1550 selected="true" /> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1551 </param> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1552 </category> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1553 </individual> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1554 </params> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1555 """ |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1556 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1557 |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1558 class OMEMO: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1559 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1560 Plugin equipping Libervia with OMEMO capabilities under the (modern) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1561 ``urn:xmpp:omemo:2`` namespace and the (legacy) ``eu.siacs.conversations.axolotl`` |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1562 namespace. Both versions of the protocol are handled by this plugin and compatibility |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1563 between the two is maintained. MUC messages are supported next to one to one messages. |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1564 For trust management, the two trust models "ATM" and "BTBV" are supported. |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1565 """ |
3918
e63f96e60f7b
plugin XEP-0384: expose OLDMEMO and TWOMEMO namespaces:
Goffi <goffi@goffi.org>
parents:
3914
diff
changeset
|
1566 NS_TWOMEMO = twomemo.twomemo.NAMESPACE |
e63f96e60f7b
plugin XEP-0384: expose OLDMEMO and TWOMEMO namespaces:
Goffi <goffi@goffi.org>
parents:
3914
diff
changeset
|
1567 NS_OLDMEMO = oldmemo.oldmemo.NAMESPACE |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1568 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1569 # For MUC/MIX message stanzas, the <to/> affix is a MUST |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1570 SCE_PROFILE_GROUPCHAT = SCEProfile( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1571 rpad_policy=SCEAffixPolicy.REQUIRED, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1572 time_policy=SCEAffixPolicy.OPTIONAL, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1573 to_policy=SCEAffixPolicy.REQUIRED, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1574 from_policy=SCEAffixPolicy.OPTIONAL, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1575 custom_policies={} |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1576 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1577 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1578 # For everything but MUC/MIX message stanzas, the <to/> affix is a MAY |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1579 SCE_PROFILE = SCEProfile( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1580 rpad_policy=SCEAffixPolicy.REQUIRED, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1581 time_policy=SCEAffixPolicy.OPTIONAL, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1582 to_policy=SCEAffixPolicy.OPTIONAL, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1583 from_policy=SCEAffixPolicy.OPTIONAL, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1584 custom_policies={} |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
1585 ) |
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
1586 |
4216 | 1587 def __init__(self, host: LiberviaBackend) -> None: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1588 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1589 @param sat: The SAT instance. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1590 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1591 |
4216 | 1592 self.host = host |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1593 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1594 # Add configuration option to choose between manual trust and BTBV as the trust |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1595 # model |
4216 | 1596 host.memory.update_params(DEFAULT_TRUST_MODEL_PARAM) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1597 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1598 # Plugins |
4216 | 1599 self._j = cast(XEP_0060, host.plugins["XEP-0060"]) |
1600 self.__xep_0045 = cast(Optional[XEP_0045], host.plugins.get("XEP-0045")) | |
1601 self.__xep_0334 = cast(XEP_0334, host.plugins["XEP-0334"]) | |
1602 self.__xep_0359 = cast(Optional[XEP_0359], host.plugins.get("XEP-0359")) | |
1603 self.__xep_0420 = cast(XEP_0420, host.plugins["XEP-0420"]) | |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1604 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1605 # In contrast to one to one messages, MUC messages are reflected to the sender. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1606 # Thus, the sender does not add messages to their local message log when sending |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1607 # them, but when the reflection is received. This approach does not pair well with |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1608 # OMEMO, since for security reasons it is forbidden to encrypt messages for the |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1609 # own device. Thus, when the reflection of an OMEMO message is received, it can't |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1610 # be decrypted and added to the local message log as usual. To counteract this, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1611 # the plaintext of encrypted messages sent to MUCs are cached in this field, such |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1612 # that when the reflection is received, the plaintext can be looked up from the |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1613 # cache and added to the local message log. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1614 # TODO: The old plugin expired this cache after some time. I'm not sure that's |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1615 # really necessary. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1616 self.__muc_plaintext_cache: Dict[MUCPlaintextCacheKey, bytes] = {} |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1617 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1618 # Mapping from profile name to corresponding session manager |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1619 self.__session_managers: Dict[str, omemo.SessionManager] = {} |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1620 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1621 # Calls waiting for a specific session manager to be built |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1622 self.__session_manager_waiters: Dict[str, List[defer.Deferred]] = {} |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1623 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1624 # These triggers are used by oldmemo, which doesn't do SCE and only applies to |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1625 # messages. Temporarily, until a more fitting trigger for SCE-based encryption is |
4051
c23cad65ae99
core: renamed `messageReceived` trigger to `message_received`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1626 # added, the message_received trigger is also used for twomemo. |
4216 | 1627 host.trigger.add( |
4051
c23cad65ae99
core: renamed `messageReceived` trigger to `message_received`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1628 "message_received", |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1629 self._message_received_trigger, |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1630 priority=100050 |
3214
8d92d4d829fb
plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents:
3172
diff
changeset
|
1631 ) |
4164
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
1632 |
4216 | 1633 host.trigger.add("send", self.__send_trigger, priority=0) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1634 # TODO: Add new triggers here for freshly received and about-to-be-sent stanzas, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1635 # including IQs. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1636 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1637 # Give twomemo a (slightly) higher priority than oldmemo |
4216 | 1638 host.register_encryption_plugin(self, "OMEMO", twomemo.twomemo.NAMESPACE, 101) |
1639 host.register_encryption_plugin( | |
4150
26534d959d2d
Plugin XEP-0384: rename the pun names "OLDMEMO" and "TWOMEMO" to "OMEMO_legacy" and "OMEMO" for clarity.
Goffi <goffi@goffi.org>
parents:
4073
diff
changeset
|
1640 self, "OMEMO_legacy", oldmemo.oldmemo.NAMESPACE, 100 |
26534d959d2d
Plugin XEP-0384: rename the pun names "OLDMEMO" and "TWOMEMO" to "OMEMO_legacy" and "OMEMO" for clarity.
Goffi <goffi@goffi.org>
parents:
4073
diff
changeset
|
1641 ) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1642 |
4216 | 1643 xep_0163 = cast(XEP_0163, host.plugins["XEP-0163"]) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1644 xep_0163.add_pep_event( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1645 "TWOMEMO_DEVICES", |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1646 TWOMEMO_DEVICE_LIST_NODE, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1647 lambda items_event, profile: defer.ensureDeferred( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1648 self.__on_device_list_update(items_event, profile) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1649 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1650 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1651 xep_0163.add_pep_event( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1652 "OLDMEMO_DEVICES", |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1653 OLDMEMO_DEVICE_LIST_NODE, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1654 lambda items_event, profile: defer.ensureDeferred( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1655 self.__on_device_list_update(items_event, profile) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1656 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1657 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1658 |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1659 try: |
4216 | 1660 self.__text_commands = cast(TextCommands, host.plugins[C.TEXT_CMDS]) |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1661 except KeyError: |
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1662 log.info(_("Text commands not available")) |
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1663 else: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1664 self.__text_commands.register_text_commands(self) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1665 |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1666 def profile_connected( # pylint: disable=invalid-name |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1667 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1668 client: SatXMPPClient |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1669 ) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1670 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1671 @param client: The client. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1672 """ |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1673 |
4004
cd6f70015738
plugin XEP-0384: run `profileConnected` workflow in background:
Goffi <goffi@goffi.org>
parents:
3976
diff
changeset
|
1674 defer.ensureDeferred(self.get_session_manager( |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
1675 cast(str, client.profile) |
4004
cd6f70015738
plugin XEP-0384: run `profileConnected` workflow in background:
Goffi <goffi@goffi.org>
parents:
3976
diff
changeset
|
1676 )) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1677 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1678 async def cmd_omemo_reset( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1679 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1680 client: SatXMPPClient, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1681 mess_data: MessageData |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1682 ) -> Literal[False]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1683 """Reset all sessions of devices that belong to the recipient of ``mess_data``. |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1684 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1685 This must only be callable manually by the user. Use this when a session is |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1686 apparently broken, i.e. sending and receiving encrypted messages doesn't work and |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1687 something being wrong has been confirmed manually with the recipient. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1688 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1689 @param client: The client. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1690 @param mess_data: The message data, whose ``to`` attribute will be the bare JID to |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1691 reset all sessions with. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1692 @return: The constant value ``False``, indicating to the text commands plugin that |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1693 the message is not supposed to be sent. |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1694 """ |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1695 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1696 twomemo_requested = \ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1697 client.encryption.is_encryption_requested(mess_data, twomemo.twomemo.NAMESPACE) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1698 oldmemo_requested = \ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1699 client.encryption.is_encryption_requested(mess_data, oldmemo.oldmemo.NAMESPACE) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1700 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1701 if not (twomemo_requested or oldmemo_requested): |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1702 self.__text_commands.feed_back( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1703 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1704 _("You need to have OMEMO encryption activated to reset the session"), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1705 mess_data |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1706 ) |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1707 return False |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1708 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1709 bare_jid = mess_data["to"].userhost() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1710 |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
1711 session_manager = await self.get_session_manager(client.profile) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1712 devices = await session_manager.get_device_information(bare_jid) |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1713 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1714 for device in devices: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1715 log.debug(f"Replacing sessions with device {device}") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1716 await session_manager.replace_sessions(device) |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1717 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1718 self.__text_commands.feed_back( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1719 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1720 _("OMEMO session has been reset"), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1721 mess_data |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1722 ) |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1723 |
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1724 return False |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1725 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1726 async def get_trust_ui( # pylint: disable=invalid-name |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1727 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1728 client: SatXMPPClient, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1729 entity: jid.JID |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1730 ) -> xml_tools.XMLUI: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1731 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1732 @param client: The client. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1733 @param entity: The entity whose device trust levels to manage. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1734 @return: An XMLUI instance which opens a form to manage the trust level of all |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1735 devices belonging to the entity. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1736 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1737 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1738 if entity.resource: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1739 raise ValueError("A bare JID is expected.") |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
1740 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1741 bare_jids: Set[str] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1742 if self.__xep_0045 is not None and self.__xep_0045.is_joined_room(client, entity): |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1743 bare_jids = self.__get_joined_muc_users(client, self.__xep_0045, entity) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1744 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1745 bare_jids = { entity.userhost() } |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1746 |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
1747 session_manager = await self.get_session_manager(client.profile) |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
1748 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1749 # At least sort the devices by bare JID such that they aren't listed completely |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1750 # random |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1751 devices = sorted(cast(Set[omemo.DeviceInformation], set()).union(*[ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1752 await session_manager.get_device_information(bare_jid) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1753 for bare_jid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1754 in bare_jids |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1755 ]), key=lambda device: device.bare_jid) |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1756 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1757 async def callback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1758 data: Any, |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1759 profile: str |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1760 ) -> Dict[Never, Never]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1761 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1762 @param data: The XMLUI result produces by the trust UI form. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1763 @param profile: The profile. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1764 @return: An empty dictionary. The type of the return value was chosen |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1765 conservatively since the exact options are neither known not needed here. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1766 """ |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1767 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1768 if C.bool(data.get("cancelled", "false")): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1769 return {} |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1770 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1771 data_form_result = cast( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1772 Dict[str, str], |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1773 xml_tools.xmlui_result_2_data_form_result(data) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1774 ) |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1775 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1776 trust_updates: Set[TrustUpdate] = set() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1777 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1778 for key, value in data_form_result.items(): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1779 if not key.startswith("trust_"): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1780 continue |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1781 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1782 device = devices[int(key[len("trust_"):])] |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1783 trust_level_name = value |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1784 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1785 if device.trust_level_name != trust_level_name: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1786 await session_manager.set_trust( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1787 device.bare_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1788 device.identity_key, |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1789 trust_level_name |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1790 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1791 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1792 target_trust: Optional[bool] = None |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1793 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1794 if TrustLevel(trust_level_name) is TrustLevel.TRUSTED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1795 target_trust = True |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1796 if TrustLevel(trust_level_name) is TrustLevel.DISTRUSTED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1797 target_trust = False |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1798 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1799 if target_trust is not None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1800 trust_updates.add(TrustUpdate( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1801 target_jid=jid.JID(device.bare_jid).userhostJID(), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1802 target_key=device.identity_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1803 target_trust=target_trust |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1804 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1805 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1806 # Check whether ATM is enabled and handle everything in case it is |
4216 | 1807 trust_system = cast(str, self.host.memory.param_get_a( |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1808 PARAM_NAME, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1809 PARAM_CATEGORY, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1810 profile_key=profile |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1811 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1812 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1813 if trust_system == "atm": |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1814 if len(trust_updates) > 0: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1815 await manage_trust_message_cache( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1816 client, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1817 session_manager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1818 frozenset(trust_updates) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1819 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1820 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1821 await send_trust_messages( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1822 client, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1823 session_manager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1824 frozenset(trust_updates) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1825 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1826 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1827 return {} |
2744
e6716d90c2fe
plugin XEP-0384: various bug fixes:
Goffi <goffi@goffi.org>
parents:
2738
diff
changeset
|
1828 |
4216 | 1829 submit_id = self.host.register_callback(callback, with_data=True, one_shot=True) |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1830 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1831 result = xml_tools.XMLUI( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1832 panel_type=C.XMLUI_FORM, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1833 title=D_("OMEMO trust management"), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1834 submit_id=submit_id |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1835 ) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1836 # Casting this to Any, otherwise all calls on the variable cause type errors |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1837 # pylint: disable=no-member |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1838 trust_ui = cast(Any, result) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1839 trust_ui.addText(D_( |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1840 "This is OMEMO trusting system. You'll see below the devices of your" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1841 " contacts, and a list selection to trust them or not. A trusted device" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1842 " can read your messages in plain text, so be sure to only validate" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1843 " devices that you are sure are belonging to your contact. It's better" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1844 " to do this when you are next to your contact and their device, so" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1845 " you can check the \"fingerprint\" (the number next to the device)" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1846 " yourself. Do *not* validate a device if the fingerprint is wrong!" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1847 " Note that manually validating a fingerprint disables any form of automatic" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1848 " trust." |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1849 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1850 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1851 own_device, __ = await session_manager.get_own_device_information() |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1852 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1853 trust_ui.change_container("label") |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1854 trust_ui.addLabel(D_("This device ID")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1855 trust_ui.addText(str(own_device.device_id)) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1856 trust_ui.addLabel(D_("This device's fingerprint")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1857 trust_ui.addText(" ".join(session_manager.format_identity_key( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1858 own_device.identity_key |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1859 ))) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1860 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1861 trust_ui.addEmpty() |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
1862 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1863 for index, device in enumerate(devices): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1864 trust_ui.addLabel(D_("Contact")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1865 trust_ui.addJid(jid.JID(device.bare_jid)) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1866 trust_ui.addLabel(D_("Device ID")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1867 trust_ui.addText(str(device.device_id)) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1868 trust_ui.addLabel(D_("Fingerprint")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1869 trust_ui.addText(" ".join(session_manager.format_identity_key( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1870 device.identity_key |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1871 ))) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1872 trust_ui.addLabel(D_("Trust this device?")) |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1873 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1874 current_trust_level = TrustLevel(device.trust_level_name) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1875 avaiable_trust_levels = \ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1876 { TrustLevel.DISTRUSTED, TrustLevel.TRUSTED, current_trust_level } |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
1877 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1878 trust_ui.addList( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1879 f"trust_{index}", |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1880 options=[ trust_level.name for trust_level in avaiable_trust_levels ], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1881 selected=current_trust_level.name, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1882 styles=[ "inline" ] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1883 ) |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1884 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1885 twomemo_active = dict(device.active).get(twomemo.twomemo.NAMESPACE) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1886 if twomemo_active is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1887 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1888 trust_ui.addLabel(D_("(not available for Twomemo)")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1889 if twomemo_active is False: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1890 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1891 trust_ui.addLabel(D_("(inactive for Twomemo)")) |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
1892 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1893 oldmemo_active = dict(device.active).get(oldmemo.oldmemo.NAMESPACE) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1894 if oldmemo_active is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1895 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1896 trust_ui.addLabel(D_("(not available for Oldmemo)")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1897 if oldmemo_active is False: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1898 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1899 trust_ui.addLabel(D_("(inactive for Oldmemo)")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1900 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1901 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1902 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1903 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1904 return result |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1905 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1906 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1907 def __get_joined_muc_users( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1908 client: SatXMPPClient, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1909 xep_0045: XEP_0045, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1910 room_jid: jid.JID |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1911 ) -> Set[str]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1912 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1913 @param client: The client. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1914 @param xep_0045: A MUC plugin instance. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1915 @param room_jid: The room JID. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1916 @return: A set containing the bare JIDs of the MUC participants. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1917 @raise InternalError: if the MUC is not joined or the entity information of a |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1918 participant isn't available. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1919 """ |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1920 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1921 bare_jids: Set[str] = set() |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1922 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1923 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1924 room = cast(muc.Room, xep_0045.get_room(client, room_jid)) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1925 except exceptions.NotFound as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1926 raise exceptions.InternalError( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1927 "Participant list of unjoined MUC requested." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1928 ) from e |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1929 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1930 for user in cast(Dict[str, muc.User], room.roster).values(): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1931 entity = cast(Optional[SatXMPPEntity], user.entity) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1932 if entity is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1933 raise exceptions.InternalError( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1934 f"Participant list of MUC requested, but the entity information of" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1935 f" the participant {user} is not available." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1936 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1937 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1938 bare_jids.add(entity.jid.userhost()) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1939 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1940 return bare_jids |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1941 |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
1942 async def get_session_manager(self, profile: str) -> omemo.SessionManager: |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1943 """ |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1944 @param profile: The profile to prepare for. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1945 @return: A session manager instance for this profile. Creates a new instance if |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1946 none was prepared before. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1947 """ |
2662
0bef44f8e8ca
plugin XEP-0384: PEP handling + mark as encrypted:
Goffi <goffi@goffi.org>
parents:
2654
diff
changeset
|
1948 |
3214
8d92d4d829fb
plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents:
3172
diff
changeset
|
1949 try: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1950 # Try to return the session manager |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1951 return self.__session_managers[profile] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1952 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1953 # If a session manager for that profile doesn't exist yet, check whether it is |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1954 # currently being built. A session manager being built is signified by the |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1955 # profile key existing on __session_manager_waiters. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1956 if profile in self.__session_manager_waiters: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1957 # If the session manager is being built, add ourselves to the waiting |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1958 # queue |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1959 deferred = defer.Deferred() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1960 self.__session_manager_waiters[profile].append(deferred) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1961 return cast(omemo.SessionManager, await deferred) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1962 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1963 # If the session manager is not being built, do so here. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1964 self.__session_manager_waiters[profile] = [] |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1965 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1966 # Build and store the session manager |
3929
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1967 try: |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1968 session_manager = await prepare_for_profile( |
4216 | 1969 self.host, |
3929
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1970 profile, |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1971 initial_own_label="Libervia" |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1972 ) |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1973 except Exception as e: |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1974 # In case of an error during initalization, notify the waiters accordingly |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1975 # and delete them |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1976 for waiter in self.__session_manager_waiters[profile]: |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1977 waiter.errback(e) |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1978 del self.__session_manager_waiters[profile] |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1979 |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1980 # Re-raise the exception |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1981 raise |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1982 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1983 self.__session_managers[profile] = session_manager |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1984 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1985 # Notify the waiters and delete them |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1986 for waiter in self.__session_manager_waiters[profile]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1987 waiter.callback(session_manager) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1988 del self.__session_manager_waiters[profile] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1989 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1990 return session_manager |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1991 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1992 async def __message_received_trigger_atm( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1993 self, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1994 client: SatXMPPClient, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1995 message_elt: domish.Element, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1996 session_manager: omemo.SessionManager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1997 sender_device_information: omemo.DeviceInformation, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1998 timestamp: datetime |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1999 ) -> None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2000 """Check a newly decrypted message stanza for ATM content and perform ATM in case. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2001 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2002 @param client: The client which received the message. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2003 @param message_elt: The message element. Can be modified. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2004 @param session_manager: The session manager. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2005 @param sender_device_information: Information about the device that sent/encrypted |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2006 the message. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2007 @param timestamp: Timestamp extracted from the SCE time affix. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2008 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2009 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2010 trust_message_cache = persistent.LazyPersistentBinaryDict( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2011 "XEP-0384/TM", |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2012 client.profile |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2013 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2014 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2015 new_cache_entries: Set[TrustMessageCacheEntry] = set() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2016 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2017 for trust_message_elt in message_elt.elements(NS_TM, "trust-message"): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2018 assert isinstance(trust_message_elt, domish.Element) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2019 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2020 try: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2021 TRUST_MESSAGE_SCHEMA.validate(trust_message_elt.toXml()) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2022 except xmlschema.XMLSchemaValidationError as e: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2023 raise exceptions.ParsingError( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2024 "<trust-message/> element doesn't pass schema validation." |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2025 ) from e |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2026 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2027 if trust_message_elt["usage"] != NS_ATM: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2028 # Skip non-ATM trust message |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2029 continue |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2030 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2031 if trust_message_elt["encryption"] != OMEMO.NS_TWOMEMO: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2032 # Skip non-twomemo trust message |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2033 continue |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2034 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2035 for key_owner_elt in trust_message_elt.elements(NS_TM, "key-owner"): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2036 assert isinstance(key_owner_elt, domish.Element) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2037 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2038 key_owner_jid = jid.JID(key_owner_elt["jid"]).userhostJID() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2039 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2040 for trust_elt in key_owner_elt.elements(NS_TM, "trust"): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2041 assert isinstance(trust_elt, domish.Element) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2042 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2043 new_cache_entries.add(TrustMessageCacheEntry( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2044 sender_jid=jid.JID(sender_device_information.bare_jid), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2045 sender_key=sender_device_information.identity_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2046 timestamp=timestamp, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2047 trust_update=TrustUpdate( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2048 target_jid=key_owner_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2049 target_key=base64.b64decode(str(trust_elt)), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2050 target_trust=True |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2051 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2052 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2053 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2054 for distrust_elt in key_owner_elt.elements(NS_TM, "distrust"): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2055 assert isinstance(distrust_elt, domish.Element) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2056 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2057 new_cache_entries.add(TrustMessageCacheEntry( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2058 sender_jid=jid.JID(sender_device_information.bare_jid), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2059 sender_key=sender_device_information.identity_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2060 timestamp=timestamp, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2061 trust_update=TrustUpdate( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2062 target_jid=key_owner_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2063 target_key=base64.b64decode(str(distrust_elt)), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2064 target_trust=False |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2065 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2066 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2067 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2068 # Load existing cache entries |
4216 | 2069 existing_cache_entries = { |
2070 TrustMessageCacheEntry.from_dict(d) | |
2071 for d in await trust_message_cache.get("cache", []) | |
2072 } | |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2073 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2074 # Discard cache entries by timestamp comparison |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2075 existing_by_target = { |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2076 ( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2077 cache_entry.trust_update.target_jid.userhostJID(), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2078 cache_entry.trust_update.target_key |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2079 ): cache_entry |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2080 for cache_entry |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2081 in existing_cache_entries |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2082 } |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2083 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2084 # Iterate over a copy here, such that new_cache_entries can be modified |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2085 for new_cache_entry in set(new_cache_entries): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2086 existing_cache_entry = existing_by_target.get( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2087 ( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2088 new_cache_entry.trust_update.target_jid.userhostJID(), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2089 new_cache_entry.trust_update.target_key |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2090 ), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2091 None |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2092 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2093 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2094 if existing_cache_entry is not None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2095 if existing_cache_entry.timestamp > new_cache_entry.timestamp: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2096 # If the existing cache entry is newer than the new cache entry, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2097 # discard the new one in favor of the existing one |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2098 new_cache_entries.remove(new_cache_entry) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2099 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2100 # Otherwise, discard the existing cache entry. This includes the case |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2101 # when both cache entries have matching timestamps. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2102 existing_cache_entries.remove(existing_cache_entry) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2103 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2104 # If the sending device is trusted, apply the new cache entries |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2105 applied_trust_updates: Set[TrustUpdate] = set() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2106 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2107 if TrustLevel(sender_device_information.trust_level_name) is TrustLevel.TRUSTED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2108 # Iterate over a copy such that new_cache_entries can be modified |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2109 for cache_entry in set(new_cache_entries): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2110 trust_update = cache_entry.trust_update |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2111 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2112 trust_level = ( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2113 TrustLevel.TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2114 if trust_update.target_trust |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2115 else TrustLevel.DISTRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2116 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2117 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2118 await session_manager.set_trust( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2119 trust_update.target_jid.userhost(), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2120 trust_update.target_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2121 trust_level.name |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2122 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2123 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2124 applied_trust_updates.add(trust_update) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2125 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2126 new_cache_entries.remove(cache_entry) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2127 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2128 # Store the remaining existing and new cache entries |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2129 await trust_message_cache.force( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2130 "cache", |
4216 | 2131 [tm.to_dict() for tm in existing_cache_entries | new_cache_entries] |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2132 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2133 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2134 # If the trust of at least one device was modified, run the ATM cache update logic |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2135 if len(applied_trust_updates) > 0: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2136 await manage_trust_message_cache( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2137 client, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2138 session_manager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2139 frozenset(applied_trust_updates) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2140 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2141 |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2142 async def _message_received_trigger( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2143 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2144 client: SatXMPPClient, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2145 message_elt: domish.Element, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2146 post_treat: defer.Deferred |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2147 ) -> bool: |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2148 """ |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2149 @param client: The client which received the message. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2150 @param message_elt: The message element. Can be modified. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2151 @param post_treat: A deferred which evaluates to a :class:`MessageData` once the |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2152 message has fully progressed through the message receiving flow. Can be used |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2153 to apply treatments to the fully processed message, like marking it as |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2154 encrypted. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2155 @return: Whether to continue the message received flow. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2156 """ |
4007
1d5a81e3c9e8
plugin XEP-0384: skip MessageReceived trigger when in a component:
Goffi <goffi@goffi.org>
parents:
4004
diff
changeset
|
2157 if client.is_component: |
1d5a81e3c9e8
plugin XEP-0384: skip MessageReceived trigger when in a component:
Goffi <goffi@goffi.org>
parents:
4004
diff
changeset
|
2158 return True |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2159 muc_plaintext_cache_key: Optional[MUCPlaintextCacheKey] = None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2160 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2161 sender_jid = jid.JID(message_elt["from"]) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2162 feedback_jid: jid.JID |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2163 |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2164 message_type = message_elt.getAttribute("type", C.MESS_TYPE_NORMAL) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2165 is_muc_message = message_type == C.MESS_TYPE_GROUPCHAT |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2166 if is_muc_message: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2167 if self.__xep_0045 is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2168 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2169 "Ignoring MUC message since plugin XEP-0045 is not available." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2170 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2171 # Can't handle a MUC message without XEP-0045, let the flow continue |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2172 # normally |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2173 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2174 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2175 room_jid = feedback_jid = sender_jid.userhostJID() |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2176 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2177 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
2178 room = cast(muc.Room, self.__xep_0045.get_room(client, room_jid)) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2179 except exceptions.NotFound: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2180 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2181 f"Ignoring MUC message from a room that has not been joined:" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2182 f" {room_jid}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2183 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2184 # Whatever, let the flow continue |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2185 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2186 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2187 sender_user = cast(Optional[muc.User], room.getUser(sender_jid.resource)) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2188 if sender_user is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2189 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2190 f"Ignoring MUC message from room {room_jid} since the sender's user" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2191 f" wasn't found {sender_jid.resource}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2192 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2193 # Whatever, let the flow continue |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2194 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2195 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2196 sender_user_jid = cast(Optional[jid.JID], sender_user.entity) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2197 if sender_user_jid is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2198 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2199 f"Ignoring MUC message from room {room_jid} since the sender's bare" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2200 f" JID couldn't be found from its user information: {sender_user}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2201 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2202 # Whatever, let the flow continue |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2203 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2204 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2205 sender_jid = sender_user_jid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2206 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2207 message_uid: Optional[str] = None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2208 if self.__xep_0359 is not None: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
2209 message_uid = self.__xep_0359.get_origin_id(message_elt) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2210 if message_uid is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2211 message_uid = message_elt.getAttribute("id") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2212 if message_uid is not None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2213 muc_plaintext_cache_key = MUCPlaintextCacheKey( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2214 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2215 room_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2216 message_uid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2217 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2218 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2219 # I'm not sure why this check is required, this code is copied from the old |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2220 # plugin. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2221 if sender_jid.userhostJID() == client.jid.userhostJID(): |
3944
748094d5a74d
plugin XEP-0374, XEP-0384: handle cases where "to" is not set in <message> for `feedback_jid`
Goffi <goffi@goffi.org>
parents:
3943
diff
changeset
|
2222 try: |
748094d5a74d
plugin XEP-0374, XEP-0384: handle cases where "to" is not set in <message> for `feedback_jid`
Goffi <goffi@goffi.org>
parents:
3943
diff
changeset
|
2223 feedback_jid = jid.JID(message_elt["to"]) |
748094d5a74d
plugin XEP-0374, XEP-0384: handle cases where "to" is not set in <message> for `feedback_jid`
Goffi <goffi@goffi.org>
parents:
3943
diff
changeset
|
2224 except KeyError: |
748094d5a74d
plugin XEP-0374, XEP-0384: handle cases where "to" is not set in <message> for `feedback_jid`
Goffi <goffi@goffi.org>
parents:
3943
diff
changeset
|
2225 feedback_jid = client.server_jid |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2226 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2227 feedback_jid = sender_jid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2228 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2229 sender_bare_jid = sender_jid.userhost() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2230 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2231 message: Optional[omemo.Message] = None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2232 encrypted_elt: Optional[domish.Element] = None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2233 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2234 twomemo_encrypted_elt = cast(Optional[domish.Element], next( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2235 message_elt.elements(twomemo.twomemo.NAMESPACE, "encrypted"), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2236 None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2237 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2238 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2239 oldmemo_encrypted_elt = cast(Optional[domish.Element], next( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2240 message_elt.elements(oldmemo.oldmemo.NAMESPACE, "encrypted"), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2241 None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2242 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2243 |
3943
8dc6a4cfda4b
plugin XEP-0384: continue workflow and log error in case of issue in self.__prepare_for_profile:
Goffi <goffi@goffi.org>
parents:
3933
diff
changeset
|
2244 try: |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
2245 session_manager = await self.get_session_manager(cast(str, client.profile)) |
3943
8dc6a4cfda4b
plugin XEP-0384: continue workflow and log error in case of issue in self.__prepare_for_profile:
Goffi <goffi@goffi.org>
parents:
3933
diff
changeset
|
2246 except Exception as e: |
8dc6a4cfda4b
plugin XEP-0384: continue workflow and log error in case of issue in self.__prepare_for_profile:
Goffi <goffi@goffi.org>
parents:
3933
diff
changeset
|
2247 log.error(f"error while preparing profile for {client.profile}: {e}") |
8dc6a4cfda4b
plugin XEP-0384: continue workflow and log error in case of issue in self.__prepare_for_profile:
Goffi <goffi@goffi.org>
parents:
3933
diff
changeset
|
2248 # we don't want to block the workflow |
8dc6a4cfda4b
plugin XEP-0384: continue workflow and log error in case of issue in self.__prepare_for_profile:
Goffi <goffi@goffi.org>
parents:
3933
diff
changeset
|
2249 return True |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2250 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2251 if twomemo_encrypted_elt is not None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2252 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2253 message = twomemo.etree.parse_message( |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
2254 xml_tools.domish_elt_2_et_elt(twomemo_encrypted_elt), |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2255 sender_bare_jid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2256 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2257 except (ValueError, XMLSchemaValidationError): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2258 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2259 f"Ingoring malformed encrypted message for namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2260 f" {twomemo.twomemo.NAMESPACE}: {twomemo_encrypted_elt.toXml()}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2261 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2262 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2263 encrypted_elt = twomemo_encrypted_elt |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2264 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2265 if oldmemo_encrypted_elt is not None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2266 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2267 message = await oldmemo.etree.parse_message( |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
2268 xml_tools.domish_elt_2_et_elt(oldmemo_encrypted_elt), |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2269 sender_bare_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2270 client.jid.userhost(), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2271 session_manager |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2272 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2273 except (ValueError, XMLSchemaValidationError): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2274 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2275 f"Ingoring malformed encrypted message for namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2276 f" {oldmemo.oldmemo.NAMESPACE}: {oldmemo_encrypted_elt.toXml()}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2277 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2278 except omemo.SenderNotFound: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2279 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2280 f"Ingoring encrypted message for namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2281 f" {oldmemo.oldmemo.NAMESPACE} by unknown sender:" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2282 f" {oldmemo_encrypted_elt.toXml()}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2283 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2284 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2285 encrypted_elt = oldmemo_encrypted_elt |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2286 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2287 if message is None or encrypted_elt is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2288 # None of our business, let the flow continue |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2289 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2290 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2291 message_elt.children.remove(encrypted_elt) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2292 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2293 log.debug( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2294 f"{message.namespace} message of type {message_type} received from" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2295 f" {sender_bare_jid}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2296 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2297 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2298 plaintext: Optional[bytes] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2299 device_information: omemo.DeviceInformation |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2300 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2301 if ( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2302 muc_plaintext_cache_key is not None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2303 and muc_plaintext_cache_key in self.__muc_plaintext_cache |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2304 ): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2305 # Use the cached plaintext |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2306 plaintext = self.__muc_plaintext_cache.pop(muc_plaintext_cache_key) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2307 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2308 # Since this message was sent by us, use the own device information here |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2309 device_information, __ = await session_manager.get_own_device_information() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2310 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2311 try: |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
2312 plaintext, device_information, __ = await session_manager.decrypt(message) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2313 except omemo.MessageNotForUs: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2314 # The difference between this being a debug or a warning is whether there |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2315 # is a body included in the message. Without a body, we can assume that |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2316 # it's an empty OMEMO message used for protocol stability reasons, which |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2317 # is not expected to be sent to all devices of all recipients. If a body |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2318 # is included, we can assume that the message carries content and we |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2319 # missed out on something. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2320 if len(list(message_elt.elements(C.NS_CLIENT, "body"))) > 0: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2321 client.feedback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2322 feedback_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2323 D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2324 f"An OMEMO message from {sender_jid.full()} has not been" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2325 f" encrypted for our device, we can't decrypt it." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2326 ), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2327 { C.MESS_EXTRA_INFO: C.EXTRA_INFO_DECR_ERR } |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2328 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2329 log.warning("Message not encrypted for us.") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2330 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2331 log.debug("Message not encrypted for us.") |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2332 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2333 # No point in further processing this message. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2334 return False |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2335 except Exception as e: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2336 log.warning(_("Can't decrypt message: {reason}\n{xml}").format( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2337 reason=e, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2338 xml=message_elt.toXml() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2339 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2340 client.feedback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2341 feedback_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2342 D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2343 f"An OMEMO message from {sender_jid.full()} can't be decrypted:" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2344 f" {e}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2345 ), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2346 { C.MESS_EXTRA_INFO: C.EXTRA_INFO_DECR_ERR } |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2347 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2348 # No point in further processing this message |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2349 return False |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2350 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2351 affix_values: Optional[SCEAffixValues] = None |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2352 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2353 if message.namespace == twomemo.twomemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2354 if plaintext is not None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2355 # XEP_0420.unpack_stanza handles the whole unpacking, including the |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2356 # relevant modifications to the element |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2357 sce_profile = \ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2358 OMEMO.SCE_PROFILE_GROUPCHAT if is_muc_message else OMEMO.SCE_PROFILE |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2359 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2360 affix_values = self.__xep_0420.unpack_stanza( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2361 sce_profile, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2362 message_elt, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2363 plaintext |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2364 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2365 except Exception as e: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2366 log.warning(D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2367 f"Error unpacking SCE-encrypted message: {e}\n{plaintext}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2368 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2369 client.feedback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2370 feedback_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2371 D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2372 f"An OMEMO message from {sender_jid.full()} was rejected:" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2373 f" {e}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2374 ), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2375 { C.MESS_EXTRA_INFO: C.EXTRA_INFO_DECR_ERR } |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2376 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2377 # No point in further processing this message |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2378 return False |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2379 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2380 if affix_values.timestamp is not None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2381 # TODO: affix_values.timestamp contains the timestamp included in |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2382 # the encrypted element here. The XEP says it SHOULD be displayed |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2383 # with the plaintext by clients. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2384 pass |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2385 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2386 if message.namespace == oldmemo.oldmemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2387 # Remove all body elements from the original element, since those act as |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2388 # fallbacks in case the encryption protocol is not supported |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2389 for child in message_elt.elements(): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2390 if child.name == "body": |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2391 message_elt.children.remove(child) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2392 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2393 if plaintext is not None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2394 # Add the decrypted body |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2395 message_elt.addElement("body", content=plaintext.decode("utf-8")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2396 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2397 # Mark the message as trusted or untrusted. Undecided counts as untrusted here. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2398 trust_level = \ |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2399 await session_manager._evaluate_custom_trust_level(device_information) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2400 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2401 if trust_level is omemo.TrustLevel.TRUSTED: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
2402 post_treat.addCallback(client.encryption.mark_as_trusted) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2403 else: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
2404 post_treat.addCallback(client.encryption.mark_as_untrusted) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2405 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2406 # Mark the message as originally encrypted |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2407 post_treat.addCallback( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
2408 client.encryption.mark_as_encrypted, |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2409 namespace=message.namespace |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2410 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2411 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2412 # Handle potential ATM trust updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2413 if affix_values is not None and affix_values.timestamp is not None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2414 await self.__message_received_trigger_atm( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2415 client, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2416 message_elt, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2417 session_manager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2418 device_information, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2419 affix_values.timestamp |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2420 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2421 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2422 # Message processed successfully, continue with the flow |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2423 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2424 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2425 async def __send_trigger(self, client: SatXMPPClient, stanza: domish.Element) -> bool: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2426 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2427 @param client: The client sending this message. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2428 @param stanza: The stanza that is about to be sent. Can be modified. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2429 @return: Whether the send message flow should continue or not. |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2430 """ |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2431 # SCE is only applicable to message and IQ stanzas |
3919
7b2c51bcc8f5
plugin XEP-0384: temporarily disable `<iq>` stanza encryption:
Goffi <goffi@goffi.org>
parents:
3918
diff
changeset
|
2432 # FIXME: temporary disabling IQ stanza encryption |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2433 if stanza.name not in { "message" }: # , "iq" }: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2434 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2435 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2436 # Get the intended recipient |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2437 recipient = stanza.getAttribute("to", None) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2438 if recipient is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2439 if stanza.name == "message": |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2440 # Message stanzas must have a recipient |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2441 raise exceptions.InternalError( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2442 f"Message without recipient encountered. Blocking further processing" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2443 f" to avoid leaking plaintext data: {stanza.toXml()}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2444 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2445 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2446 # IQs without a recipient are a thing, I believe those simply target the |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2447 # server and are thus not eligible for e2ee anyway. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2448 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2449 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2450 # Parse the JID |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2451 recipient_bare_jid = jid.JID(recipient).userhostJID() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2452 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2453 # Check whether encryption with twomemo is requested |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2454 encryption = client.encryption.getSession(recipient_bare_jid) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2455 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2456 if encryption is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2457 # Encryption is not requested for this recipient |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2458 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2459 |
4164
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
2460 encryption_ns = encryption["plugin"].namespace |
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
2461 # All pre-checks done, we can start encrypting! |
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
2462 if encryption_ns in (twomemo.twomemo.NAMESPACE, oldmemo.oldmemo.NAMESPACE): |
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
2463 await self.encrypt( |
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
2464 client, |
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
2465 encryption_ns, |
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
2466 stanza, |
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
2467 recipient_bare_jid, |
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
2468 stanza.getAttribute("type", C.MESS_TYPE_NORMAL) == C.MESS_TYPE_GROUPCHAT, |
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
2469 stanza.getAttribute("id", None) |
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
2470 ) |
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
2471 else: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2472 # Encryption is requested for this recipient, but not with twomemo |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2473 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2474 |
4164
15482dc0b5d1
plugin XEP-0384: fix trigger used for OLDMEMO:
Goffi <goffi@goffi.org>
parents:
4150
diff
changeset
|
2475 |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2476 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2477 # Add a store hint if this is a message stanza |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2478 if stanza.name == "message": |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
2479 self.__xep_0334.add_hint_elements(stanza, [ "store" ]) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2480 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2481 # Let the flow continue. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2482 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2483 |
4219
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2484 async def download_missing_device_lists( |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2485 self, |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2486 client: SatXMPPClient, |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2487 namespace: NamespaceType, |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2488 recipients: Iterable[jid.JID], |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2489 session_manager: omemo.SessionManager, |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2490 ) -> None: |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2491 """Retrieves missing device lists for recipients outside the profile's roster. |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2492 |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2493 @param client: XMPP client. |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2494 @param namespace: The namespace of the OMEMO version to use. |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2495 @param recipients: Recipients to verify device list presence. |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2496 @param session_manager: OMEMO session manager. |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2497 """ |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2498 recipients = [j.userhostJID() for j in recipients] |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2499 not_in_roster = [j for j in recipients if not client.roster.is_jid_in_roster(j)] |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2500 for bare_jid in not_in_roster: |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2501 device_information = await session_manager.get_device_information( |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2502 bare_jid.userhost() |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2503 ) |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2504 if ( |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2505 not device_information |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2506 or not all(namespace in di.namespaces for di in device_information) |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2507 ): |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2508 if namespace == self.NS_TWOMEMO: |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2509 algo, node = "OMEMO", TWOMEMO_DEVICE_LIST_NODE |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2510 elif namespace == self.NS_OLDMEMO: |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2511 algo, node = "OMEMO_legacy", OLDMEMO_DEVICE_LIST_NODE |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2512 else: |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2513 raise ValueError(f"Invalid namespace: {namespace!r}") |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2514 |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2515 try: |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2516 items, __ = await self._j.get_items(client, bare_jid, node, 1) |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2517 |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2518 except Exception: |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2519 log.exception(f"Can't find {algo} devices list for {bare_jid}.") |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2520 else: |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2521 await self._update_device_list(client, bare_jid, items) |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2522 log.warning(f"{algo} devices list updated for {bare_jid}.") |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2523 |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2524 async def encrypt( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2525 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2526 client: SatXMPPClient, |
4219
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2527 namespace: NamespaceType, |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2528 stanza: domish.Element, |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2529 recipient_jids: Union[jid.JID, Set[jid.JID]], |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2530 is_muc_message: bool, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2531 stanza_id: Optional[str] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2532 ) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2533 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2534 @param client: The client. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2535 @param namespace: The namespace of the OMEMO version to use. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2536 @param stanza: The stanza. Twomemo will encrypt the whole stanza using SCE, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2537 oldmemo will encrypt only the body. The stanza is modified by this call. |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2538 @param recipient_jid: The JID of the recipients. |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2539 Can be a bare (aka "userhost") JIDs but doesn't have to. |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2540 A single JID can be used. |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2541 @param is_muc_message: Whether the stanza is a message stanza to a MUC room. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2542 @param stanza_id: The id of this stanza. Especially relevant for message stanzas |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2543 to MUC rooms such that the outgoing plaintext can be cached for MUC message |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2544 reflection handling. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2545 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2546 @warning: The calling code MUST take care of adding the store message processing |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2547 hint to the stanza if applicable! This can be done before or after this call, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2548 the order doesn't matter. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2549 """ |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2550 if isinstance(recipient_jids, jid.JID): |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2551 recipient_jids = {recipient_jids} |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2552 if not recipient_jids: |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2553 raise exceptions.InternalError("At least one JID must be specified") |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2554 recipient_jid = next(iter(recipient_jids)) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2555 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2556 muc_plaintext_cache_key: Optional[MUCPlaintextCacheKey] = None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2557 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2558 recipient_bare_jids: Set[str] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2559 feedback_jid: jid.JID |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2560 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2561 if is_muc_message: |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2562 if len(recipient_jids) != 1: |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2563 raise exceptions.InternalError( |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2564 'Only one JID can be set when "is_muc_message" is set' |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2565 ) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2566 if self.__xep_0045 is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2567 raise exceptions.InternalError( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2568 "Encryption of MUC message requested, but plugin XEP-0045 is not" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2569 " available." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2570 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2571 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2572 if stanza_id is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2573 raise exceptions.InternalError( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2574 "Encryption of MUC message requested, but stanza id not available." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2575 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2576 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2577 room_jid = feedback_jid = recipient_jid.userhostJID() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2578 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2579 recipient_bare_jids = self.__get_joined_muc_users( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2580 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2581 self.__xep_0045, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2582 room_jid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2583 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2584 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2585 muc_plaintext_cache_key = MUCPlaintextCacheKey( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2586 client=client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2587 room_jid=room_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2588 message_uid=stanza_id |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2589 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2590 else: |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2591 recipient_bare_jids = {r.userhost() for r in recipient_jids} |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2592 feedback_jid = recipient_jid.userhostJID() |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2593 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2594 log.debug( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2595 f"Intercepting message that is to be encrypted by {namespace} for" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2596 f" {recipient_bare_jids}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2597 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2598 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2599 def prepare_stanza() -> Optional[bytes]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2600 """Prepares the stanza for encryption. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2601 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2602 Does so by removing all parts that are not supposed to be sent in plain. Also |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2603 extracts/prepares the plaintext to encrypt. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2604 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2605 @return: The plaintext to encrypt. Returns ``None`` in case body-only |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2606 encryption is requested and no body was found. The function should |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2607 gracefully return in that case, i.e. it's not a critical error that should |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2608 abort the message sending flow. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2609 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2610 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2611 if namespace == twomemo.twomemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2612 return self.__xep_0420.pack_stanza( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2613 OMEMO.SCE_PROFILE_GROUPCHAT if is_muc_message else OMEMO.SCE_PROFILE, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2614 stanza |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2615 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2616 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2617 if namespace == oldmemo.oldmemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2618 plaintext: Optional[bytes] = None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2619 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2620 for child in stanza.elements(): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2621 if child.name == "body" and plaintext is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2622 plaintext = str(child).encode("utf-8") |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2623 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2624 # Any other sensitive elements to remove here? |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2625 if child.name in { "body", "html" }: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2626 stanza.children.remove(child) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2627 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2628 if plaintext is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2629 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2630 "No body found in intercepted message to be encrypted with" |
4231
e11b13418ba6
plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents:
4219
diff
changeset
|
2631 f" oldmemo. [{client.profile}]" |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2632 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2633 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2634 return plaintext |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2635 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2636 return assert_never(namespace) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2637 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2638 # The stanza/plaintext preparation was moved into its own little function for type |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2639 # safety reasons. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2640 plaintext = prepare_stanza() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2641 if plaintext is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2642 return |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2643 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2644 log.debug(f"Plaintext to encrypt: {plaintext}") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2645 |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
2646 session_manager = await self.get_session_manager(client.profile) |
4219
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2647 await self.download_missing_device_lists(client, namespace, recipient_jids, session_manager) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2648 |
3214
8d92d4d829fb
plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents:
3172
diff
changeset
|
2649 try: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2650 messages, encryption_errors = await session_manager.encrypt( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2651 frozenset(recipient_bare_jids), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2652 { namespace: plaintext }, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2653 backend_priority_order=[ namespace ], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2654 identifier=feedback_jid.userhost() |
3214
8d92d4d829fb
plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents:
3172
diff
changeset
|
2655 ) |
8d92d4d829fb
plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents:
3172
diff
changeset
|
2656 except Exception as e: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2657 msg = _( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2658 # pylint: disable=consider-using-f-string |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2659 "Can't encrypt message for {entities}: {reason}".format( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2660 entities=', '.join(recipient_bare_jids), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2661 reason=e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2662 ) |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
2663 ) |
2859
4e875d9eea48
plugin XEP-0384: give feedback to client when encryption failed
Goffi <goffi@goffi.org>
parents:
2858
diff
changeset
|
2664 log.warning(msg) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2665 client.feedback(feedback_jid, msg, { |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2666 C.MESS_EXTRA_INFO: C.EXTRA_INFO_ENCR_ERR |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2667 }) |
2858
31a5038cdf79
plugin XEP-0384: small refactoring to encrypt messages + bugfix:
Goffi <goffi@goffi.org>
parents:
2857
diff
changeset
|
2668 raise e |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
2669 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2670 if len(encryption_errors) > 0: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2671 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2672 f"Ignored the following non-critical encryption errors:" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2673 f" {encryption_errors}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2674 ) |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
2675 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2676 encrypted_errors_stringified = ", ".join([ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2677 f"device {err.device_id} of {err.bare_jid} under namespace" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2678 f" {err.namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2679 for err |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2680 in encryption_errors |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2681 ]) |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
2682 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2683 client.feedback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2684 feedback_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2685 D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2686 "There were non-critical errors during encryption resulting in some" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2687 " of your destinees' devices potentially not receiving the message." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2688 " This happens when the encryption data/key material of a device is" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2689 " incomplete or broken, which shouldn't happen for actively used" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2690 " devices, and can usually be ignored. The following devices are" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2691 f" affected: {encrypted_errors_stringified}." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2692 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2693 ) |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
2694 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2695 message = next(message for message in messages if message.namespace == namespace) |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
2696 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2697 if namespace == twomemo.twomemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2698 # Add the encrypted element |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2699 stanza.addChild(xml_tools.et_elt_2_domish_elt( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2700 twomemo.etree.serialize_message(message) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2701 )) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2702 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2703 if namespace == oldmemo.oldmemo.NAMESPACE: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2704 # Add the encrypted element |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2705 stanza.addChild(xml_tools.et_elt_2_domish_elt( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2706 oldmemo.etree.serialize_message(message) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2707 )) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2708 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2709 if muc_plaintext_cache_key is not None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2710 self.__muc_plaintext_cache[muc_plaintext_cache_key] = plaintext |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
2711 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2712 async def __on_device_list_update( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2713 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2714 items_event: pubsub.ItemsEvent, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2715 profile: str |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2716 ) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2717 """Handle device list updates fired by PEP. |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2718 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2719 @param items_event: The event. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2720 @param profile: The profile this event belongs to. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2721 """ |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
2722 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2723 sender = cast(jid.JID, items_event.sender) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2724 items = cast(List[domish.Element], items_event.items) |
4219
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2725 client = self.host.get_client(profile) |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2726 await self._update_device_list(client, sender, items) |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2727 |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2728 async def _update_device_list( |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2729 self, |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2730 client: SatXMPPEntity, |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2731 sender: jid.JID, |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2732 items: list[domish.Element] |
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2733 ) -> None: |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2734 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2735 if len(items) > 1: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2736 log.warning("Ignoring device list update with more than one element.") |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2737 return |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2738 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2739 item = next(iter(items), None) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2740 if item is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2741 log.debug("Ignoring empty device list update.") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2742 return |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2743 |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
2744 item_elt = xml_tools.domish_elt_2_et_elt(item) |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
2745 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2746 device_list: Dict[int, Optional[str]] = {} |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2747 namespace: Optional[str] = None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2748 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2749 list_elt = item_elt.find(f"{{{twomemo.twomemo.NAMESPACE}}}devices") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2750 if list_elt is not None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2751 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2752 device_list = twomemo.etree.parse_device_list(list_elt) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2753 except XMLSchemaValidationError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2754 pass |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
2755 else: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2756 namespace = twomemo.twomemo.NAMESPACE |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2757 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2758 list_elt = item_elt.find(f"{{{oldmemo.oldmemo.NAMESPACE}}}list") |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2759 if list_elt is not None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2760 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2761 device_list = oldmemo.etree.parse_device_list(list_elt) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2762 except XMLSchemaValidationError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2763 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2764 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2765 namespace = oldmemo.oldmemo.NAMESPACE |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
2766 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2767 if namespace is None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2768 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2769 f"Malformed device list update item:" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2770 f" {ET.tostring(item_elt, encoding='unicode')}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2771 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2772 return |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2773 |
4219
1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
Goffi <goffi@goffi.org>
parents:
4218
diff
changeset
|
2774 session_manager = await self.get_session_manager(client.profile) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2775 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2776 await session_manager.update_device_list( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2777 namespace, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2778 sender.userhost(), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2779 device_list |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2780 ) |