annotate libervia/backend/plugins/plugin_xep_0384.py @ 4340:ea72364131d5 default tip @

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