Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_xep_0384.py @ 4095:684ba556a617
core (memory/sqla_mapping): fix legacy pickled values:
folloing packages refactoring, legacy pickled values could not be unpickled (due to use of
old classes). This temporary workaround fix it, but the right thing to do will be to move
from pickle to JSON at some point.
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 12 Jun 2023 14:57:27 +0200 |
parents | 7c5654c54fed |
children | 26534d959d2d |
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 \ |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
25 Any, Dict, FrozenSet, 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 |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
100 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
101 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
|
102 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
103 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
|
104 """ |
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
|
105 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
106 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
|
107 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
|
108 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
109 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
110 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
|
111 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
|
112 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
|
113 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
|
114 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
115 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
116 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
|
117 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
|
118 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
|
119 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
|
120 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
121 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
122 # 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
|
123 # 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
|
124 |
e7bfbded652a
plugin XEP-0384, install: adapted plugin to omemo module changes + added omemo module to dependencies:
Goffi <goffi@goffi.org>
parents:
2648
diff
changeset
|
125 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
126 class MUCPlaintextCacheKey(NamedTuple): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
127 # 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
|
128 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
129 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
|
130 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
131 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
132 client: SatXMPPClient |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
133 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
|
134 message_uid: str |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
135 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
136 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
137 @enum.unique |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
138 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
|
139 """ |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
140 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
|
141 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
142 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
143 TRUSTED: str = "TRUSTED" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
144 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
|
145 UNDECIDED: str = "UNDECIDED" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
146 DISTRUSTED: str = "DISTRUSTED" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
147 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
148 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
149 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
|
150 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
|
151 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
152 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
153 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
|
154 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
155 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
|
156 """ |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
157 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
158 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
|
159 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
160 @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
|
161 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
162 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
163 # 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
|
164 # 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
|
165 super().__init__() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
166 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
167 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
|
168 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
169 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
|
170 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
171 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
|
172 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
173 return omemo.Nothing() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
174 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
|
175 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
|
176 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
177 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
|
178 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
179 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
|
180 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
|
181 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
|
182 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
183 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
|
184 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
185 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
|
186 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
187 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
188 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
|
189 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
|
190 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
191 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
192 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
|
193 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
194 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
|
195 """ |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
196 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
197 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
|
198 KEY_STATE = "STATE" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
199 KEY_SESSION = "SESSION" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
200 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
|
201 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
|
202 KEY_TRUST = "TRUST" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
203 KEY_ALL_JIDS = "ALL_JIDS" |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
204 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
205 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
|
206 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
207 @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
|
208 @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
|
209 """ |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
210 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
211 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
|
212 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
|
213 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
214 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
|
215 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
|
216 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
|
217 return None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
218 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
219 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
|
220 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
|
221 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
|
222 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
223 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
224 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
|
225 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
226 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
|
227 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
228 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
229 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
230 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
|
231 return cast( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
232 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 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
|
234 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
235 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
236 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
|
237 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
238 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
|
239 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
240 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
241 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
242 async def loadSession( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
243 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
244 bare_jid: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
245 device_id: int |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
246 ) -> 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
|
247 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
|
248 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
249 return cast( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
250 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
|
251 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
|
252 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
253 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
254 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
|
255 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
|
256 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
257 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
258 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
|
259 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
260 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
261 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
262 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
|
263 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
|
264 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
265 return cast( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
266 Optional[List[int]], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
267 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
|
268 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
269 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
270 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
|
271 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
|
272 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
273 return cast( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
274 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
|
275 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
|
276 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
277 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
278 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
|
279 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
|
280 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
281 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
282 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
|
283 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
284 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
285 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
286 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
|
287 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
|
288 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
289 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
290 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
|
291 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
292 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
293 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
294 async def loadTrust( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
295 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
296 bare_jid: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
297 device_id: int |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
298 ) -> 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
|
299 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
|
300 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
301 return cast( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
302 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
|
303 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
|
304 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
305 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
306 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
|
307 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
|
308 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
309 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
310 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
|
311 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
312 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
313 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
314 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
|
315 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
|
316 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
317 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
|
318 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
319 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
|
320 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
321 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
|
322 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
323 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
324 |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
325 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
326 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
|
327 client: SatXMPPClient, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
328 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
|
329 bare_jid: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
330 device_id: int |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
331 ) -> oldmemo.oldmemo.BundleImpl: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
332 """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
|
333 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
334 @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
|
335 @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
|
336 @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
|
337 @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
|
338 @return: The bundle. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
339 @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
|
340 instead. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
341 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
342 # 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
|
343 # 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
|
344 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
345 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
|
346 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
|
347 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
348 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
349 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
|
350 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
|
351 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
352 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
|
353 f" {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
354 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
355 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
356 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
|
357 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
358 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
|
359 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
|
360 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
361 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
362 element = \ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
363 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
|
364 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
|
365 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
366 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
|
367 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
|
368 ) |
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
369 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
370 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
371 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
|
372 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
|
373 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
374 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
|
375 f" {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
376 ) from e |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
377 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
378 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
379 # 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
|
380 # 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
|
381 # 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
|
382 NS_TM: Final = "urn:xmpp:tm:1" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
383 NS_ATM: Final = "urn:xmpp:atm:1" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
384 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
385 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
386 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
|
387 <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
|
388 targetNamespace='urn:xmpp:tm:1' |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
389 xmlns='urn:xmpp:tm:1' |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
390 elementFormDefault='qualified'> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
391 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
392 <xs:element name='trust-message'> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
393 <xs:complexType> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
394 <xs:sequence> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
395 <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
|
396 </xs:sequence> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
397 <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
|
398 <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
|
399 </xs:complexType> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
400 </xs:element> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
401 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
402 <xs:element name='key-owner'> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
403 <xs:complexType> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
404 <xs:sequence> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
405 <xs:element |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
406 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
|
407 <xs:element |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
408 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
|
409 </xs:sequence> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
410 <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
|
411 </xs:complexType> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
412 </xs:element> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
413 </xs:schema> |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
414 """) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
415 |
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 # 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
|
418 TM_SCE_PROFILE = SCEProfile( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
419 rpad_policy=SCEAffixPolicy.REQUIRED, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
420 time_policy=SCEAffixPolicy.REQUIRED, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
421 to_policy=SCEAffixPolicy.OPTIONAL, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
422 from_policy=SCEAffixPolicy.OPTIONAL, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
423 custom_policies={} |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
424 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
425 |
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 class TrustUpdate(NamedTuple): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
428 # pylint: disable=invalid-name |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
429 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
430 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
|
431 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
432 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
433 target_jid: jid.JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
434 target_key: bytes |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
435 target_trust: bool |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
436 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
437 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
438 class TrustMessageCacheEntry(NamedTuple): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
439 # pylint: disable=invalid-name |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
440 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
441 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
|
442 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
443 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
444 sender_jid: jid.JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
445 sender_key: bytes |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
446 timestamp: datetime |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
447 trust_update: TrustUpdate |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
448 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
449 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
450 class PartialTrustMessage(NamedTuple): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
451 # pylint: disable=invalid-name |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
452 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
453 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
|
454 to build trust messages. |
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 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
457 recipient_jid: jid.JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
458 updated_jid: jid.JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
459 trust_updates: FrozenSet[TrustUpdate] |
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 async def manage_trust_message_cache( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
463 client: SatXMPPClient, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
464 session_manager: omemo.SessionManager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
465 applied_trust_updates: FrozenSet[TrustUpdate] |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
466 ) -> None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
467 """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
|
468 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
469 @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
|
470 @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
|
471 @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
|
472 triggering this cache management run. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
473 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
474 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
475 trust_message_cache = persistent.LazyPersistentBinaryDict( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
476 "XEP-0384/TM", |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
477 client.profile |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
478 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
479 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
480 # Load cache entries |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
481 cache_entries = cast( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
482 Set[TrustMessageCacheEntry], |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
483 await trust_message_cache.get("cache", set()) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
484 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
485 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
486 # 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
|
487 cache_entries_by_target = { |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
488 ( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
489 cache_entry.trust_update.target_jid.userhostJID(), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
490 cache_entry.trust_update.target_key |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
491 ): cache_entry |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
492 for cache_entry |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
493 in cache_entries |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
494 } |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
495 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
496 for trust_update in applied_trust_updates: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
497 cache_entry = cache_entries_by_target.get( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
498 (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
|
499 None |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
500 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
501 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
502 if cache_entry is not None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
503 cache_entries.remove(cache_entry) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
504 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
505 # 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
|
506 new_trust_updates: Set[TrustUpdate] = set() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
507 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
508 for trust_update in applied_trust_updates: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
509 if trust_update.target_trust: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
510 # 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
|
511 for cache_entry in set(cache_entries): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
512 if ( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
513 cache_entry.sender_jid.userhostJID() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
514 == trust_update.target_jid.userhostJID() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
515 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
|
516 ): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
517 trust_level = ( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
518 TrustLevel.TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
519 if cache_entry.trust_update.target_trust |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
520 else TrustLevel.DISTRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
521 ) |
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 # Apply the trust update |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
524 await session_manager.set_trust( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
525 cache_entry.trust_update.target_jid.userhost(), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
526 cache_entry.trust_update.target_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
527 trust_level.name |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
528 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
529 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
530 # 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
|
531 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
|
532 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
533 # Remove the corresponding cache entry |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
534 cache_entries.remove(cache_entry) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
535 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
536 # Store the updated cache entries |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
537 await trust_message_cache.force("cache", cache_entries) |
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 # 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
|
540 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
541 if len(new_trust_updates) > 0: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
542 # 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
|
543 # management |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
544 await manage_trust_message_cache( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
545 client, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
546 session_manager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
547 frozenset(new_trust_updates) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
548 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
549 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
550 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
551 async def get_trust_as_trust_updates( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
552 session_manager: omemo.SessionManager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
553 target_jid: jid.JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
554 ) -> FrozenSet[TrustUpdate]: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
555 """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
|
556 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
557 @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
|
558 @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
|
559 @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
|
560 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
|
561 the trust updates. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
562 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
563 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
564 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
|
565 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
566 trust_updates: Set[TrustUpdate] = set() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
567 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
568 for device in devices: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
569 trust_level = TrustLevel(device.trust_level_name) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
570 target_trust: bool |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
571 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
572 if trust_level is TrustLevel.TRUSTED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
573 target_trust = True |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
574 elif trust_level is TrustLevel.DISTRUSTED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
575 target_trust = False |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
576 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
577 # 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
|
578 continue |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
579 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
580 trust_updates.add(TrustUpdate( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
581 target_jid=target_jid.userhostJID(), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
582 target_key=device.identity_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
583 target_trust=target_trust |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
584 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
585 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
586 return frozenset(trust_updates) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
587 |
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 async def send_trust_messages( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
590 client: SatXMPPClient, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
591 session_manager: omemo.SessionManager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
592 applied_trust_updates: FrozenSet[TrustUpdate] |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
593 ) -> None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
594 """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
|
595 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
596 @param client: The client. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
597 @param session_manager: The session manager. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
598 @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
|
599 notify other peers about. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
600 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
601 # 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
|
602 # 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
|
603 # 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
|
604 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
605 # 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
|
606 own_jid = client.jid.userhostJID() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
607 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
|
608 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
609 # 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
|
610 updated_jids = frozenset({ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
611 trust_update.target_jid.userhostJID() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
612 for trust_update |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
613 in applied_trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
614 }) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
615 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
616 trust_messages: Set[PartialTrustMessage] = set() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
617 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
618 for updated_jid in updated_jids: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
619 # Get the trust updates for that JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
620 trust_updates = frozenset({ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
621 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
|
622 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
|
623 }) |
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 if updated_jid == own_jid: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
626 # 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
|
627 # 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
|
628 # 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
|
629 # python-omemo. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
630 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
|
631 peer_jids = frozenset({ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
632 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
|
633 f"/{OMEMO.NS_TWOMEMO}/bare_jids", |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
634 str |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
635 )).maybe([]) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
636 }) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
637 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
638 if len(peer_jids) == 0: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
639 # 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
|
640 # changes directly |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
641 trust_messages.add(PartialTrustMessage( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
642 recipient_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
643 updated_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
644 trust_updates=trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
645 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
646 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
647 # 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
|
648 # handle the copy to our own JID |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
649 for peer_jid in peer_jids: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
650 trust_messages.add(PartialTrustMessage( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
651 recipient_jid=peer_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
652 updated_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
653 trust_updates=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 # 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
|
657 # trusted devices |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
658 peer_trust_updates = \ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
659 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
|
660 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
661 trust_messages.add(PartialTrustMessage( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
662 recipient_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
663 updated_jid=peer_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
664 trust_updates=peer_trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
665 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
666 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
667 # 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
|
668 trust_messages.add(PartialTrustMessage( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
669 recipient_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
670 updated_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
671 trust_updates=own_trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
672 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
673 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
674 # 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
|
675 trust_messages.add(PartialTrustMessage( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
676 recipient_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
677 updated_jid=updated_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
678 trust_updates=trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
679 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
680 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
681 # 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
|
682 trust_messages.add(PartialTrustMessage( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
683 recipient_jid=updated_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
684 updated_jid=own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
685 trust_updates=own_trust_updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
686 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
687 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
688 # 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
|
689 # recipient. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
690 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
|
691 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
692 for recipient_jid in recipient_jids: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
693 updated: Dict[jid.JID, Set[TrustUpdate]] = {} |
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 for trust_message in trust_messages: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
696 # Merge trust messages directed at that recipient |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
697 if trust_message.recipient_jid == recipient_jid: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
698 # Merge the trust updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
699 updated[trust_message.updated_jid] = \ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
700 updated.get(trust_message.updated_jid, set()) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
701 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
702 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
|
703 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
704 # Build the trust message |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
705 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
|
706 trust_message_elt["usage"] = NS_ATM |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
707 trust_message_elt["encryption"] = twomemo.twomemo.NAMESPACE |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
708 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
709 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
|
710 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
|
711 key_owner_elt["jid"] = updated_jid.userhost() |
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 for trust_update in trust_updates: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
714 serialized_identity_key = \ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
715 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
|
716 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
717 if trust_update.target_trust: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
718 key_owner_elt.addElement( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
719 (NS_TM, "trust"), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
720 content=serialized_identity_key |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
721 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
722 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
723 key_owner_elt.addElement( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
724 (NS_TM, "distrust"), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
725 content=serialized_identity_key |
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 # 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
|
729 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
|
730 "from": own_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
731 "to": recipient_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
732 "uid": str(uuid.uuid4()), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
733 "message": {}, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
734 "subject": {}, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
735 "type": C.MESS_TYPE_CHAT, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
736 "extra": {}, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
737 "timestamp": time.time() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
738 })) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
739 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
740 message_data["xml"].addChild(trust_message_elt) |
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 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
|
743 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
744 feedback_jid = recipient_jid |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
745 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
746 # TODO: The following is mostly duplicate code |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
747 try: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
748 messages, encryption_errors = await session_manager.encrypt( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
749 frozenset({ own_jid.userhost(), recipient_jid.userhost() }), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
750 { OMEMO.NS_TWOMEMO: plaintext }, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
751 backend_priority_order=[ OMEMO.NS_TWOMEMO ], |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
752 identifier=feedback_jid.userhost() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
753 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
754 except Exception as e: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
755 msg = _( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
756 # pylint: disable=consider-using-f-string |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
757 "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
|
758 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
|
759 reason=e |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
760 ) |
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 log.warning(msg) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
763 client.feedback(feedback_jid, msg, { |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
764 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
|
765 }) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
766 raise e |
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 if len(encryption_errors) > 0: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
769 log.warning( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
770 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
|
771 f" {encryption_errors}" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
772 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
773 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
774 encrypted_errors_stringified = ", ".join([ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
775 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
|
776 f" {err.namespace}" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
777 for err |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
778 in encryption_errors |
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 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
781 client.feedback( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
782 feedback_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
783 D_( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
784 "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
|
785 " 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
|
786 " 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
|
787 " 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
|
788 " 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
|
789 f" affected: {encrypted_errors_stringified}." |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
790 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
791 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
792 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
793 message = next( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
794 message for message in messages |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
795 if message.namespace == OMEMO.NS_TWOMEMO |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
796 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
797 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
798 # Add the encrypted element |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
799 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
|
800 twomemo.etree.serialize_message(message) |
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 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
803 await client.a_send(message_data["xml"]) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
804 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
805 |
4072
040095a5dc7f
refactoring: rename `SAT` class to `LiberviaBackend`
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
806 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
|
807 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
808 @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
|
809 @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
|
810 @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
|
811 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
|
812 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
813 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
814 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
|
815 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
|
816 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
817 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
|
818 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
819 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
|
820 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
|
821 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
822 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
823 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
824 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
|
825 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
|
826 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
|
827 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
828 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
|
829 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
830 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
|
831 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
832 client.jid.userhostJID(), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
833 node, |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
834 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
|
835 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
|
836 extra={ |
3933
cecf45416403
plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents:
3929
diff
changeset
|
837 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
|
838 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
|
839 }, |
3933
cecf45416403
plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents:
3929
diff
changeset
|
840 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
|
841 } |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
842 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
843 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
|
844 if ( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
845 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
|
846 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
|
847 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
|
848 # 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
|
849 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
|
850 ): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
851 # 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
|
852 # 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
|
853 raise omemo.BundleUploadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
854 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
|
855 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
856 # 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
|
857 # 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
|
858 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
859 raise omemo.BundleUploadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
860 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
|
861 ) from e |
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 return |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
864 |
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, oldmemo.oldmemo.BundleImpl): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
866 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
|
867 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
868 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
|
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=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
|
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: { 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
|
878 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
|
879 } |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
880 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
881 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
|
882 raise omemo.BundleUploadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
883 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
|
884 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
885 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
886 return |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
887 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
888 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
|
889 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
890 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
891 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
|
892 namespace: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
893 bare_jid: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
894 device_id: int |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
895 ) -> omemo.Bundle: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
896 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
|
897 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
|
898 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
899 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
900 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
|
901 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
902 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
|
903 node, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
904 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
|
905 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
906 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
|
907 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
908 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
|
909 f" namespace {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
910 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
911 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
912 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
|
913 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
914 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
|
915 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
|
916 f" {len(items)}." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
917 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
918 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
919 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
|
920 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
|
921 None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
922 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
923 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
|
924 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
925 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
|
926 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
|
927 f" failed: {element}." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
928 ) |
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 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
931 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
|
932 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
|
933 raise omemo.BundleDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
934 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
|
935 f" namespace {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
936 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
937 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
938 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
|
939 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
|
940 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
941 xep_0060, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
942 bare_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
943 device_id |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
944 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
945 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
946 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
|
947 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
948 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
949 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
|
950 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
|
951 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
|
952 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
953 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
954 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
|
955 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
956 client.jid.userhostJID(), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
957 node, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
958 [ str(device_id) ], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
959 notify=False |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
960 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
961 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
|
962 raise omemo.BundleDeletionFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
963 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
|
964 f" {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
965 ) from e |
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 return |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
968 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
969 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
|
970 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
|
971 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
972 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
973 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
|
974 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
|
975 raise omemo.BundleDeletionFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
976 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
|
977 f" {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
978 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
979 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
980 return |
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 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
|
983 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
984 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
985 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
|
986 namespace: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
987 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
|
988 ) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
989 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
|
990 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
|
991 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
992 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
|
993 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
|
994 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
|
995 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
|
996 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
|
997 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
|
998 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
999 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
|
1000 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
|
1001 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1002 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1003 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
|
1004 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1005 client.jid.userhostJID(), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1006 node, |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
1007 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
|
1008 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
|
1009 extra={ |
3933
cecf45416403
plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents:
3929
diff
changeset
|
1010 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
|
1011 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
|
1012 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
|
1013 }, |
3933
cecf45416403
plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents:
3929
diff
changeset
|
1014 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
|
1015 } |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1016 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1017 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
|
1018 if ( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1019 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
|
1020 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
|
1021 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
|
1022 # 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
|
1023 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
|
1024 ): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1025 # 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
|
1026 # 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
|
1027 raise omemo.DeviceListUploadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1028 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
|
1029 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1030 # 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
|
1031 # in the XEP. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1032 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1033 raise omemo.DeviceListUploadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1034 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
|
1035 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1036 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1037 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1038 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
|
1039 namespace: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1040 bare_jid: str |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1041 ) -> 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
|
1042 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
|
1043 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1044 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
|
1045 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
|
1046 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
|
1047 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
|
1048 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1049 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
|
1050 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
|
1051 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1052 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1053 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
|
1054 except exceptions.NotFound: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1055 return {} |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1056 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
|
1057 raise omemo.DeviceListDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1058 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
|
1059 f" {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1060 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1061 |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
1062 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
|
1063 return {} |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1064 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1065 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
|
1066 raise omemo.DeviceListDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1067 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
|
1068 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
|
1069 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1070 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1071 element = next( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1072 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
|
1073 None |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1074 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1075 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1076 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
|
1077 raise omemo.DeviceListDownloadFailed( |
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 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
|
1079 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
|
1080 f" {element}." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1081 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1082 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1083 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1084 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
|
1085 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
|
1086 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
|
1087 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
|
1088 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
|
1089 raise omemo.DeviceListDownloadFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1090 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
|
1091 f" {namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1092 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1093 |
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 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1096 async def _evaluate_custom_trust_level( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1097 self, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1098 device: omemo.DeviceInformation |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1099 ) -> omemo.TrustLevel: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1100 # 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
|
1101 try: |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1102 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
|
1103 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
|
1104 raise omemo.UnknownTrustLevel( |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1105 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
|
1106 ) from e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1107 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1108 # 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
|
1109 if trust_level is TrustLevel.TRUSTED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1110 return omemo.TrustLevel.TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1111 if trust_level is TrustLevel.UNDECIDED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1112 return omemo.TrustLevel.UNDECIDED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1113 if trust_level is TrustLevel.DISTRUSTED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1114 return omemo.TrustLevel.DISTRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1115 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1116 # 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
|
1117 # on the trust system and phase |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1118 if trust_level is TrustLevel.BLINDLY_TRUSTED: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1119 # 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
|
1120 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
|
1121 PARAM_NAME, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1122 PARAM_CATEGORY, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1123 profile_key=profile |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1124 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1125 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1126 # 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
|
1127 if trust_system == "btbv": |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1128 return omemo.TrustLevel.TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1129 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1130 # 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
|
1131 # and counts as undecided |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1132 if trust_system == "atm": |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1133 # 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
|
1134 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
|
1135 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1136 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
|
1137 TrustLevel.UNDECIDED, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1138 TrustLevel.BLINDLY_TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1139 } for device in devices) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1140 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1141 if phase_one: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1142 return omemo.TrustLevel.TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1143 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1144 return omemo.TrustLevel.UNDECIDED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1145 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1146 raise exceptions.InternalError( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1147 f"Unknown trust system active: {trust_system}" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1148 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1149 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1150 assert_never(trust_level) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1151 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1152 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
|
1153 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1154 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
|
1155 identifier: Optional[str] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1156 ) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1157 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
|
1158 raise omemo.TrustDecisionFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1159 "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
|
1160 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1161 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1162 # 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
|
1163 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
|
1164 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1165 # 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
|
1166 # 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
|
1167 # 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
|
1168 # 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
|
1169 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
|
1170 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1171 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
|
1172 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
|
1173 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1174 # 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
|
1175 for bare_jid in bare_jids: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1176 # 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
|
1177 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
|
1178 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1179 # 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
|
1180 # 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
|
1181 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
|
1182 TrustLevel.UNDECIDED, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1183 TrustLevel.BLINDLY_TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1184 } for device in devices): |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1185 blind_trust_bare_jids.add(bare_jid) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1186 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1187 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
|
1188 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1189 # 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
|
1190 # be categorized too |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1191 blindly_trusted_devices = \ |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1192 { 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
|
1193 manually_trusted_devices = \ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1194 { 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
|
1195 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1196 # 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
|
1197 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
|
1198 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
|
1199 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
|
1200 device.bare_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1201 device.identity_key, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1202 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
|
1203 ) |
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 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
|
1206 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
|
1207 f" {device.namespaces}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1208 for device |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1209 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
|
1210 ]) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1211 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1212 client.feedback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1213 feedback_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1214 D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1215 "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
|
1216 " blindly trusted.\nFollowing devices have been automatically" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1217 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
|
1218 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1219 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1220 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1221 # 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
|
1222 # trust |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1223 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
|
1224 client.feedback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1225 feedback_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1226 D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1227 "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
|
1228 " 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
|
1229 " 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
|
1230 " send this message." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1231 ) |
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 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
|
1234 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
|
1235 feedback_jid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1236 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1237 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1238 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1239 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
|
1240 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
|
1241 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1242 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
|
1243 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
|
1244 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
|
1245 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
|
1246 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1247 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
|
1248 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
|
1249 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1250 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
|
1251 "from": client.jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1252 "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
|
1253 "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
|
1254 "message": {}, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1255 "subject": {}, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1256 "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
|
1257 "extra": {}, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1258 "timestamp": time.time() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1259 })) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1260 |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
1261 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
|
1262 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1263 try: |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
1264 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
|
1265 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
|
1266 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
|
1267 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1268 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
|
1269 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1270 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
|
1271 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
|
1272 ) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1273 """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
|
1274 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1275 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
|
1276 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
|
1277 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1278 @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
|
1279 @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
|
1280 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
|
1281 @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
|
1282 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1283 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1284 # 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
|
1285 # 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
|
1286 # 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
|
1287 # 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
|
1288 # 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
|
1289 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
|
1290 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
|
1291 raise omemo.TrustDecisionFailed( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1292 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
|
1293 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1294 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1295 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
|
1296 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1297 # 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
|
1298 # 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
|
1299 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
|
1300 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
|
1301 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
|
1302 submit_id="" |
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 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
|
1305 "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
|
1306 "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
|
1307 "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
|
1308 "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
|
1309 "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
|
1310 "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
|
1311 "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
|
1312 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1313 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1314 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
|
1315 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1316 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
|
1317 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
|
1318 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
|
1319 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
|
1320 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
|
1321 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1322 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1323 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1324 # 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
|
1325 # completely random |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1326 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
|
1327 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1328 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
|
1329 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
|
1330 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
|
1331 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
|
1332 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
|
1333 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
|
1334 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
|
1335 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
|
1336 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
|
1337 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1338 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1339 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1340 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
|
1341 sat, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1342 trust_ui, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1343 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
|
1344 profile=profile |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1345 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1346 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1347 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
|
1348 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
|
1349 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1350 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
|
1351 trust_ui_result |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1352 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1353 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1354 trust_updates: Set[TrustUpdate] = set() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1355 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1356 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
|
1357 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
|
1358 continue |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1359 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1360 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
|
1361 target_trust = C.bool(value) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1362 trust_level = \ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1363 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
|
1364 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1365 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
|
1366 device.bare_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1367 device.identity_key, |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1368 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
|
1369 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1370 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1371 trust_updates.add(TrustUpdate( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1372 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
|
1373 target_key=device.identity_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1374 target_trust=target_trust |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1375 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1376 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1377 # 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
|
1378 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
|
1379 PARAM_NAME, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1380 PARAM_CATEGORY, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1381 profile_key=profile |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1382 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1383 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1384 if trust_system == "atm": |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1385 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
|
1386 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
|
1387 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1388 return SessionManagerImpl |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1389 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1390 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1391 async def prepare_for_profile( |
4072
040095a5dc7f
refactoring: rename `SAT` class to `LiberviaBackend`
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1392 sat: LiberviaBackend, |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1393 profile: str, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1394 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
|
1395 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
|
1396 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
|
1397 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
|
1398 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
|
1399 ) -> omemo.SessionManager: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1400 """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
|
1401 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1402 @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
|
1403 @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
|
1404 @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
|
1405 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
|
1406 @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
|
1407 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
|
1408 and one month. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1409 @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
|
1410 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
|
1411 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
|
1412 @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
|
1413 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
|
1414 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
|
1415 :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
|
1416 @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
|
1417 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
|
1418 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
|
1419 ``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
|
1420 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
|
1421 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
|
1422 @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
|
1423 ``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
|
1424 profile. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1425 @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
|
1426 :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
|
1427 @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
|
1428 :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
|
1429 @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
|
1430 :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
|
1431 @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
|
1432 :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
|
1433 @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
|
1434 :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
|
1435 """ |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1436 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1437 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
|
1438 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
|
1439 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1440 storage = StorageImpl(profile) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1441 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1442 # TODO: Untested |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1443 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
|
1444 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
|
1445 storage, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1446 # 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
|
1447 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
|
1448 TrustLevel.UNDECIDED.name, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1449 TrustLevel.DISTRUSTED.name, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1450 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
|
1451 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1452 xep_0060, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1453 bare_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1454 device_id |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1455 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1456 ) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1457 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1458 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
|
1459 [ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1460 twomemo.Twomemo( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1461 storage, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1462 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
|
1463 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
|
1464 ), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1465 oldmemo.Oldmemo( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1466 storage, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1467 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
|
1468 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
|
1469 ) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1470 ], |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1471 storage, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1472 client.jid.userhost(), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1473 initial_own_label, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1474 TrustLevel.UNDECIDED.value, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1475 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
|
1476 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
|
1477 omemo.AsyncFramework.TWISTED |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1478 ) |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1479 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1480 # 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
|
1481 # 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
|
1482 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
|
1483 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1484 # 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
|
1485 # 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
|
1486 # 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
|
1487 # 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
|
1488 # 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
|
1489 # 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
|
1490 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
|
1491 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1492 return session_manager |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1493 |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1494 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1495 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
|
1496 <params> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1497 <individual> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1498 <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
|
1499 <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
|
1500 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
|
1501 type="list" security="3"> |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1502 <option value="atm" |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1503 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
|
1504 <option value="btbv" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1505 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
|
1506 selected="true" /> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1507 </param> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1508 </category> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1509 </individual> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1510 </params> |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1511 """ |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1512 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1513 |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1514 class OMEMO: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1515 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1516 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
|
1517 ``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
|
1518 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
|
1519 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
|
1520 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
|
1521 """ |
3918
e63f96e60f7b
plugin XEP-0384: expose OLDMEMO and TWOMEMO namespaces:
Goffi <goffi@goffi.org>
parents:
3914
diff
changeset
|
1522 NS_TWOMEMO = twomemo.twomemo.NAMESPACE |
e63f96e60f7b
plugin XEP-0384: expose OLDMEMO and TWOMEMO namespaces:
Goffi <goffi@goffi.org>
parents:
3914
diff
changeset
|
1523 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
|
1524 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1525 # 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
|
1526 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
|
1527 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
|
1528 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
|
1529 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
|
1530 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
|
1531 custom_policies={} |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1532 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1533 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1534 # 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
|
1535 SCE_PROFILE = SCEProfile( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1536 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
|
1537 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
|
1538 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
|
1539 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
|
1540 custom_policies={} |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
1541 ) |
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
1542 |
4072
040095a5dc7f
refactoring: rename `SAT` class to `LiberviaBackend`
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1543 def __init__(self, sat: LiberviaBackend) -> None: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1544 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1545 @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
|
1546 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1547 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1548 self.__sat = sat |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1549 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1550 # 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
|
1551 # model |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1552 sat.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
|
1553 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1554 # Plugins |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1555 self.__xep_0045 = cast(Optional[XEP_0045], sat.plugins.get("XEP-0045")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1556 self.__xep_0334 = cast(XEP_0334, sat.plugins["XEP-0334"]) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1557 self.__xep_0359 = cast(Optional[XEP_0359], sat.plugins.get("XEP-0359")) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1558 self.__xep_0420 = cast(XEP_0420, sat.plugins["XEP-0420"]) |
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 # 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
|
1561 # 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
|
1562 # 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
|
1563 # 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
|
1564 # 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
|
1565 # 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
|
1566 # 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
|
1567 # 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
|
1568 # 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
|
1569 # 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
|
1570 # really necessary. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1571 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
|
1572 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1573 # 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
|
1574 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
|
1575 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1576 # 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
|
1577 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
|
1578 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1579 # 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
|
1580 # 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
|
1581 # added, the message_received trigger is also used for twomemo. |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1582 sat.trigger.add( |
4051
c23cad65ae99
core: renamed `messageReceived` trigger to `message_received`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1583 "message_received", |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1584 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
|
1585 priority=100050 |
3214
8d92d4d829fb
plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents:
3172
diff
changeset
|
1586 ) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1587 sat.trigger.add( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1588 "send_message_data", |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1589 self.__send_message_data_trigger, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1590 priority=100050 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1591 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1592 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1593 # These triggers are used by twomemo, which does do SCE |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1594 sat.trigger.add("send", self.__send_trigger, priority=0) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1595 # 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
|
1596 # including IQs. |
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 # Give twomemo a (slightly) higher priority than oldmemo |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1599 sat.register_encryption_plugin(self, "TWOMEMO", twomemo.twomemo.NAMESPACE, 101) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1600 sat.register_encryption_plugin(self, "OLDMEMO", oldmemo.oldmemo.NAMESPACE, 100) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1601 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1602 xep_0163 = cast(XEP_0163, sat.plugins["XEP-0163"]) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1603 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
|
1604 "TWOMEMO_DEVICES", |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1605 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
|
1606 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
|
1607 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
|
1608 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1609 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1610 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
|
1611 "OLDMEMO_DEVICES", |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1612 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
|
1613 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
|
1614 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
|
1615 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1616 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1617 |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1618 try: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1619 self.__text_commands = cast(TextCommands, sat.plugins[C.TEXT_CMDS]) |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1620 except KeyError: |
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1621 log.info(_("Text commands not available")) |
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1622 else: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1623 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
|
1624 |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1625 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
|
1626 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1627 client: SatXMPPClient |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1628 ) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1629 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1630 @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
|
1631 """ |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1632 |
4004
cd6f70015738
plugin XEP-0384: run `profileConnected` workflow in background:
Goffi <goffi@goffi.org>
parents:
3976
diff
changeset
|
1633 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
|
1634 cast(str, client.profile) |
4004
cd6f70015738
plugin XEP-0384: run `profileConnected` workflow in background:
Goffi <goffi@goffi.org>
parents:
3976
diff
changeset
|
1635 )) |
3911
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 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
|
1638 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1639 client: SatXMPPClient, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1640 mess_data: MessageData |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1641 ) -> Literal[False]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1642 """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
|
1643 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1644 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
|
1645 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
|
1646 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
|
1647 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1648 @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
|
1649 @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
|
1650 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
|
1651 @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
|
1652 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
|
1653 """ |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1654 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1655 twomemo_requested = \ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1656 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
|
1657 oldmemo_requested = \ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1658 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
|
1659 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1660 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
|
1661 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
|
1662 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1663 _("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
|
1664 mess_data |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1665 ) |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1666 return False |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1667 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1668 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
|
1669 |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
1670 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
|
1671 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
|
1672 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1673 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
|
1674 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
|
1675 await session_manager.replace_sessions(device) |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1676 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1677 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
|
1678 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1679 _("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
|
1680 mess_data |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1681 ) |
3218
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1682 |
806a7936a591
plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents:
3214
diff
changeset
|
1683 return False |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1684 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1685 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
|
1686 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1687 client: SatXMPPClient, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1688 entity: jid.JID |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1689 ) -> xml_tools.XMLUI: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1690 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1691 @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
|
1692 @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
|
1693 @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
|
1694 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
|
1695 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1696 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1697 if entity.resource: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1698 raise ValueError("A bare JID is expected.") |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
1699 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1700 bare_jids: Set[str] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1701 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
|
1702 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
|
1703 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1704 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
|
1705 |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
1706 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
|
1707 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1708 # 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
|
1709 # random |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1710 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
|
1711 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
|
1712 for bare_jid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1713 in bare_jids |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1714 ]), 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
|
1715 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1716 async def callback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1717 data: Any, |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1718 profile: str |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1719 ) -> Dict[Never, Never]: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1720 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1721 @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
|
1722 @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
|
1723 @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
|
1724 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
|
1725 """ |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1726 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1727 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
|
1728 return {} |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1729 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1730 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
|
1731 Dict[str, str], |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1732 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
|
1733 ) |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1734 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1735 trust_updates: Set[TrustUpdate] = set() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1736 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1737 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
|
1738 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
|
1739 continue |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
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 device = devices[int(key[len("trust_"):])] |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1742 trust_level_name = value |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1743 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1744 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
|
1745 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
|
1746 device.bare_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1747 device.identity_key, |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1748 trust_level_name |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1749 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1750 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1751 target_trust: Optional[bool] = None |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1752 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1753 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
|
1754 target_trust = True |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1755 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
|
1756 target_trust = False |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1757 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1758 if target_trust is not None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1759 trust_updates.add(TrustUpdate( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1760 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
|
1761 target_key=device.identity_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1762 target_trust=target_trust |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1763 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1764 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1765 # 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
|
1766 trust_system = cast(str, self.__sat.memory.param_get_a( |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1767 PARAM_NAME, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1768 PARAM_CATEGORY, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1769 profile_key=profile |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1770 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1771 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1772 if trust_system == "atm": |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1773 if len(trust_updates) > 0: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1774 await manage_trust_message_cache( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1775 client, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1776 session_manager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1777 frozenset(trust_updates) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1778 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1779 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1780 await send_trust_messages( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1781 client, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1782 session_manager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1783 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
|
1784 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1785 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1786 return {} |
2744
e6716d90c2fe
plugin XEP-0384: various bug fixes:
Goffi <goffi@goffi.org>
parents:
2738
diff
changeset
|
1787 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1788 submit_id = self.__sat.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
|
1789 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1790 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
|
1791 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
|
1792 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
|
1793 submit_id=submit_id |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1794 ) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1795 # 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
|
1796 # 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
|
1797 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
|
1798 trust_ui.addText(D_( |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1799 "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
|
1800 " 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
|
1801 " 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
|
1802 " 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
|
1803 " 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
|
1804 " 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
|
1805 " 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
|
1806 " 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
|
1807 " trust." |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1808 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1809 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1810 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
|
1811 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1812 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
|
1813 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
|
1814 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
|
1815 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
|
1816 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
|
1817 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
|
1818 ))) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1819 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1820 trust_ui.addEmpty() |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
1821 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1822 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
|
1823 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
|
1824 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
|
1825 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
|
1826 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
|
1827 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
|
1828 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
|
1829 device.identity_key |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1830 ))) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1831 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
|
1832 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1833 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
|
1834 avaiable_trust_levels = \ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1835 { TrustLevel.DISTRUSTED, TrustLevel.TRUSTED, current_trust_level } |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
1836 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1837 trust_ui.addList( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1838 f"trust_{index}", |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1839 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
|
1840 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
|
1841 styles=[ "inline" ] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1842 ) |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1843 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1844 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
|
1845 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
|
1846 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1847 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
|
1848 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
|
1849 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1850 trust_ui.addLabel(D_("(inactive for Twomemo)")) |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
1851 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1852 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
|
1853 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
|
1854 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1855 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
|
1856 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
|
1857 trust_ui.addEmpty() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1858 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
|
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() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1862 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1863 return result |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1864 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1865 @staticmethod |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1866 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
|
1867 client: SatXMPPClient, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1868 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
|
1869 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
|
1870 ) -> Set[str]: |
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 @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
|
1873 @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
|
1874 @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
|
1875 @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
|
1876 @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
|
1877 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
|
1878 """ |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
1879 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1880 bare_jids: Set[str] = set() |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1881 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1882 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
1883 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
|
1884 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
|
1885 raise exceptions.InternalError( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1886 "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
|
1887 ) from e |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1888 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1889 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
|
1890 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
|
1891 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
|
1892 raise exceptions.InternalError( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1893 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
|
1894 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
|
1895 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1896 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1897 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
|
1898 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1899 return bare_jids |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1900 |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
1901 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
|
1902 """ |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1903 @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
|
1904 @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
|
1905 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
|
1906 """ |
2662
0bef44f8e8ca
plugin XEP-0384: PEP handling + mark as encrypted:
Goffi <goffi@goffi.org>
parents:
2654
diff
changeset
|
1907 |
3214
8d92d4d829fb
plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents:
3172
diff
changeset
|
1908 try: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1909 # 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
|
1910 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
|
1911 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1912 # 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
|
1913 # 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
|
1914 # 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
|
1915 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
|
1916 # 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
|
1917 # queue |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1918 deferred = defer.Deferred() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1919 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
|
1920 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
|
1921 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1922 # 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
|
1923 self.__session_manager_waiters[profile] = [] |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1924 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1925 # 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
|
1926 try: |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1927 session_manager = await prepare_for_profile( |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1928 self.__sat, |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1929 profile, |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1930 initial_own_label="Libervia" |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1931 ) |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1932 except Exception as e: |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1933 # 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
|
1934 # and delete them |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1935 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
|
1936 waiter.errback(e) |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1937 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
|
1938 |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1939 # Re-raise the exception |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1940 raise |
42d3110ac9b1
plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents:
3919
diff
changeset
|
1941 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1942 self.__session_managers[profile] = session_manager |
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 # 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
|
1945 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
|
1946 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
|
1947 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
|
1948 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1949 return session_manager |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
1950 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1951 async def __message_received_trigger_atm( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1952 self, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1953 client: SatXMPPClient, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1954 message_elt: domish.Element, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1955 session_manager: omemo.SessionManager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1956 sender_device_information: omemo.DeviceInformation, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1957 timestamp: datetime |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1958 ) -> None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1959 """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
|
1960 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1961 @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
|
1962 @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
|
1963 @param session_manager: The session manager. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1964 @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
|
1965 the message. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1966 @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
|
1967 """ |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1968 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1969 trust_message_cache = persistent.LazyPersistentBinaryDict( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1970 "XEP-0384/TM", |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1971 client.profile |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1972 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1973 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1974 new_cache_entries: Set[TrustMessageCacheEntry] = set() |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1975 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1976 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
|
1977 assert isinstance(trust_message_elt, domish.Element) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1978 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1979 try: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1980 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
|
1981 except xmlschema.XMLSchemaValidationError as e: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1982 raise exceptions.ParsingError( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1983 "<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
|
1984 ) from e |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1985 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1986 if trust_message_elt["usage"] != NS_ATM: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1987 # Skip non-ATM trust message |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1988 continue |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1989 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1990 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
|
1991 # Skip non-twomemo trust message |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1992 continue |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1993 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1994 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
|
1995 assert isinstance(key_owner_elt, domish.Element) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1996 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1997 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
|
1998 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
1999 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
|
2000 assert isinstance(trust_elt, domish.Element) |
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 new_cache_entries.add(TrustMessageCacheEntry( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2003 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
|
2004 sender_key=sender_device_information.identity_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2005 timestamp=timestamp, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2006 trust_update=TrustUpdate( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2007 target_jid=key_owner_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2008 target_key=base64.b64decode(str(trust_elt)), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2009 target_trust=True |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2010 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2011 )) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2012 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2013 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
|
2014 assert isinstance(distrust_elt, domish.Element) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2015 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2016 new_cache_entries.add(TrustMessageCacheEntry( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2017 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
|
2018 sender_key=sender_device_information.identity_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2019 timestamp=timestamp, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2020 trust_update=TrustUpdate( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2021 target_jid=key_owner_jid, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2022 target_key=base64.b64decode(str(distrust_elt)), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2023 target_trust=False |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2024 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2025 )) |
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 # Load existing cache entries |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2028 existing_cache_entries = cast( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2029 Set[TrustMessageCacheEntry], |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2030 await trust_message_cache.get("cache", set()) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2031 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2032 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2033 # Discard cache entries by timestamp comparison |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2034 existing_by_target = { |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2035 ( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2036 cache_entry.trust_update.target_jid.userhostJID(), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2037 cache_entry.trust_update.target_key |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2038 ): cache_entry |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2039 for cache_entry |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2040 in existing_cache_entries |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2041 } |
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 # 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
|
2044 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
|
2045 existing_cache_entry = existing_by_target.get( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2046 ( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2047 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
|
2048 new_cache_entry.trust_update.target_key |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2049 ), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2050 None |
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 if existing_cache_entry is not None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2054 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
|
2055 # 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
|
2056 # 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
|
2057 new_cache_entries.remove(new_cache_entry) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2058 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2059 # 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
|
2060 # when both cache entries have matching timestamps. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2061 existing_cache_entries.remove(existing_cache_entry) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2062 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2063 # 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
|
2064 applied_trust_updates: Set[TrustUpdate] = set() |
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 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
|
2067 # 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
|
2068 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
|
2069 trust_update = cache_entry.trust_update |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2070 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2071 trust_level = ( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2072 TrustLevel.TRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2073 if trust_update.target_trust |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2074 else TrustLevel.DISTRUSTED |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2075 ) |
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 await session_manager.set_trust( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2078 trust_update.target_jid.userhost(), |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2079 trust_update.target_key, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2080 trust_level.name |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2081 ) |
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 applied_trust_updates.add(trust_update) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2084 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2085 new_cache_entries.remove(cache_entry) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2086 |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2087 # 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
|
2088 await trust_message_cache.force( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2089 "cache", |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2090 existing_cache_entries | new_cache_entries |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2091 ) |
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 # 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
|
2094 if len(applied_trust_updates) > 0: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2095 await manage_trust_message_cache( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2096 client, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2097 session_manager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2098 frozenset(applied_trust_updates) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2099 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2100 |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2101 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
|
2102 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2103 client: SatXMPPClient, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2104 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
|
2105 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
|
2106 ) -> bool: |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2107 """ |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2108 @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
|
2109 @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
|
2110 @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
|
2111 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
|
2112 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
|
2113 encrypted. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2114 @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
|
2115 """ |
4007
1d5a81e3c9e8
plugin XEP-0384: skip MessageReceived trigger when in a component:
Goffi <goffi@goffi.org>
parents:
4004
diff
changeset
|
2116 if client.is_component: |
1d5a81e3c9e8
plugin XEP-0384: skip MessageReceived trigger when in a component:
Goffi <goffi@goffi.org>
parents:
4004
diff
changeset
|
2117 return True |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2118 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
|
2119 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2120 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
|
2121 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
|
2122 |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2123 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
|
2124 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
|
2125 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
|
2126 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
|
2127 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2128 "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
|
2129 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2130 # 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
|
2131 # normally |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2132 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2133 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2134 room_jid = feedback_jid = sender_jid.userhostJID() |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2135 |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2136 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
2137 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
|
2138 except exceptions.NotFound: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2139 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2140 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
|
2141 f" {room_jid}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2142 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2143 # 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
|
2144 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2145 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2146 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
|
2147 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
|
2148 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2149 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
|
2150 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
|
2151 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2152 # 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
|
2153 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2154 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2155 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
|
2156 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
|
2157 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2158 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
|
2159 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
|
2160 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2161 # 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
|
2162 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2163 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2164 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
|
2165 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2166 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
|
2167 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
|
2168 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
|
2169 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
|
2170 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
|
2171 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
|
2172 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
|
2173 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2174 room_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2175 message_uid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2176 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2177 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2178 # 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
|
2179 # plugin. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2180 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
|
2181 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
|
2182 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
|
2183 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
|
2184 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
|
2185 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2186 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
|
2187 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2188 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
|
2189 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2190 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
|
2191 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
|
2192 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2193 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
|
2194 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
|
2195 None |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2196 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2197 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2198 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
|
2199 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
|
2200 None |
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 |
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
|
2203 try: |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
2204 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
|
2205 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
|
2206 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
|
2207 # 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
|
2208 return True |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2209 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2210 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
|
2211 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2212 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
|
2213 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
|
2214 sender_bare_jid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2215 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2216 except (ValueError, XMLSchemaValidationError): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2217 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2218 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
|
2219 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
|
2220 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2221 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2222 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
|
2223 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2224 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
|
2225 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2226 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
|
2227 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
|
2228 sender_bare_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2229 client.jid.userhost(), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2230 session_manager |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2231 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2232 except (ValueError, XMLSchemaValidationError): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2233 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2234 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
|
2235 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
|
2236 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2237 except omemo.SenderNotFound: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2238 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2239 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
|
2240 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
|
2241 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
|
2242 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2243 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2244 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
|
2245 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2246 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
|
2247 # 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
|
2248 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2249 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2250 message_elt.children.remove(encrypted_elt) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2251 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2252 log.debug( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2253 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
|
2254 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
|
2255 ) |
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 plaintext: Optional[bytes] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2258 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
|
2259 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2260 if ( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2261 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
|
2262 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
|
2263 ): |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2264 # 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
|
2265 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
|
2266 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2267 # 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
|
2268 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
|
2269 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2270 try: |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
2271 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
|
2272 except omemo.MessageNotForUs: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2273 # 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
|
2274 # 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
|
2275 # 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
|
2276 # 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
|
2277 # 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
|
2278 # 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
|
2279 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
|
2280 client.feedback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2281 feedback_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2282 D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2283 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
|
2284 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
|
2285 ), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2286 { 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
|
2287 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2288 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
|
2289 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2290 log.debug("Message not encrypted for us.") |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2291 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2292 # 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
|
2293 return False |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2294 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
|
2295 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
|
2296 reason=e, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2297 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
|
2298 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2299 client.feedback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2300 feedback_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2301 D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2302 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
|
2303 f" {e}" |
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 { 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
|
2306 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2307 # 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
|
2308 return False |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2309 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2310 affix_values: Optional[SCEAffixValues] = None |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2311 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2312 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
|
2313 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
|
2314 # 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
|
2315 # 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
|
2316 sce_profile = \ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2317 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
|
2318 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2319 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
|
2320 sce_profile, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2321 message_elt, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2322 plaintext |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2323 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2324 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
|
2325 log.warning(D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2326 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
|
2327 )) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2328 client.feedback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2329 feedback_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2330 D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2331 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
|
2332 f" {e}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2333 ), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2334 { 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
|
2335 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2336 # 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
|
2337 return False |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2338 else: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2339 if affix_values.timestamp is not None: |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2340 # 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
|
2341 # 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
|
2342 # with the plaintext by clients. |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2343 pass |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2344 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2345 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
|
2346 # 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
|
2347 # 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
|
2348 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
|
2349 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
|
2350 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
|
2351 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2352 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
|
2353 # 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
|
2354 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
|
2355 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2356 # 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
|
2357 trust_level = \ |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2358 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
|
2359 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2360 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
|
2361 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
|
2362 else: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
2363 post_treat.addCallback(client.encryption.mark_as_untrusted) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2364 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2365 # 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
|
2366 post_treat.addCallback( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
2367 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
|
2368 namespace=message.namespace |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2369 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2370 |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2371 # Handle potential ATM trust updates |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2372 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
|
2373 await self.__message_received_trigger_atm( |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2374 client, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2375 message_elt, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2376 session_manager, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2377 device_information, |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2378 affix_values.timestamp |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2379 ) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2380 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2381 # 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
|
2382 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2383 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2384 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
|
2385 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2386 @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
|
2387 @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
|
2388 @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
|
2389 """ |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2390 # 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
|
2391 # FIXME: temporary disabling IQ stanza encryption |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2392 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
|
2393 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2394 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2395 # 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
|
2396 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
|
2397 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
|
2398 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
|
2399 # 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
|
2400 raise exceptions.InternalError( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2401 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
|
2402 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
|
2403 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2404 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2405 # 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
|
2406 # 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
|
2407 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2408 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2409 # Parse the JID |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2410 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
|
2411 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2412 # 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
|
2413 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
|
2414 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2415 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
|
2416 # 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
|
2417 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2418 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2419 if encryption["plugin"].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
|
2420 # 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
|
2421 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2422 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2423 # All pre-checks done, we can start encrypting! |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2424 await self.encrypt( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2425 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2426 twomemo.twomemo.NAMESPACE, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2427 stanza, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2428 recipient_bare_jid, |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2429 stanza.getAttribute("type", C.MESS_TYPE_NORMAL) == C.MESS_TYPE_GROUPCHAT, |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2430 stanza.getAttribute("id", None) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2431 ) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2432 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2433 # 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
|
2434 if stanza.name == "message": |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
2435 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
|
2436 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2437 # 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
|
2438 return True |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2439 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2440 async def __send_message_data_trigger( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2441 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2442 client: SatXMPPClient, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2443 mess_data: MessageData |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2444 ) -> None: |
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 @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
|
2447 @param mess_data: The message data 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
|
2448 """ |
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 # Check whether encryption is requested for this message |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2451 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2452 namespace = mess_data[C.MESS_KEY_ENCRYPTION]["plugin"].namespace |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2453 except KeyError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2454 return |
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 requested, check whether it's oldmemo |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2457 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
|
2458 return |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2459 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2460 # All pre-checks done, we can start encrypting! |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2461 stanza = mess_data["xml"] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2462 recipient_jid = mess_data["to"] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2463 is_muc_message = mess_data["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
|
2464 stanza_id = mess_data["uid"] |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2465 |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2466 await self.encrypt( |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2467 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2468 oldmemo.oldmemo.NAMESPACE, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2469 stanza, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2470 recipient_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2471 is_muc_message, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2472 stanza_id |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2473 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2474 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2475 # Add a store hint |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
4007
diff
changeset
|
2476 self.__xep_0334.add_hint_elements(stanza, [ "store" ]) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2477 |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2478 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
|
2479 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2480 client: SatXMPPClient, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2481 namespace: Literal["urn:xmpp:omemo:2", "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
|
2482 stanza: domish.Element, |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2483 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
|
2484 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
|
2485 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
|
2486 ) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2487 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2488 @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
|
2489 @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
|
2490 @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
|
2491 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
|
2492 @param recipient_jid: The JID of the recipients. |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2493 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
|
2494 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
|
2495 @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
|
2496 @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
|
2497 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
|
2498 reflection handling. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2499 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2500 @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
|
2501 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
|
2502 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
|
2503 """ |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2504 if isinstance(recipient_jids, jid.JID): |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2505 recipient_jids = {recipient_jids} |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2506 if not recipient_jids: |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2507 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
|
2508 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
|
2509 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2510 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
|
2511 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2512 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
|
2513 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
|
2514 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2515 if is_muc_message: |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2516 if len(recipient_jids) != 1: |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2517 raise exceptions.InternalError( |
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2518 '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
|
2519 ) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2520 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
|
2521 raise exceptions.InternalError( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2522 "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
|
2523 " available." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2524 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2525 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2526 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
|
2527 raise exceptions.InternalError( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2528 "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
|
2529 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2530 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2531 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
|
2532 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2533 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
|
2534 client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2535 self.__xep_0045, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2536 room_jid |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2537 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2538 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2539 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
|
2540 client=client, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2541 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
|
2542 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
|
2543 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2544 else: |
3972
5fbdf986670c
plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
2545 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
|
2546 feedback_jid = recipient_jid.userhostJID() |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2547 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2548 log.debug( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2549 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
|
2550 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
|
2551 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2552 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2553 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
|
2554 """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
|
2555 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2556 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
|
2557 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
|
2558 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2559 @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
|
2560 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
|
2561 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
|
2562 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
|
2563 """ |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2564 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2565 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
|
2566 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
|
2567 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
|
2568 stanza |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2569 ) |
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 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
|
2572 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
|
2573 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2574 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
|
2575 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
|
2576 plaintext = str(child).encode("utf-8") |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2577 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2578 # 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
|
2579 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
|
2580 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
|
2581 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2582 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
|
2583 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2584 "No body found in intercepted message to be encrypted with" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2585 " oldmemo." |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2586 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2587 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2588 return plaintext |
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 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
|
2591 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2592 # 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
|
2593 # safety reasons. |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2594 plaintext = prepare_stanza() |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2595 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
|
2596 return |
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 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
|
2599 |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
2600 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
|
2601 |
3214
8d92d4d829fb
plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents:
3172
diff
changeset
|
2602 try: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2603 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
|
2604 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
|
2605 { namespace: plaintext }, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2606 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
|
2607 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
|
2608 ) |
8d92d4d829fb
plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents:
3172
diff
changeset
|
2609 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
|
2610 msg = _( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2611 # 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
|
2612 "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
|
2613 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
|
2614 reason=e |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2615 ) |
3237
b0c57c9a4bd8
plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents:
3236
diff
changeset
|
2616 ) |
2859
4e875d9eea48
plugin XEP-0384: give feedback to client when encryption failed
Goffi <goffi@goffi.org>
parents:
2858
diff
changeset
|
2617 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
|
2618 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
|
2619 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
|
2620 }) |
2858
31a5038cdf79
plugin XEP-0384: small refactoring to encrypt messages + bugfix:
Goffi <goffi@goffi.org>
parents:
2857
diff
changeset
|
2621 raise e |
2738
eb58f26ed236
plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents:
2662
diff
changeset
|
2622 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2623 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
|
2624 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2625 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
|
2626 f" {encryption_errors}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2627 ) |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
2628 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2629 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
|
2630 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
|
2631 f" {err.namespace}" |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2632 for err |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2633 in encryption_errors |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2634 ]) |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
2635 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2636 client.feedback( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2637 feedback_jid, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2638 D_( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2639 "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
|
2640 " 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
|
2641 " 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
|
2642 " 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
|
2643 " 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
|
2644 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
|
2645 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2646 ) |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
2647 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2648 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
|
2649 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2650 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
|
2651 # Add the encrypted element |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2652 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
|
2653 twomemo.etree.serialize_message(message) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2654 )) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2655 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2656 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
|
2657 # Add the encrypted element |
3967
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2658 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
|
2659 oldmemo.etree.serialize_message(message) |
f461f11ea176
plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents:
3944
diff
changeset
|
2660 )) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2661 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2662 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
|
2663 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
|
2664 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2665 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
|
2666 self, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2667 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
|
2668 profile: str |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2669 ) -> None: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2670 """Handle device list updates fired by PEP. |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2671 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2672 @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
|
2673 @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
|
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 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
|
2677 items = cast(List[domish.Element], items_event.items) |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2678 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2679 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
|
2680 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
|
2681 return |
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
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 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
|
2684 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
|
2685 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
|
2686 return |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2687 |
3914
4cb38c8312a1
plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents:
3911
diff
changeset
|
2688 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
|
2689 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2690 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
|
2691 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
|
2692 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2693 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
|
2694 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
|
2695 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2696 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
|
2697 except XMLSchemaValidationError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2698 pass |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
2699 else: |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2700 namespace = twomemo.twomemo.NAMESPACE |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2701 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2702 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
|
2703 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
|
2704 try: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2705 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
|
2706 except XMLSchemaValidationError: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2707 pass |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2708 else: |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2709 namespace = oldmemo.oldmemo.NAMESPACE |
3104
118d91c932a7
plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents:
3098
diff
changeset
|
2710 |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2711 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
|
2712 log.warning( |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2713 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
|
2714 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
|
2715 ) |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2716 return |
2648
0f76813afc57
plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2717 |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3967
diff
changeset
|
2718 session_manager = await self.get_session_manager(profile) |
3911
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2719 |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2720 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
|
2721 namespace, |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2722 sender.userhost(), |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2723 device_list |
8289ac1b34f4
plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents:
3797
diff
changeset
|
2724 ) |