annotate sat/plugins/plugin_xep_0384.py @ 4007:1d5a81e3c9e8

plugin XEP-0384: skip MessageReceived trigger when in a component: OMEMO is not used in components so far, but the trigger is trying to request OMEMO PEP nodes, which causes an error with virtual pubsub service of AP component.
author Goffi <goffi@goffi.org>
date Thu, 16 Mar 2023 12:31:24 +0100
parents cd6f70015738
children 524856bd7b19
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
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
24 from typing import \
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
25 Any, Dict, FrozenSet, List, Literal, NamedTuple, Optional, Set, Type, Union, cast
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
26 import uuid
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
27 import xml.etree.ElementTree as ET
3237
b0c57c9a4bd8 plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents: 3236
diff changeset
28 from xml.sax.saxutils import quoteattr
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
29
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
30 from typing_extensions import Final, Never, assert_never
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
31 from wokkel import muc, pubsub # type: ignore[import]
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
32 import xmlschema
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
33
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
34 from sat.core import exceptions
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
35 from sat.core.constants import Const as C
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
36 from sat.core.core_types import MessageData, SatXMPPEntity
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
37 from sat.core.i18n import _, D_
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
38 from sat.core.log import getLogger, Logger
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
39 from sat.core.sat_main import SAT
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
40 from sat.core.xmpp import SatXMPPClient
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
41 from sat.memory import persistent
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
42 from sat.plugins.plugin_misc_text_commands import TextCommands
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
43 from sat.plugins.plugin_xep_0045 import XEP_0045
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
44 from sat.plugins.plugin_xep_0060 import XEP_0060
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
45 from sat.plugins.plugin_xep_0163 import XEP_0163
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
46 from sat.plugins.plugin_xep_0334 import XEP_0334
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
47 from sat.plugins.plugin_xep_0359 import XEP_0359
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
48 from sat.plugins.plugin_xep_0420 import \
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
49 XEP_0420, SCEAffixPolicy, SCEAffixValues, SCEProfile
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
50 from sat.tools import xml_tools
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
51 from twisted.internet import defer
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
52 from twisted.words.protocols.jabber import error, jid
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
53 from twisted.words.xish import domish
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
54
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
55 try:
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
56 import omemo
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
57 import omemo.identity_key_pair
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
58 import twomemo
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
59 import twomemo.etree
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
60 import oldmemo
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
61 import oldmemo.etree
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
62 import oldmemo.migrations
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
63 from xmlschema import XMLSchemaValidationError
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
64
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
65 # An explicit version check of the OMEMO libraries should not be required here, since
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
66 # the stored data is fully versioned and the library will complain if a downgrade is
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
67 # attempted.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
68 except ImportError as import_error:
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
69 raise exceptions.MissingModule(
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
70 "You are missing one or more package required by the OMEMO plugin. Please"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
71 " download/install the pip packages 'omemo', 'twomemo', 'oldmemo' and"
3976
db45d49518f6 plugin XEP-0384: log `import_error` when import is failing
Goffi <goffi@goffi.org>
parents: 3972
diff changeset
72 f" 'xmlschema'.\nexception: {import_error}"
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
73 ) from import_error
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
74
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
75
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
76 __all__ = [ # pylint: disable=unused-variable
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
77 "PLUGIN_INFO",
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
78 "OMEMO"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
79 ]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
80
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
81 log = cast(Logger, getLogger(__name__)) # type: ignore[no-untyped-call]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
82
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
83
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
84 PLUGIN_INFO = {
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2925
diff changeset
85 C.PI_NAME: "OMEMO",
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2925
diff changeset
86 C.PI_IMPORT_NAME: "XEP-0384",
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2925
diff changeset
87 C.PI_TYPE: "SEC",
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
88 C.PI_PROTOCOLS: [ "XEP-0384" ],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
89 C.PI_DEPENDENCIES: [ "XEP-0163", "XEP-0280", "XEP-0334", "XEP-0060", "XEP-0420" ],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
90 C.PI_RECOMMENDATIONS: [ "XEP-0045", "XEP-0359", C.TEXT_CMDS ],
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2925
diff changeset
91 C.PI_MAIN: "OMEMO",
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2925
diff changeset
92 C.PI_HANDLER: "no",
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2925
diff changeset
93 C.PI_DESCRIPTION: _("""Implementation of OMEMO"""),
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
94 }
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
95
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
96
3237
b0c57c9a4bd8 plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents: 3236
diff changeset
97 PARAM_CATEGORY = "Security"
b0c57c9a4bd8 plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents: 3236
diff changeset
98 PARAM_NAME = "omemo_policy"
b0c57c9a4bd8 plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents: 3236
diff changeset
99
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
100
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
101 class LogHandler(logging.Handler):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
102 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
103 Redirect python-omemo's log output to Libervia's log system.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
104 """
2654
e7bfbded652a plugin XEP-0384, install: adapted plugin to omemo module changes + added omemo module to dependencies:
Goffi <goffi@goffi.org>
parents: 2648
diff changeset
105
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
106 def emit(self, record: logging.LogRecord) -> None:
2654
e7bfbded652a plugin XEP-0384, install: adapted plugin to omemo module changes + added omemo module to dependencies:
Goffi <goffi@goffi.org>
parents: 2648
diff changeset
107 log.log(record.levelname, record.getMessage())
e7bfbded652a plugin XEP-0384, install: adapted plugin to omemo module changes + added omemo module to dependencies:
Goffi <goffi@goffi.org>
parents: 2648
diff changeset
108
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
109
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
110 sm_logger = logging.getLogger(omemo.SessionManager.LOG_TAG)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
111 sm_logger.setLevel(logging.DEBUG)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
112 sm_logger.propagate = False
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
113 sm_logger.addHandler(LogHandler())
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
114
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
115
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
116 ikp_logger = logging.getLogger(omemo.identity_key_pair.IdentityKeyPair.LOG_TAG)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
117 ikp_logger.setLevel(logging.DEBUG)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
118 ikp_logger.propagate = False
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
119 ikp_logger.addHandler(LogHandler())
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
120
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
121
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
122 # TODO: Add handling for device labels, i.e. show device labels in the trust UI and give
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
123 # the user a way to change their own device label.
2654
e7bfbded652a plugin XEP-0384, install: adapted plugin to omemo module changes + added omemo module to dependencies:
Goffi <goffi@goffi.org>
parents: 2648
diff changeset
124
e7bfbded652a plugin XEP-0384, install: adapted plugin to omemo module changes + added omemo module to dependencies:
Goffi <goffi@goffi.org>
parents: 2648
diff changeset
125
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
126 class MUCPlaintextCacheKey(NamedTuple):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
127 # pylint: disable=invalid-name
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
128 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
129 Structure identifying an encrypted message sent to a MUC.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
130 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
131
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
132 client: SatXMPPClient
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
133 room_jid: jid.JID
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
134 message_uid: str
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
135
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
136
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
137 @enum.unique
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
138 class TrustLevel(enum.Enum):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
139 """
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
140 The trust levels required for ATM and BTBV.
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
141 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
142
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
143 TRUSTED: str = "TRUSTED"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
144 BLINDLY_TRUSTED: str = "BLINDLY_TRUSTED"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
145 UNDECIDED: str = "UNDECIDED"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
146 DISTRUSTED: str = "DISTRUSTED"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
147
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
148
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
149 TWOMEMO_DEVICE_LIST_NODE = "urn:xmpp:omemo:2:devices"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
150 OLDMEMO_DEVICE_LIST_NODE = "eu.siacs.conversations.axolotl.devicelist"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
151
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
152
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
153 class StorageImpl(omemo.Storage):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
154 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
155 Storage implementation for OMEMO based on :class:`persistent.LazyPersistentBinaryDict`
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
156 """
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
157
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
158 def __init__(self, profile: str) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
159 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
160 @param profile: The profile this OMEMO data belongs to.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
161 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
162
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
163 # persistent.LazyPersistentBinaryDict does not cache at all, so keep the caching
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
164 # option of omemo.Storage enabled.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
165 super().__init__()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
166
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
167 self.__storage = persistent.LazyPersistentBinaryDict("XEP-0384", profile)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
168
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
169 async def _load(self, key: str) -> omemo.Maybe[omemo.JSONType]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
170 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
171 return omemo.Just(await self.__storage[key])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
172 except KeyError:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
173 return omemo.Nothing()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
174 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
175 raise omemo.StorageException(f"Error while loading key {key}") from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
176
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
177 async def _store(self, key: str, value: omemo.JSONType) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
178 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
179 await self.__storage.force(key, value)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
180 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
181 raise omemo.StorageException(f"Error while storing key {key}: {value}") from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
182
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
183 async def _delete(self, key: str) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
184 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
185 await self.__storage.remove(key)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
186 except KeyError:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
187 pass
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
188 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
189 raise omemo.StorageException(f"Error while deleting key {key}") from e
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
190
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
191
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
192 class LegacyStorageImpl(oldmemo.migrations.LegacyStorage):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
193 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
194 Legacy storage implementation to migrate data from the old XEP-0384 plugin.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
195 """
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
196
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
197 KEY_DEVICE_ID = "DEVICE_ID"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
198 KEY_STATE = "STATE"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
199 KEY_SESSION = "SESSION"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
200 KEY_ACTIVE_DEVICES = "DEVICES"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
201 KEY_INACTIVE_DEVICES = "INACTIVE_DEVICES"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
202 KEY_TRUST = "TRUST"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
203 KEY_ALL_JIDS = "ALL_JIDS"
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
204
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
205 def __init__(self, profile: str, own_bare_jid: str) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
206 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
207 @param profile: The profile this OMEMO data belongs to.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
208 @param own_bare_jid: The own bare JID, to return by the :meth:`loadOwnData` call.
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
209 """
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
210
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
211 self.__storage = persistent.LazyPersistentBinaryDict("XEP-0384", profile)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
212 self.__own_bare_jid = own_bare_jid
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
213
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
214 async def loadOwnData(self) -> Optional[oldmemo.migrations.OwnData]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
215 own_device_id = await self.__storage.get(LegacyStorageImpl.KEY_DEVICE_ID, None)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
216 if own_device_id is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
217 return None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
218
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
219 return oldmemo.migrations.OwnData(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
220 own_bare_jid=self.__own_bare_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
221 own_device_id=own_device_id
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
222 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
223
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
224 async def deleteOwnData(self) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
225 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
226 await self.__storage.remove(LegacyStorageImpl.KEY_DEVICE_ID)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
227 except KeyError:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
228 pass
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
229
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
230 async def loadState(self) -> Optional[oldmemo.migrations.State]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
231 return cast(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
232 Optional[oldmemo.migrations.State],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
233 await self.__storage.get(LegacyStorageImpl.KEY_STATE, None)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
234 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
235
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
236 async def deleteState(self) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
237 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
238 await self.__storage.remove(LegacyStorageImpl.KEY_STATE)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
239 except KeyError:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
240 pass
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
241
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
242 async def loadSession(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
243 self,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
244 bare_jid: str,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
245 device_id: int
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
246 ) -> Optional[oldmemo.migrations.Session]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
247 key = "\n".join([ LegacyStorageImpl.KEY_SESSION, bare_jid, str(device_id) ])
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
248
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
249 return cast(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
250 Optional[oldmemo.migrations.Session],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
251 await self.__storage.get(key, None)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
252 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
253
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
254 async def deleteSession(self, bare_jid: str, device_id: int) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
255 key = "\n".join([ LegacyStorageImpl.KEY_SESSION, bare_jid, str(device_id) ])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
256
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
257 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
258 await self.__storage.remove(key)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
259 except KeyError:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
260 pass
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
261
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
262 async def loadActiveDevices(self, bare_jid: str) -> Optional[List[int]]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
263 key = "\n".join([ LegacyStorageImpl.KEY_ACTIVE_DEVICES, bare_jid ])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
264
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
265 return cast(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
266 Optional[List[int]],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
267 await self.__storage.get(key, None)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
268 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
269
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
270 async def loadInactiveDevices(self, bare_jid: str) -> Optional[Dict[int, int]]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
271 key = "\n".join([ LegacyStorageImpl.KEY_INACTIVE_DEVICES, bare_jid ])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
272
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
273 return cast(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
274 Optional[Dict[int, int]],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
275 await self.__storage.get(key, None)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
276 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
277
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
278 async def deleteActiveDevices(self, bare_jid: str) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
279 key = "\n".join([ LegacyStorageImpl.KEY_ACTIVE_DEVICES, bare_jid ])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
280
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
281 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
282 await self.__storage.remove(key)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
283 except KeyError:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
284 pass
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
285
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
286 async def deleteInactiveDevices(self, bare_jid: str) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
287 key = "\n".join([ LegacyStorageImpl.KEY_INACTIVE_DEVICES, bare_jid ])
3672
e4054b648111 plugin XEP-0384: fix calls outside of main thread:
Goffi <goffi@goffi.org>
parents: 3584
diff changeset
288
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
289 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
290 await self.__storage.remove(key)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
291 except KeyError:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
292 pass
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
293
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
294 async def loadTrust(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
295 self,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
296 bare_jid: str,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
297 device_id: int
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
298 ) -> Optional[oldmemo.migrations.Trust]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
299 key = "\n".join([ LegacyStorageImpl.KEY_TRUST, bare_jid, str(device_id) ])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
300
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
301 return cast(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
302 Optional[oldmemo.migrations.Trust],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
303 await self.__storage.get(key, None)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
304 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
305
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
306 async def deleteTrust(self, bare_jid: str, device_id: int) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
307 key = "\n".join([ LegacyStorageImpl.KEY_TRUST, bare_jid, str(device_id) ])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
308
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
309 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
310 await self.__storage.remove(key)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
311 except KeyError:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
312 pass
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
313
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
314 async def listJIDs(self) -> Optional[List[str]]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
315 bare_jids = await self.__storage.get(LegacyStorageImpl.KEY_ALL_JIDS, None)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
316
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
317 return None if bare_jids is None else list(bare_jids)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
318
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
319 async def deleteJIDList(self) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
320 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
321 await self.__storage.remove(LegacyStorageImpl.KEY_ALL_JIDS)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
322 except KeyError:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
323 pass
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
324
3541
888109774673 core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
325
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
326 async def download_oldmemo_bundle(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
327 client: SatXMPPClient,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
328 xep_0060: XEP_0060,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
329 bare_jid: str,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
330 device_id: int
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
331 ) -> oldmemo.oldmemo.BundleImpl:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
332 """Download the oldmemo bundle corresponding to a specific device.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
333
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
334 @param client: The client.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
335 @param xep_0060: The XEP-0060 plugin instance to use for pubsub interactions.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
336 @param bare_jid: The bare JID the device belongs to.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
337 @param device_id: The id of the device.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
338 @return: The bundle.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
339 @raise BundleDownloadFailed: if the download failed. Feel free to raise a subclass
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
340 instead.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
341 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
342 # Bundle downloads are needed by the session manager and for migrations from legacy,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
343 # thus it is made a separate function.
3541
888109774673 core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
344
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
345 namespace = oldmemo.oldmemo.NAMESPACE
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
346 node = f"eu.siacs.conversations.axolotl.bundles:{device_id}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
347
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
348 try:
3914
4cb38c8312a1 plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
349 items, __ = await xep_0060.getItems(client, jid.JID(bare_jid), node, max_items=1)
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
350 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
351 raise omemo.BundleDownloadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
352 f"Bundle download failed for {bare_jid}: {device_id} under namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
353 f" {namespace}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
354 ) from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
355
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
356 if len(items) != 1:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
357 raise omemo.BundleDownloadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
358 f"Bundle download failed for {bare_jid}: {device_id} under namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
359 f" {namespace}: Unexpected number of items retrieved: {len(items)}."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
360 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
361
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
362 element = \
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
363 next(iter(xml_tools.domish_elt_2_et_elt(cast(domish.Element, items[0]))), None)
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
364 if element is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
365 raise omemo.BundleDownloadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
366 f"Bundle download failed for {bare_jid}: {device_id} under namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
367 f" {namespace}: Item download succeeded but parsing failed: {element}."
3541
888109774673 core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
368 )
888109774673 core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
369
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
370 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
371 return oldmemo.etree.parse_bundle(element, bare_jid, device_id)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
372 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
373 raise omemo.BundleDownloadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
374 f"Bundle parsing failed for {bare_jid}: {device_id} under namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
375 f" {namespace}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
376 ) from e
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
377
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
378
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
379 # ATM only supports protocols based on SCE, which is currently only omemo:2, and relies on
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
380 # so many implementation details of the encryption protocol that it makes more sense to
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
381 # add ATM to the OMEMO plugin directly instead of having it a separate Libervia plugin.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
382 NS_TM: Final = "urn:xmpp:tm:1"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
383 NS_ATM: Final = "urn:xmpp:atm:1"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
384
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
385
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
386 TRUST_MESSAGE_SCHEMA = xmlschema.XMLSchema("""<?xml version='1.0' encoding='UTF-8'?>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
387 <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
388 targetNamespace='urn:xmpp:tm:1'
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
389 xmlns='urn:xmpp:tm:1'
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
390 elementFormDefault='qualified'>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
391
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
392 <xs:element name='trust-message'>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
393 <xs:complexType>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
394 <xs:sequence>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
395 <xs:element ref='key-owner' minOccurs='1' maxOccurs='unbounded'/>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
396 </xs:sequence>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
397 <xs:attribute name='usage' type='xs:string' use='required'/>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
398 <xs:attribute name='encryption' type='xs:string' use='required'/>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
399 </xs:complexType>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
400 </xs:element>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
401
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
402 <xs:element name='key-owner'>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
403 <xs:complexType>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
404 <xs:sequence>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
405 <xs:element
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
406 name='trust' type='xs:base64Binary' minOccurs='0' maxOccurs='unbounded'/>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
407 <xs:element
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
408 name='distrust' type='xs:base64Binary' minOccurs='0' maxOccurs='unbounded'/>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
409 </xs:sequence>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
410 <xs:attribute name='jid' type='xs:string' use='required'/>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
411 </xs:complexType>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
412 </xs:element>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
413 </xs:schema>
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
414 """)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
415
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
416
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
417 # This is compatible with omemo:2's SCE profile
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
418 TM_SCE_PROFILE = SCEProfile(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
419 rpad_policy=SCEAffixPolicy.REQUIRED,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
420 time_policy=SCEAffixPolicy.REQUIRED,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
421 to_policy=SCEAffixPolicy.OPTIONAL,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
422 from_policy=SCEAffixPolicy.OPTIONAL,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
423 custom_policies={}
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
424 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
425
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
426
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
427 class TrustUpdate(NamedTuple):
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
428 # pylint: disable=invalid-name
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
429 """
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
430 An update to the trust status of an identity key, used by Automatic Trust Management.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
431 """
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
432
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
433 target_jid: jid.JID
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
434 target_key: bytes
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
435 target_trust: bool
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
436
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
437
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
438 class TrustMessageCacheEntry(NamedTuple):
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
439 # pylint: disable=invalid-name
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
440 """
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
441 An entry in the trust message cache used by ATM.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
442 """
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
443
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
444 sender_jid: jid.JID
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
445 sender_key: bytes
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
446 timestamp: datetime
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
447 trust_update: TrustUpdate
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
448
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
449
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
450 class PartialTrustMessage(NamedTuple):
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
451 # pylint: disable=invalid-name
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
452 """
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
453 A structure representing a partial trust message, used by :func:`send_trust_messages`
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
454 to build trust messages.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
455 """
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
456
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
457 recipient_jid: jid.JID
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
458 updated_jid: jid.JID
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
459 trust_updates: FrozenSet[TrustUpdate]
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
460
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
461
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
462 async def manage_trust_message_cache(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
463 client: SatXMPPClient,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
464 session_manager: omemo.SessionManager,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
465 applied_trust_updates: FrozenSet[TrustUpdate]
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
466 ) -> None:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
467 """Manage the ATM trust message cache after trust updates have been applied.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
468
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
469 @param client: The client this operation runs under.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
470 @param session_manager: The session manager to use.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
471 @param applied_trust_updates: The trust updates that have already been applied,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
472 triggering this cache management run.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
473 """
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
474
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
475 trust_message_cache = persistent.LazyPersistentBinaryDict(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
476 "XEP-0384/TM",
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
477 client.profile
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
478 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
479
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
480 # Load cache entries
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
481 cache_entries = cast(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
482 Set[TrustMessageCacheEntry],
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
483 await trust_message_cache.get("cache", set())
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
484 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
485
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
486 # Expire cache entries that were overwritten by the applied trust updates
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
487 cache_entries_by_target = {
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
488 (
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
489 cache_entry.trust_update.target_jid.userhostJID(),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
490 cache_entry.trust_update.target_key
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
491 ): cache_entry
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
492 for cache_entry
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
493 in cache_entries
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
494 }
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
495
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
496 for trust_update in applied_trust_updates:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
497 cache_entry = cache_entries_by_target.get(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
498 (trust_update.target_jid.userhostJID(), trust_update.target_key),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
499 None
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
500 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
501
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
502 if cache_entry is not None:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
503 cache_entries.remove(cache_entry)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
504
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
505 # Apply cached Trust Messages by newly trusted devices
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
506 new_trust_updates: Set[TrustUpdate] = set()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
507
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
508 for trust_update in applied_trust_updates:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
509 if trust_update.target_trust:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
510 # Iterate over a copy such that cache_entries can be modified
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
511 for cache_entry in set(cache_entries):
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
512 if (
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
513 cache_entry.sender_jid.userhostJID()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
514 == trust_update.target_jid.userhostJID()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
515 and cache_entry.sender_key == trust_update.target_key
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
516 ):
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
517 trust_level = (
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
518 TrustLevel.TRUSTED
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
519 if cache_entry.trust_update.target_trust
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
520 else TrustLevel.DISTRUSTED
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
521 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
522
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
523 # Apply the trust update
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
524 await session_manager.set_trust(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
525 cache_entry.trust_update.target_jid.userhost(),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
526 cache_entry.trust_update.target_key,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
527 trust_level.name
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
528 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
529
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
530 # Track the fact that this trust update has been applied
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
531 new_trust_updates.add(cache_entry.trust_update)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
532
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
533 # Remove the corresponding cache entry
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
534 cache_entries.remove(cache_entry)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
535
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
536 # Store the updated cache entries
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
537 await trust_message_cache.force("cache", cache_entries)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
538
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
539 # TODO: Notify the user ("feedback") about automatically updated trust?
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
540
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
541 if len(new_trust_updates) > 0:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
542 # If any trust has been updated, recursively perform another run of cache
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
543 # management
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
544 await manage_trust_message_cache(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
545 client,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
546 session_manager,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
547 frozenset(new_trust_updates)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
548 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
549
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
550
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
551 async def get_trust_as_trust_updates(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
552 session_manager: omemo.SessionManager,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
553 target_jid: jid.JID
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
554 ) -> FrozenSet[TrustUpdate]:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
555 """Get the trust status of all known keys of a JID as trust updates for use with ATM.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
556
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
557 @param session_manager: The session manager to load the trust from.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
558 @param target_jid: The JID to load the trust for.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
559 @return: The trust updates encoding the trust status of all known keys of the JID that
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
560 are either explicitly trusted or distrusted. Undecided keys are not included in
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
561 the trust updates.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
562 """
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
563
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
564 devices = await session_manager.get_device_information(target_jid.userhost())
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
565
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
566 trust_updates: Set[TrustUpdate] = set()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
567
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
568 for device in devices:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
569 trust_level = TrustLevel(device.trust_level_name)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
570 target_trust: bool
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
571
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
572 if trust_level is TrustLevel.TRUSTED:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
573 target_trust = True
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
574 elif trust_level is TrustLevel.DISTRUSTED:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
575 target_trust = False
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
576 else:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
577 # Skip devices that are not explicitly trusted or distrusted
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
578 continue
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
579
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
580 trust_updates.add(TrustUpdate(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
581 target_jid=target_jid.userhostJID(),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
582 target_key=device.identity_key,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
583 target_trust=target_trust
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
584 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
585
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
586 return frozenset(trust_updates)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
587
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
588
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
589 async def send_trust_messages(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
590 client: SatXMPPClient,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
591 session_manager: omemo.SessionManager,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
592 applied_trust_updates: FrozenSet[TrustUpdate]
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
593 ) -> None:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
594 """Send information about updated trust to peers via ATM (XEP-0450).
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
595
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
596 @param client: The client.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
597 @param session_manager: The session manager.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
598 @param applied_trust_updates: The trust updates that have already been applied, to
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
599 notify other peers about.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
600 """
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
601 # NOTE: This currently sends information about oldmemo trust too. This is not
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
602 # specified and experimental, but since twomemo and oldmemo share the same identity
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
603 # keys and trust systems, this could be a cool side effect.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
604
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
605 # Send Trust Messages for newly trusted and distrusted devices
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
606 own_jid = client.jid.userhostJID()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
607 own_trust_updates = await get_trust_as_trust_updates(session_manager, own_jid)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
608
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
609 # JIDs of which at least one device's trust has been updated
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
610 updated_jids = frozenset({
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
611 trust_update.target_jid.userhostJID()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
612 for trust_update
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
613 in applied_trust_updates
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
614 })
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
615
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
616 trust_messages: Set[PartialTrustMessage] = set()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
617
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
618 for updated_jid in updated_jids:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
619 # Get the trust updates for that JID
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
620 trust_updates = frozenset({
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
621 trust_update for trust_update in applied_trust_updates
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
622 if trust_update.target_jid.userhostJID() == updated_jid
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
623 })
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
624
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
625 if updated_jid == own_jid:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
626 # If the own JID is updated, _all_ peers have to be notified
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
627 # TODO: Using my author's privilege here to shamelessly access private fields
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
628 # and storage keys until I've added public API to get a list of peers to
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
629 # python-omemo.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
630 storage: omemo.Storage = getattr(session_manager, "_SessionManager__storage")
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
631 peer_jids = frozenset({
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
632 jid.JID(bare_jid).userhostJID() for bare_jid in (await storage.load_list(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
633 f"/{OMEMO.NS_TWOMEMO}/bare_jids",
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
634 str
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
635 )).maybe([])
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
636 })
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
637
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
638 if len(peer_jids) == 0:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
639 # If there are no peers to notify, notify our other devices about the
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
640 # changes directly
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
641 trust_messages.add(PartialTrustMessage(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
642 recipient_jid=own_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
643 updated_jid=own_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
644 trust_updates=trust_updates
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
645 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
646 else:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
647 # Otherwise, notify all peers about the changes in trust and let carbons
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
648 # handle the copy to our own JID
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
649 for peer_jid in peer_jids:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
650 trust_messages.add(PartialTrustMessage(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
651 recipient_jid=peer_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
652 updated_jid=own_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
653 trust_updates=trust_updates
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
654 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
655
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
656 # Also send full trust information about _every_ peer to our newly
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
657 # trusted devices
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
658 peer_trust_updates = \
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
659 await get_trust_as_trust_updates(session_manager, peer_jid)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
660
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
661 trust_messages.add(PartialTrustMessage(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
662 recipient_jid=own_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
663 updated_jid=peer_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
664 trust_updates=peer_trust_updates
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
665 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
666
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
667 # Send information about our own devices to our newly trusted devices
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
668 trust_messages.add(PartialTrustMessage(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
669 recipient_jid=own_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
670 updated_jid=own_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
671 trust_updates=own_trust_updates
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
672 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
673 else:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
674 # Notify our other devices about the changes in trust
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
675 trust_messages.add(PartialTrustMessage(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
676 recipient_jid=own_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
677 updated_jid=updated_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
678 trust_updates=trust_updates
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
679 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
680
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
681 # Send a summary of our own trust to newly trusted devices
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
682 trust_messages.add(PartialTrustMessage(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
683 recipient_jid=updated_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
684 updated_jid=own_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
685 trust_updates=own_trust_updates
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
686 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
687
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
688 # All trust messages prepared. Merge all trust messages directed at the same
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
689 # recipient.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
690 recipient_jids = { trust_message.recipient_jid for trust_message in trust_messages }
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
691
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
692 for recipient_jid in recipient_jids:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
693 updated: Dict[jid.JID, Set[TrustUpdate]] = {}
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
694
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
695 for trust_message in trust_messages:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
696 # Merge trust messages directed at that recipient
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
697 if trust_message.recipient_jid == recipient_jid:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
698 # Merge the trust updates
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
699 updated[trust_message.updated_jid] = \
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
700 updated.get(trust_message.updated_jid, set())
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
701
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
702 updated[trust_message.updated_jid] |= trust_message.trust_updates
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
703
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
704 # Build the trust message
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
705 trust_message_elt = domish.Element((NS_TM, "trust-message"))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
706 trust_message_elt["usage"] = NS_ATM
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
707 trust_message_elt["encryption"] = twomemo.twomemo.NAMESPACE
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
708
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
709 for updated_jid, trust_updates in updated.items():
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
710 key_owner_elt = trust_message_elt.addElement((NS_TM, "key-owner"))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
711 key_owner_elt["jid"] = updated_jid.userhost()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
712
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
713 for trust_update in trust_updates:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
714 serialized_identity_key = \
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
715 base64.b64encode(trust_update.target_key).decode("ASCII")
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
716
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
717 if trust_update.target_trust:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
718 key_owner_elt.addElement(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
719 (NS_TM, "trust"),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
720 content=serialized_identity_key
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
721 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
722 else:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
723 key_owner_elt.addElement(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
724 (NS_TM, "distrust"),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
725 content=serialized_identity_key
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
726 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
727
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
728 # Finally, encrypt and send the trust message!
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
729 message_data = client.generateMessageXML(MessageData({
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
730 "from": own_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
731 "to": recipient_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
732 "uid": str(uuid.uuid4()),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
733 "message": {},
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
734 "subject": {},
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
735 "type": C.MESS_TYPE_CHAT,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
736 "extra": {},
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
737 "timestamp": time.time()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
738 }))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
739
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
740 message_data["xml"].addChild(trust_message_elt)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
741
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
742 plaintext = XEP_0420.pack_stanza(TM_SCE_PROFILE, message_data["xml"])
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
743
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
744 feedback_jid = recipient_jid
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
745
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
746 # TODO: The following is mostly duplicate code
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
747 try:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
748 messages, encryption_errors = await session_manager.encrypt(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
749 frozenset({ own_jid.userhost(), recipient_jid.userhost() }),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
750 { OMEMO.NS_TWOMEMO: plaintext },
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
751 backend_priority_order=[ OMEMO.NS_TWOMEMO ],
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
752 identifier=feedback_jid.userhost()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
753 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
754 except Exception as e:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
755 msg = _(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
756 # pylint: disable=consider-using-f-string
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
757 "Can't encrypt message for {entities}: {reason}".format(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
758 entities=', '.join({ own_jid.userhost(), recipient_jid.userhost() }),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
759 reason=e
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
760 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
761 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
762 log.warning(msg)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
763 client.feedback(feedback_jid, msg, {
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
764 C.MESS_EXTRA_INFO: C.EXTRA_INFO_ENCR_ERR
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
765 })
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
766 raise e
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
767
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
768 if len(encryption_errors) > 0:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
769 log.warning(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
770 f"Ignored the following non-critical encryption errors:"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
771 f" {encryption_errors}"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
772 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
773
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
774 encrypted_errors_stringified = ", ".join([
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
775 f"device {err.device_id} of {err.bare_jid} under namespace"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
776 f" {err.namespace}"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
777 for err
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
778 in encryption_errors
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
779 ])
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
780
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
781 client.feedback(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
782 feedback_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
783 D_(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
784 "There were non-critical errors during encryption resulting in some"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
785 " of your destinees' devices potentially not receiving the message."
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
786 " This happens when the encryption data/key material of a device is"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
787 " incomplete or broken, which shouldn't happen for actively used"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
788 " devices, and can usually be ignored. The following devices are"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
789 f" affected: {encrypted_errors_stringified}."
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
790 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
791 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
792
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
793 message = next(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
794 message for message in messages
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
795 if message.namespace == OMEMO.NS_TWOMEMO
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
796 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
797
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
798 # Add the encrypted element
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
799 message_data["xml"].addChild(xml_tools.et_elt_2_domish_elt(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
800 twomemo.etree.serialize_message(message)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
801 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
802
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
803 await client.a_send(message_data["xml"])
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
804
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
805
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
806 def make_session_manager(sat: SAT, profile: str) -> Type[omemo.SessionManager]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
807 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
808 @param sat: The SAT instance.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
809 @param profile: The profile.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
810 @return: A non-abstract subclass of :class:`~omemo.session_manager.SessionManager`
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
811 with XMPP interactions and trust handled via the SAT instance.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
812 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
813
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
814 client = sat.getClient(profile)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
815 xep_0060 = cast(XEP_0060, sat.plugins["XEP-0060"])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
816
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
817 class SessionManagerImpl(omemo.SessionManager):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
818 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
819 Session manager implementation handling XMPP interactions and trust via an
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
820 instance of :class:`~sat.core.sat_main.SAT`.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
821 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
822
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
823 @staticmethod
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
824 async def _upload_bundle(bundle: omemo.Bundle) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
825 if isinstance(bundle, twomemo.twomemo.BundleImpl):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
826 element = twomemo.etree.serialize_bundle(bundle)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
827
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
828 node = "urn:xmpp:omemo:2:bundles"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
829 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
830 await xep_0060.sendItem(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
831 client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
832 client.jid.userhostJID(),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
833 node,
3914
4cb38c8312a1 plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
834 xml_tools.et_elt_2_domish_elt(element),
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
835 item_id=str(bundle.device_id),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
836 extra={
3933
cecf45416403 plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents: 3929
diff changeset
837 XEP_0060.EXTRA_PUBLISH_OPTIONS: {
cecf45416403 plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents: 3929
diff changeset
838 XEP_0060.OPT_MAX_ITEMS: "max"
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
839 },
3933
cecf45416403 plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents: 3929
diff changeset
840 XEP_0060.EXTRA_ON_PRECOND_NOT_MET: "raise"
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
841 }
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
842 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
843 except (error.StanzaError, Exception) as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
844 if (
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
845 isinstance(e, error.StanzaError)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
846 and e.condition == "conflict"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
847 and e.appCondition is not None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
848 # pylint: disable=no-member
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
849 and e.appCondition.name == "precondition-not-met"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
850 ):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
851 # publish options couldn't be set on the fly, manually reconfigure
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
852 # the node and publish again
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
853 raise omemo.BundleUploadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
854 f"precondition-not-met: {bundle}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
855 ) from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
856 # TODO: What can I do here? The correct node configuration is a
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
857 # MUST in the XEP.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
858
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
859 raise omemo.BundleUploadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
860 f"Bundle upload failed: {bundle}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
861 ) from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
862
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
863 return
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
864
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
865 if isinstance(bundle, oldmemo.oldmemo.BundleImpl):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
866 element = oldmemo.etree.serialize_bundle(bundle)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
867
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
868 node = f"eu.siacs.conversations.axolotl.bundles:{bundle.device_id}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
869 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
870 await xep_0060.sendItem(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
871 client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
872 client.jid.userhostJID(),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
873 node,
3914
4cb38c8312a1 plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
874 xml_tools.et_elt_2_domish_elt(element),
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
875 item_id=xep_0060.ID_SINGLETON,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
876 extra={
3933
cecf45416403 plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents: 3929
diff changeset
877 XEP_0060.EXTRA_PUBLISH_OPTIONS: { XEP_0060.OPT_MAX_ITEMS: 1 },
cecf45416403 plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents: 3929
diff changeset
878 XEP_0060.EXTRA_ON_PRECOND_NOT_MET: "publish_without_options"
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
879 }
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
880 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
881 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
882 raise omemo.BundleUploadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
883 f"Bundle upload failed: {bundle}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
884 ) from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
885
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
886 return
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
887
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
888 raise omemo.UnknownNamespace(f"Unknown namespace: {bundle.namespace}")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
889
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
890 @staticmethod
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
891 async def _download_bundle(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
892 namespace: str,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
893 bare_jid: str,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
894 device_id: int
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
895 ) -> omemo.Bundle:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
896 if namespace == twomemo.twomemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
897 node = "urn:xmpp:omemo:2:bundles"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
898
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
899 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
900 items, __ = await xep_0060.getItems(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
901 client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
902 jid.JID(bare_jid),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
903 node,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
904 item_ids=[ str(device_id) ]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
905 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
906 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
907 raise omemo.BundleDownloadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
908 f"Bundle download failed for {bare_jid}: {device_id} under"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
909 f" namespace {namespace}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
910 ) from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
912 if len(items) != 1:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
913 raise omemo.BundleDownloadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
914 f"Bundle download failed for {bare_jid}: {device_id} under"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
915 f" namespace {namespace}: Unexpected number of items retrieved:"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
916 f" {len(items)}."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
917 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
918
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
919 element = next(
3914
4cb38c8312a1 plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
920 iter(xml_tools.domish_elt_2_et_elt(cast(domish.Element, items[0]))),
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
921 None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
922 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
923 if element is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
924 raise omemo.BundleDownloadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
925 f"Bundle download failed for {bare_jid}: {device_id} under"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
926 f" namespace {namespace}: Item download succeeded but parsing"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
927 f" failed: {element}."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
928 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
929
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
930 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
931 return twomemo.etree.parse_bundle(element, bare_jid, device_id)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
932 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
933 raise omemo.BundleDownloadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
934 f"Bundle parsing failed for {bare_jid}: {device_id} under"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
935 f" namespace {namespace}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
936 ) from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
937
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
938 if namespace == oldmemo.oldmemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
939 return await download_oldmemo_bundle(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
940 client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
941 xep_0060,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
942 bare_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
943 device_id
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
944 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
945
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
946 raise omemo.UnknownNamespace(f"Unknown namespace: {namespace}")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
947
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
948 @staticmethod
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
949 async def _delete_bundle(namespace: str, device_id: int) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
950 if namespace == twomemo.twomemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
951 node = "urn:xmpp:omemo:2:bundles"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
952
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
953 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
954 await xep_0060.retractItems(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
955 client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
956 client.jid.userhostJID(),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
957 node,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
958 [ str(device_id) ],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
959 notify=False
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
960 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
961 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
962 raise omemo.BundleDeletionFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
963 f"Bundle deletion failed for {device_id} under namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
964 f" {namespace}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
965 ) from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
966
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
967 return
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
968
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
969 if namespace == oldmemo.oldmemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
970 node = f"eu.siacs.conversations.axolotl.bundles:{device_id}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
971
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
972 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
973 await xep_0060.deleteNode(client, client.jid.userhostJID(), node)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
974 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
975 raise omemo.BundleDeletionFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
976 f"Bundle deletion failed for {device_id} under namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
977 f" {namespace}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
978 ) from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
979
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
980 return
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
981
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
982 raise omemo.UnknownNamespace(f"Unknown namespace: {namespace}")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
983
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
984 @staticmethod
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
985 async def _upload_device_list(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
986 namespace: str,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
987 device_list: Dict[int, Optional[str]]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
988 ) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
989 element: Optional[ET.Element] = None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
990 node: Optional[str] = None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
991
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
992 if namespace == twomemo.twomemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
993 element = twomemo.etree.serialize_device_list(device_list)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
994 node = TWOMEMO_DEVICE_LIST_NODE
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
995 if namespace == oldmemo.oldmemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
996 element = oldmemo.etree.serialize_device_list(device_list)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
997 node = OLDMEMO_DEVICE_LIST_NODE
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
998
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
999 if element is None or node is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1000 raise omemo.UnknownNamespace(f"Unknown namespace: {namespace}")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1001
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1002 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1003 await xep_0060.sendItem(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1004 client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1005 client.jid.userhostJID(),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1006 node,
3914
4cb38c8312a1 plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
1007 xml_tools.et_elt_2_domish_elt(element),
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1008 item_id=xep_0060.ID_SINGLETON,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1009 extra={
3933
cecf45416403 plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents: 3929
diff changeset
1010 XEP_0060.EXTRA_PUBLISH_OPTIONS: {
cecf45416403 plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents: 3929
diff changeset
1011 XEP_0060.OPT_MAX_ITEMS: 1,
cecf45416403 plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents: 3929
diff changeset
1012 XEP_0060.OPT_ACCESS_MODEL: "open"
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1013 },
3933
cecf45416403 plugin XEP-0373 and XEP-0374: Implementation of OX and OXIM:
Syndace <me@syndace.dev>
parents: 3929
diff changeset
1014 XEP_0060.EXTRA_ON_PRECOND_NOT_MET: "raise"
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1015 }
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1016 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1017 except (error.StanzaError, Exception) as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1018 if (
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1019 isinstance(e, error.StanzaError)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1020 and e.condition == "conflict"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1021 and e.appCondition is not None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1022 # pylint: disable=no-member
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1023 and e.appCondition.name == "precondition-not-met"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1024 ):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1025 # publish options couldn't be set on the fly, manually reconfigure the
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1026 # node and publish again
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1027 raise omemo.DeviceListUploadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1028 f"precondition-not-met for namespace {namespace}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1029 ) from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1030 # TODO: What can I do here? The correct node configuration is a MUST
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1031 # in the XEP.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1032
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1033 raise omemo.DeviceListUploadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1034 f"Device list upload failed for namespace {namespace}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1035 ) from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1036
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1037 @staticmethod
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1038 async def _download_device_list(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1039 namespace: str,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1040 bare_jid: str
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1041 ) -> Dict[int, Optional[str]]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1042 node: Optional[str] = None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1043
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1044 if namespace == twomemo.twomemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1045 node = TWOMEMO_DEVICE_LIST_NODE
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1046 if namespace == oldmemo.oldmemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1047 node = OLDMEMO_DEVICE_LIST_NODE
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1048
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1049 if node is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1050 raise omemo.UnknownNamespace(f"Unknown namespace: {namespace}")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1051
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1052 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1053 items, __ = await xep_0060.getItems(client, jid.JID(bare_jid), node)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1054 except exceptions.NotFound:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1055 return {}
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1056 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1057 raise omemo.DeviceListDownloadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1058 f"Device list download failed for {bare_jid} under namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1059 f" {namespace}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1060 ) from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1061
3914
4cb38c8312a1 plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
1062 if len(items) == 0:
4cb38c8312a1 plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
1063 return {}
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1064
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1065 if len(items) != 1:
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1066 raise omemo.DeviceListDownloadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1067 f"Device list download failed for {bare_jid} under namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1068 f" {namespace}: Unexpected number of items retrieved: {len(items)}."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1069 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1070
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1071 element = next(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1072 iter(xml_tools.domish_elt_2_et_elt(cast(domish.Element, items[0]))),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1073 None
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1074 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1075
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1076 if element is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1077 raise omemo.DeviceListDownloadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1078 f"Device list download failed for {bare_jid} under namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1079 f" {namespace}: Item download succeeded but parsing failed:"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1080 f" {element}."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1081 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1082
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1083 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1084 if namespace == twomemo.twomemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1085 return twomemo.etree.parse_device_list(element)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1086 if namespace == oldmemo.oldmemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1087 return oldmemo.etree.parse_device_list(element)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1088 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1089 raise omemo.DeviceListDownloadFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1090 f"Device list download failed for {bare_jid} under namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1091 f" {namespace}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1092 ) from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1093
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1094 raise omemo.UnknownNamespace(f"Unknown namespace: {namespace}")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1095
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1096 async def _evaluate_custom_trust_level(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1097 self,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1098 device: omemo.DeviceInformation
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1099 ) -> omemo.TrustLevel:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1100 # Get the custom trust level
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1101 try:
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1102 trust_level = TrustLevel(device.trust_level_name)
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1103 except ValueError as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1104 raise omemo.UnknownTrustLevel(
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1105 f"Unknown trust level name {device.trust_level_name}"
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1106 ) from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1107
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1108 # The first three cases are a straight-forward mapping
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1109 if trust_level is TrustLevel.TRUSTED:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1110 return omemo.TrustLevel.TRUSTED
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1111 if trust_level is TrustLevel.UNDECIDED:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1112 return omemo.TrustLevel.UNDECIDED
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1113 if trust_level is TrustLevel.DISTRUSTED:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1114 return omemo.TrustLevel.DISTRUSTED
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1115
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1116 # The blindly trusted case is more complicated, since its evaluation depends
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1117 # on the trust system and phase
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1118 if trust_level is TrustLevel.BLINDLY_TRUSTED:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1119 # Get the name of the active trust system
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1120 trust_system = cast(str, sat.memory.getParamA(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1121 PARAM_NAME,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1122 PARAM_CATEGORY,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1123 profile_key=profile
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1124 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1125
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1126 # If the trust model is BTBV, blind trust is always enabled
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1127 if trust_system == "btbv":
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1128 return omemo.TrustLevel.TRUSTED
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1129
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1130 # If the trust model is ATM, blind trust is disabled in the second phase
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1131 # and counts as undecided
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1132 if trust_system == "atm":
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1133 # Find out whether we are in phase one or two
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1134 devices = await self.get_device_information(device.bare_jid)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1135
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1136 phase_one = all(TrustLevel(device.trust_level_name) in {
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1137 TrustLevel.UNDECIDED,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1138 TrustLevel.BLINDLY_TRUSTED
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1139 } for device in devices)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1140
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1141 if phase_one:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1142 return omemo.TrustLevel.TRUSTED
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1143
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1144 return omemo.TrustLevel.UNDECIDED
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1145
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1146 raise exceptions.InternalError(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1147 f"Unknown trust system active: {trust_system}"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1148 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1149
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1150 assert_never(trust_level)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1151
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1152 async def _make_trust_decision(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1153 self,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1154 undecided: FrozenSet[omemo.DeviceInformation],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1155 identifier: Optional[str]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1156 ) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1157 if identifier is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1158 raise omemo.TrustDecisionFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1159 "The identifier must contain the feedback JID."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1160 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1161
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1162 # The feedback JID is transferred via the identifier
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1163 feedback_jid = jid.JID(identifier).userhostJID()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1164
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1165 # Both the ATM and the BTBV trust models work with blind trust before the
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1166 # first manual verification is performed. Thus, we can separate bare JIDs into
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1167 # two pools here, one pool of bare JIDs for which blind trust is active, and
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1168 # one pool of bare JIDs for which manual trust is used instead.
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1169 bare_jids = { device.bare_jid for device in undecided }
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1170
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1171 blind_trust_bare_jids: Set[str] = set()
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1172 manual_trust_bare_jids: Set[str] = set()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1173
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1174 # For each bare JID, decide whether blind trust applies
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1175 for bare_jid in bare_jids:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1176 # Get all known devices belonging to the bare JID
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1177 devices = await self.get_device_information(bare_jid)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1178
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1179 # If the trust levels of all devices correspond to those used by blind
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1180 # trust, blind trust applies. Otherwise, fall back to manual trust.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1181 if all(TrustLevel(device.trust_level_name) in {
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1182 TrustLevel.UNDECIDED,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1183 TrustLevel.BLINDLY_TRUSTED
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1184 } for device in devices):
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1185 blind_trust_bare_jids.add(bare_jid)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1186 else:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1187 manual_trust_bare_jids.add(bare_jid)
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1188
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1189 # With the JIDs sorted into their respective pools, the undecided devices can
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1190 # be categorized too
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1191 blindly_trusted_devices = \
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1192 { dev for dev in undecided if dev.bare_jid in blind_trust_bare_jids }
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1193 manually_trusted_devices = \
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1194 { dev for dev in undecided if dev.bare_jid in manual_trust_bare_jids }
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1195
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1196 # Blindly trust devices handled by blind trust
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1197 if len(blindly_trusted_devices) > 0:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1198 for device in blindly_trusted_devices:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1199 await self.set_trust(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1200 device.bare_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1201 device.identity_key,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1202 TrustLevel.BLINDLY_TRUSTED.name
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1203 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1204
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1205 blindly_trusted_devices_stringified = ", ".join([
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1206 f"device {device.device_id} of {device.bare_jid} under namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1207 f" {device.namespaces}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1208 for device
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1209 in blindly_trusted_devices
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1210 ])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1211
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1212 client.feedback(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1213 feedback_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1214 D_(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1215 "Not all destination devices are trusted, unknown devices will be"
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1216 " blindly trusted.\nFollowing devices have been automatically"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1217 f" trusted: {blindly_trusted_devices_stringified}."
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1218 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1219 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1220
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1221 # Prompt the user for manual trust decisions on the devices handled by manual
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1222 # trust
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1223 if len(manually_trusted_devices) > 0:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1224 client.feedback(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1225 feedback_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1226 D_(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1227 "Not all destination devices are trusted, we can't encrypt"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1228 " message in such a situation. Please indicate if you trust"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1229 " those devices or not in the trust manager before we can"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1230 " send this message."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1231 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1232 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1233 await self.__prompt_manual_trust(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1234 frozenset(manually_trusted_devices),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1235 feedback_jid
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1236 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1237
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1238 @staticmethod
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1239 async def _send_message(message: omemo.Message, bare_jid: str) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1240 element: Optional[ET.Element] = None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1241
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1242 if message.namespace == twomemo.twomemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1243 element = twomemo.etree.serialize_message(message)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1244 if message.namespace == oldmemo.oldmemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1245 element = oldmemo.etree.serialize_message(message)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1246
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1247 if element is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1248 raise omemo.UnknownNamespace(f"Unknown namespace: {message.namespace}")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1249
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1250 message_data = client.generateMessageXML(MessageData({
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1251 "from": client.jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1252 "to": jid.JID(bare_jid),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1253 "uid": str(uuid.uuid4()),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1254 "message": {},
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1255 "subject": {},
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1256 "type": C.MESS_TYPE_CHAT,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1257 "extra": {},
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1258 "timestamp": time.time()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1259 }))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1260
3914
4cb38c8312a1 plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
1261 message_data["xml"].addChild(xml_tools.et_elt_2_domish_elt(element))
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1262
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1263 try:
3914
4cb38c8312a1 plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
1264 await client.a_send(message_data["xml"])
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1265 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1266 raise omemo.MessageSendingFailed() from e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1267
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1268 async def __prompt_manual_trust(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1269 self,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1270 undecided: FrozenSet[omemo.DeviceInformation],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1271 feedback_jid: jid.JID
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1272 ) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1273 """Asks the user to decide on the manual trust level of a set of devices.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1274
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1275 Blocks until the user has made a decision and updates the trust levels of all
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1276 devices using :meth:`set_trust`.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1277
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1278 @param undecided: The set of devices to prompt manual trust for.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1279 @param feedback_jid: The bare JID to redirect feedback to. In case of a one to
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1280 one message, the recipient JID. In case of a MUC message, the room JID.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1281 @raise TrustDecisionFailed: if the user cancels the prompt.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1282 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1283
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1284 # This session manager handles encryption with both twomemo and oldmemo, but
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1285 # both are currently registered as different plugins and the `deferXMLUI`
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1286 # below requires a single namespace identifying the encryption plugin. Thus,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1287 # get the namespace of the requested encryption method from the encryption
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1288 # session using the feedback JID.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1289 encryption = client.encryption.getSession(feedback_jid)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1290 if encryption is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1291 raise omemo.TrustDecisionFailed(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1292 f"Encryption not requested for {feedback_jid.userhost()}."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1293 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1294
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1295 namespace = encryption["plugin"].namespace
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1296
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1297 # Casting this to Any, otherwise all calls on the variable cause type errors
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1298 # pylint: disable=no-member
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1299 trust_ui = cast(Any, xml_tools.XMLUI(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1300 panel_type=C.XMLUI_FORM,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1301 title=D_("OMEMO trust management"),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1302 submit_id=""
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1303 ))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1304 trust_ui.addText(D_(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1305 "This is OMEMO trusting system. You'll see below the devices of your "
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1306 "contacts, and a checkbox to trust them or not. A trusted device "
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1307 "can read your messages in plain text, so be sure to only validate "
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1308 "devices that you are sure are belonging to your contact. It's better "
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1309 "to do this when you are next to your contact and their device, so "
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1310 "you can check the \"fingerprint\" (the number next to the device) "
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1311 "yourself. Do *not* validate a device if the fingerprint is wrong!"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1312 ))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1313
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1314 own_device, __ = await self.get_own_device_information()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1315
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1316 trust_ui.changeContainer("label")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1317 trust_ui.addLabel(D_("This device ID"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1318 trust_ui.addText(str(own_device.device_id))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1319 trust_ui.addLabel(D_("This device's fingerprint"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1320 trust_ui.addText(" ".join(self.format_identity_key(own_device.identity_key)))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1321 trust_ui.addEmpty()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1322 trust_ui.addEmpty()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1323
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1324 # At least sort the devices by bare JID such that they aren't listed
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1325 # completely random
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1326 undecided_ordered = sorted(undecided, key=lambda device: device.bare_jid)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1327
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1328 for index, device in enumerate(undecided_ordered):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1329 trust_ui.addLabel(D_("Contact"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1330 trust_ui.addJid(jid.JID(device.bare_jid))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1331 trust_ui.addLabel(D_("Device ID"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1332 trust_ui.addText(str(device.device_id))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1333 trust_ui.addLabel(D_("Fingerprint"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1334 trust_ui.addText(" ".join(self.format_identity_key(device.identity_key)))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1335 trust_ui.addLabel(D_("Trust this device?"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1336 trust_ui.addBool(f"trust_{index}", value=C.boolConst(False))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1337 trust_ui.addEmpty()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1338 trust_ui.addEmpty()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1339
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1340 trust_ui_result = await xml_tools.deferXMLUI(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1341 sat,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1342 trust_ui,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1343 action_extra={ "meta_encryption_trust": namespace },
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1344 profile=profile
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1345 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1346
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1347 if C.bool(trust_ui_result.get("cancelled", "false")):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1348 raise omemo.TrustDecisionFailed("Trust UI cancelled.")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1349
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1350 data_form_result = cast(Dict[str, str], xml_tools.XMLUIResult2DataFormResult(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1351 trust_ui_result
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1352 ))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1353
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1354 trust_updates: Set[TrustUpdate] = set()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1355
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1356 for key, value in data_form_result.items():
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1357 if not key.startswith("trust_"):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1358 continue
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1359
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1360 device = undecided_ordered[int(key[len("trust_"):])]
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1361 target_trust = C.bool(value)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1362 trust_level = \
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1363 TrustLevel.TRUSTED if target_trust else TrustLevel.DISTRUSTED
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1364
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1365 await self.set_trust(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1366 device.bare_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1367 device.identity_key,
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1368 trust_level.name
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1369 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1370
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1371 trust_updates.add(TrustUpdate(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1372 target_jid=jid.JID(device.bare_jid).userhostJID(),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1373 target_key=device.identity_key,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1374 target_trust=target_trust
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1375 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1376
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1377 # Check whether ATM is enabled and handle everything in case it is
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1378 trust_system = cast(str, sat.memory.getParamA(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1379 PARAM_NAME,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1380 PARAM_CATEGORY,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1381 profile_key=profile
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1382 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1383
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1384 if trust_system == "atm":
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1385 await manage_trust_message_cache(client, self, frozenset(trust_updates))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1386 await send_trust_messages(client, self, frozenset(trust_updates))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1387
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1388 return SessionManagerImpl
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1389
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1390
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1391 async def prepare_for_profile(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1392 sat: SAT,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1393 profile: str,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1394 initial_own_label: Optional[str],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1395 signed_pre_key_rotation_period: int = 7 * 24 * 60 * 60,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1396 pre_key_refill_threshold: int = 99,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1397 max_num_per_session_skipped_keys: int = 1000,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1398 max_num_per_message_skipped_keys: Optional[int] = None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1399 ) -> omemo.SessionManager:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1400 """Prepare the OMEMO library (storage, backends, core) for a specific profile.
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1401
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1402 @param sat: The SAT instance.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1403 @param profile: The profile.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1404 @param initial_own_label: The initial (optional) label to assign to this device if
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1405 supported by any of the backends.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1406 @param signed_pre_key_rotation_period: The rotation period for the signed pre key, in
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1407 seconds. The rotation period is recommended to be between one week (the default)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1408 and one month.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1409 @param pre_key_refill_threshold: The number of pre keys that triggers a refill to 100.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1410 Defaults to 99, which means that each pre key gets replaced with a new one right
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1411 away. The threshold can not be configured to lower than 25.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1412 @param max_num_per_session_skipped_keys: The maximum number of skipped message keys to
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1413 keep around per session. Once the maximum is reached, old message keys are deleted
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1414 to make space for newer ones. Accessible via
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1415 :attr:`max_num_per_session_skipped_keys`.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1416 @param max_num_per_message_skipped_keys: The maximum number of skipped message keys to
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1417 accept in a single message. When set to ``None`` (the default), this parameter
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1418 defaults to the per-session maximum (i.e. the value of the
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1419 ``max_num_per_session_skipped_keys`` parameter). This parameter may only be 0 if
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1420 the per-session maximum is 0, otherwise it must be a number between 1 and the
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1421 per-session maximum. Accessible via :attr:`max_num_per_message_skipped_keys`.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1422 @return: A session manager with ``urn:xmpp:omemo:2`` and
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1423 ``eu.siacs.conversations.axolotl`` capabilities, specifically for the given
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1424 profile.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1425 @raise BundleUploadFailed: if a bundle upload failed. Forwarded from
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1426 :meth:`~omemo.session_manager.SessionManager.create`.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1427 @raise BundleDownloadFailed: if a bundle download failed. Forwarded from
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1428 :meth:`~omemo.session_manager.SessionManager.create`.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1429 @raise BundleDeletionFailed: if a bundle deletion failed. Forwarded from
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1430 :meth:`~omemo.session_manager.SessionManager.create`.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1431 @raise DeviceListUploadFailed: if a device list upload failed. Forwarded from
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1432 :meth:`~omemo.session_manager.SessionManager.create`.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1433 @raise DeviceListDownloadFailed: if a device list download failed. Forwarded from
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1434 :meth:`~omemo.session_manager.SessionManager.create`.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1435 """
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1436
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1437 client = sat.getClient(profile)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1438 xep_0060 = cast(XEP_0060, sat.plugins["XEP-0060"])
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1439
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1440 storage = StorageImpl(profile)
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1441
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1442 # TODO: Untested
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1443 await oldmemo.migrations.migrate(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1444 LegacyStorageImpl(profile, client.jid.userhost()),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1445 storage,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1446 # TODO: Do we want BLINDLY_TRUSTED or TRUSTED here?
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1447 TrustLevel.BLINDLY_TRUSTED.name,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1448 TrustLevel.UNDECIDED.name,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1449 TrustLevel.DISTRUSTED.name,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1450 lambda bare_jid, device_id: download_oldmemo_bundle(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1451 client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1452 xep_0060,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1453 bare_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1454 device_id
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1455 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1456 )
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1457
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1458 session_manager = await make_session_manager(sat, profile).create(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1459 [
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1460 twomemo.Twomemo(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1461 storage,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1462 max_num_per_session_skipped_keys,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1463 max_num_per_message_skipped_keys
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1464 ),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1465 oldmemo.Oldmemo(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1466 storage,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1467 max_num_per_session_skipped_keys,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1468 max_num_per_message_skipped_keys
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
1469 )
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1470 ],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1471 storage,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1472 client.jid.userhost(),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1473 initial_own_label,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1474 TrustLevel.UNDECIDED.value,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1475 signed_pre_key_rotation_period,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1476 pre_key_refill_threshold,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1477 omemo.AsyncFramework.TWISTED
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1478 )
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
1479
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1480 # This shouldn't hurt here since we're not running on overly constrainted devices.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1481 # TODO: Consider ensuring data consistency regularly/in response to certain events
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1482 await session_manager.ensure_data_consistency()
3240
d85b68e44297 plugin XEP-0384: fixed /omemo_reset + device ID type:
Goffi <goffi@goffi.org>
parents: 3237
diff changeset
1483
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1484 # TODO: Correct entering/leaving of the history synchronization mode isn't terribly
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1485 # important for now, since it only prevents an extremely unlikely race condition of
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1486 # multiple devices choosing the same pre key for new sessions while the device was
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1487 # offline. I don't believe other clients seriously defend against that race condition
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1488 # either. In the long run, it might still be cool to have triggers for when history
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1489 # sync starts and ends (MAM, MUC catch-up, etc.) and to react to those triggers.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1490 await session_manager.after_history_sync()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1491
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1492 return session_manager
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1493
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
1494
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1495 DEFAULT_TRUST_MODEL_PARAM = f"""
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1496 <params>
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1497 <individual>
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1498 <category name="{PARAM_CATEGORY}" label={quoteattr(D_('Security'))}>
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1499 <param name="{PARAM_NAME}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1500 label={quoteattr(D_('OMEMO default trust policy'))}
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1501 type="list" security="3">
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1502 <option value="atm"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1503 label={quoteattr(D_('Automatic Trust Management (more secure)'))} />
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1504 <option value="btbv"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1505 label={quoteattr(D_('Blind Trust Before Verification (more user friendly)'))}
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1506 selected="true" />
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1507 </param>
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1508 </category>
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1509 </individual>
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1510 </params>
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1511 """
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1512
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1513
3218
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1514 class OMEMO:
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1515 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1516 Plugin equipping Libervia with OMEMO capabilities under the (modern)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1517 ``urn:xmpp:omemo:2`` namespace and the (legacy) ``eu.siacs.conversations.axolotl``
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1518 namespace. Both versions of the protocol are handled by this plugin and compatibility
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1519 between the two is maintained. MUC messages are supported next to one to one messages.
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1520 For trust management, the two trust models "ATM" and "BTBV" are supported.
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1521 """
3918
e63f96e60f7b plugin XEP-0384: expose OLDMEMO and TWOMEMO namespaces:
Goffi <goffi@goffi.org>
parents: 3914
diff changeset
1522 NS_TWOMEMO = twomemo.twomemo.NAMESPACE
e63f96e60f7b plugin XEP-0384: expose OLDMEMO and TWOMEMO namespaces:
Goffi <goffi@goffi.org>
parents: 3914
diff changeset
1523 NS_OLDMEMO = oldmemo.oldmemo.NAMESPACE
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
1524
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1525 # For MUC/MIX message stanzas, the <to/> affix is a MUST
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1526 SCE_PROFILE_GROUPCHAT = SCEProfile(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1527 rpad_policy=SCEAffixPolicy.REQUIRED,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1528 time_policy=SCEAffixPolicy.OPTIONAL,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1529 to_policy=SCEAffixPolicy.REQUIRED,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1530 from_policy=SCEAffixPolicy.OPTIONAL,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1531 custom_policies={}
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1532 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1533
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1534 # For everything but MUC/MIX message stanzas, the <to/> affix is a MAY
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1535 SCE_PROFILE = SCEProfile(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1536 rpad_policy=SCEAffixPolicy.REQUIRED,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1537 time_policy=SCEAffixPolicy.OPTIONAL,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1538 to_policy=SCEAffixPolicy.OPTIONAL,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1539 from_policy=SCEAffixPolicy.OPTIONAL,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1540 custom_policies={}
3237
b0c57c9a4bd8 plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents: 3236
diff changeset
1541 )
b0c57c9a4bd8 plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents: 3236
diff changeset
1542
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1543 def __init__(self, sat: SAT) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1544 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1545 @param sat: The SAT instance.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1546 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1547
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1548 self.__sat = sat
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1549
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1550 # Add configuration option to choose between manual trust and BTBV as the trust
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1551 # model
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1552 sat.memory.updateParams(DEFAULT_TRUST_MODEL_PARAM)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1553
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1554 # Plugins
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1555 self.__xep_0045 = cast(Optional[XEP_0045], sat.plugins.get("XEP-0045"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1556 self.__xep_0334 = cast(XEP_0334, sat.plugins["XEP-0334"])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1557 self.__xep_0359 = cast(Optional[XEP_0359], sat.plugins.get("XEP-0359"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1558 self.__xep_0420 = cast(XEP_0420, sat.plugins["XEP-0420"])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1559
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1560 # In contrast to one to one messages, MUC messages are reflected to the sender.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1561 # Thus, the sender does not add messages to their local message log when sending
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1562 # them, but when the reflection is received. This approach does not pair well with
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1563 # OMEMO, since for security reasons it is forbidden to encrypt messages for the
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1564 # own device. Thus, when the reflection of an OMEMO message is received, it can't
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1565 # be decrypted and added to the local message log as usual. To counteract this,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1566 # the plaintext of encrypted messages sent to MUCs are cached in this field, such
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1567 # that when the reflection is received, the plaintext can be looked up from the
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1568 # cache and added to the local message log.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1569 # TODO: The old plugin expired this cache after some time. I'm not sure that's
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1570 # really necessary.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1571 self.__muc_plaintext_cache: Dict[MUCPlaintextCacheKey, bytes] = {}
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1572
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1573 # Mapping from profile name to corresponding session manager
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1574 self.__session_managers: Dict[str, omemo.SessionManager] = {}
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1575
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1576 # Calls waiting for a specific session manager to be built
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1577 self.__session_manager_waiters: Dict[str, List[defer.Deferred]] = {}
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1578
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1579 # These triggers are used by oldmemo, which doesn't do SCE and only applies to
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1580 # messages. Temporarily, until a more fitting trigger for SCE-based encryption is
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1581 # added, the messageReceived trigger is also used for twomemo.
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1582 sat.trigger.add(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1583 "messageReceived",
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
1584 self._message_received_trigger,
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1585 priority=100050
3214
8d92d4d829fb plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents: 3172
diff changeset
1586 )
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1587 sat.trigger.add(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1588 "sendMessageData",
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1589 self.__send_message_data_trigger,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1590 priority=100050
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1591 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1592
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1593 # These triggers are used by twomemo, which does do SCE
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1594 sat.trigger.add("send", self.__send_trigger, priority=0)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1595 # TODO: Add new triggers here for freshly received and about-to-be-sent stanzas,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1596 # including IQs.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1597
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1598 # Give twomemo a (slightly) higher priority than oldmemo
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1599 sat.registerEncryptionPlugin(self, "TWOMEMO", twomemo.twomemo.NAMESPACE, 101)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1600 sat.registerEncryptionPlugin(self, "OLDMEMO", oldmemo.oldmemo.NAMESPACE, 100)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1601
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1602 xep_0163 = cast(XEP_0163, sat.plugins["XEP-0163"])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1603 xep_0163.addPEPEvent(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1604 "TWOMEMO_DEVICES",
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1605 TWOMEMO_DEVICE_LIST_NODE,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1606 lambda items_event, profile: defer.ensureDeferred(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1607 self.__on_device_list_update(items_event, profile)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1608 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1609 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1610 xep_0163.addPEPEvent(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1611 "OLDMEMO_DEVICES",
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1612 OLDMEMO_DEVICE_LIST_NODE,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1613 lambda items_event, profile: defer.ensureDeferred(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1614 self.__on_device_list_update(items_event, profile)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1615 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1616 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1617
3218
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1618 try:
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1619 self.__text_commands = cast(TextCommands, sat.plugins[C.TEXT_CMDS])
3218
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1620 except KeyError:
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1621 log.info(_("Text commands not available"))
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1622 else:
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1623 self.__text_commands.registerTextCommands(self)
3218
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1624
4004
cd6f70015738 plugin XEP-0384: run `profileConnected` workflow in background:
Goffi <goffi@goffi.org>
parents: 3976
diff changeset
1625 def profileConnected( # pylint: disable=invalid-name
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1626 self,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1627 client: SatXMPPClient
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1628 ) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1629 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1630 @param client: The client.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1631 """
3218
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1632
4004
cd6f70015738 plugin XEP-0384: run `profileConnected` workflow in background:
Goffi <goffi@goffi.org>
parents: 3976
diff changeset
1633 defer.ensureDeferred(self.get_session_manager(
3969
8e7d5796fb23 plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents: 3967
diff changeset
1634 cast(str, client.profile)
4004
cd6f70015738 plugin XEP-0384: run `profileConnected` workflow in background:
Goffi <goffi@goffi.org>
parents: 3976
diff changeset
1635 ))
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1636
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1637 async def cmd_omemo_reset(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1638 self,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1639 client: SatXMPPClient,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1640 mess_data: MessageData
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1641 ) -> Literal[False]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1642 """Reset all sessions of devices that belong to the recipient of ``mess_data``.
3218
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1643
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1644 This must only be callable manually by the user. Use this when a session is
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1645 apparently broken, i.e. sending and receiving encrypted messages doesn't work and
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1646 something being wrong has been confirmed manually with the recipient.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1647
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1648 @param client: The client.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1649 @param mess_data: The message data, whose ``to`` attribute will be the bare JID to
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1650 reset all sessions with.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1651 @return: The constant value ``False``, indicating to the text commands plugin that
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1652 the message is not supposed to be sent.
3218
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1653 """
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1654
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1655 twomemo_requested = \
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1656 client.encryption.isEncryptionRequested(mess_data, twomemo.twomemo.NAMESPACE)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1657 oldmemo_requested = \
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1658 client.encryption.isEncryptionRequested(mess_data, oldmemo.oldmemo.NAMESPACE)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1659
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1660 if not (twomemo_requested or oldmemo_requested):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1661 self.__text_commands.feedBack(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1662 client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1663 _("You need to have OMEMO encryption activated to reset the session"),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1664 mess_data
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1665 )
3218
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1666 return False
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1667
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1668 bare_jid = mess_data["to"].userhost()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1669
3969
8e7d5796fb23 plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents: 3967
diff changeset
1670 session_manager = await self.get_session_manager(client.profile)
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1671 devices = await session_manager.get_device_information(bare_jid)
3218
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1672
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1673 for device in devices:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1674 log.debug(f"Replacing sessions with device {device}")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1675 await session_manager.replace_sessions(device)
3218
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1676
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1677 self.__text_commands.feedBack(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1678 client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1679 _("OMEMO session has been reset"),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1680 mess_data
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1681 )
3218
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1682
806a7936a591 plugin XEP-0384: added "/omemo_reset" text command:
Goffi <goffi@goffi.org>
parents: 3214
diff changeset
1683 return False
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1684
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1685 async def getTrustUI( # 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
1686 self,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1687 client: SatXMPPClient,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1688 entity: jid.JID
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1689 ) -> xml_tools.XMLUI:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1690 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1691 @param client: The client.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1692 @param entity: The entity whose device trust levels to manage.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1693 @return: An XMLUI instance which opens a form to manage the trust level of all
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1694 devices belonging to the entity.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1695 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1696
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1697 if entity.resource:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1698 raise ValueError("A bare JID is expected.")
3237
b0c57c9a4bd8 plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents: 3236
diff changeset
1699
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1700 bare_jids: Set[str]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1701 if self.__xep_0045 is not None and self.__xep_0045.isJoinedRoom(client, entity):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1702 bare_jids = self.__get_joined_muc_users(client, self.__xep_0045, entity)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1703 else:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1704 bare_jids = { entity.userhost() }
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1705
3969
8e7d5796fb23 plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents: 3967
diff changeset
1706 session_manager = await self.get_session_manager(client.profile)
3237
b0c57c9a4bd8 plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents: 3236
diff changeset
1707
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1708 # At least sort the devices by bare JID such that they aren't listed completely
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1709 # random
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1710 devices = sorted(cast(Set[omemo.DeviceInformation], set()).union(*[
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1711 await session_manager.get_device_information(bare_jid)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1712 for bare_jid
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1713 in bare_jids
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1714 ]), key=lambda device: device.bare_jid)
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
1715
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1716 async def callback(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1717 data: Any,
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1718 profile: str
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1719 ) -> Dict[Never, Never]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1720 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1721 @param data: The XMLUI result produces by the trust UI form.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1722 @param profile: The profile.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1723 @return: An empty dictionary. The type of the return value was chosen
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1724 conservatively since the exact options are neither known not needed here.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1725 """
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
1726
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1727 if C.bool(data.get("cancelled", "false")):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1728 return {}
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1729
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1730 data_form_result = cast(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1731 Dict[str, str],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1732 xml_tools.XMLUIResult2DataFormResult(data)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1733 )
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1734
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1735 trust_updates: Set[TrustUpdate] = set()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1736
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1737 for key, value in data_form_result.items():
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1738 if not key.startswith("trust_"):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1739 continue
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
1740
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1741 device = devices[int(key[len("trust_"):])]
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1742 trust_level_name = value
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1743
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1744 if device.trust_level_name != trust_level_name:
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1745 await session_manager.set_trust(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1746 device.bare_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1747 device.identity_key,
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1748 trust_level_name
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1749 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1750
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1751 target_trust: Optional[bool] = None
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1752
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1753 if TrustLevel(trust_level_name) is TrustLevel.TRUSTED:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1754 target_trust = True
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1755 if TrustLevel(trust_level_name) is TrustLevel.DISTRUSTED:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1756 target_trust = False
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1757
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1758 if target_trust is not None:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1759 trust_updates.add(TrustUpdate(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1760 target_jid=jid.JID(device.bare_jid).userhostJID(),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1761 target_key=device.identity_key,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1762 target_trust=target_trust
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1763 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1764
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1765 # Check whether ATM is enabled and handle everything in case it is
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1766 trust_system = cast(str, self.__sat.memory.getParamA(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1767 PARAM_NAME,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1768 PARAM_CATEGORY,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1769 profile_key=profile
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1770 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1771
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1772 if trust_system == "atm":
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1773 if len(trust_updates) > 0:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1774 await manage_trust_message_cache(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1775 client,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1776 session_manager,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1777 frozenset(trust_updates)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1778 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1779
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1780 await send_trust_messages(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1781 client,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1782 session_manager,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1783 frozenset(trust_updates)
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1784 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1785
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1786 return {}
2744
e6716d90c2fe plugin XEP-0384: various bug fixes:
Goffi <goffi@goffi.org>
parents: 2738
diff changeset
1787
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1788 submit_id = self.__sat.registerCallback(callback, with_data=True, one_shot=True)
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
1789
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1790 result = xml_tools.XMLUI(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1791 panel_type=C.XMLUI_FORM,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1792 title=D_("OMEMO trust management"),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1793 submit_id=submit_id
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
1794 )
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1795 # Casting this to Any, otherwise all calls on the variable cause type errors
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1796 # pylint: disable=no-member
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1797 trust_ui = cast(Any, result)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1798 trust_ui.addText(D_(
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1799 "This is OMEMO trusting system. You'll see below the devices of your"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1800 " contacts, and a list selection to trust them or not. A trusted device"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1801 " can read your messages in plain text, so be sure to only validate"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1802 " devices that you are sure are belonging to your contact. It's better"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1803 " to do this when you are next to your contact and their device, so"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1804 " you can check the \"fingerprint\" (the number next to the device)"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1805 " yourself. Do *not* validate a device if the fingerprint is wrong!"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1806 " Note that manually validating a fingerprint disables any form of automatic"
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1807 " trust."
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1808 ))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1809
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1810 own_device, __ = await session_manager.get_own_device_information()
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
1811
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1812 trust_ui.changeContainer("label")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1813 trust_ui.addLabel(D_("This device ID"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1814 trust_ui.addText(str(own_device.device_id))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1815 trust_ui.addLabel(D_("This device's fingerprint"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1816 trust_ui.addText(" ".join(session_manager.format_identity_key(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1817 own_device.identity_key
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1818 )))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1819 trust_ui.addEmpty()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1820 trust_ui.addEmpty()
3237
b0c57c9a4bd8 plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents: 3236
diff changeset
1821
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1822 for index, device in enumerate(devices):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1823 trust_ui.addLabel(D_("Contact"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1824 trust_ui.addJid(jid.JID(device.bare_jid))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1825 trust_ui.addLabel(D_("Device ID"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1826 trust_ui.addText(str(device.device_id))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1827 trust_ui.addLabel(D_("Fingerprint"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1828 trust_ui.addText(" ".join(session_manager.format_identity_key(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1829 device.identity_key
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1830 )))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1831 trust_ui.addLabel(D_("Trust this device?"))
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
1832
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1833 current_trust_level = TrustLevel(device.trust_level_name)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1834 avaiable_trust_levels = \
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1835 { TrustLevel.DISTRUSTED, TrustLevel.TRUSTED, current_trust_level }
3237
b0c57c9a4bd8 plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents: 3236
diff changeset
1836
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1837 trust_ui.addList(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1838 f"trust_{index}",
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1839 options=[ trust_level.name for trust_level in avaiable_trust_levels ],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1840 selected=current_trust_level.name,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1841 styles=[ "inline" ]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1842 )
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
1843
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1844 twomemo_active = dict(device.active).get(twomemo.twomemo.NAMESPACE)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1845 if twomemo_active is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1846 trust_ui.addEmpty()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1847 trust_ui.addLabel(D_("(not available for Twomemo)"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1848 if twomemo_active is False:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1849 trust_ui.addEmpty()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1850 trust_ui.addLabel(D_("(inactive for Twomemo)"))
3104
118d91c932a7 plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents: 3098
diff changeset
1851
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1852 oldmemo_active = dict(device.active).get(oldmemo.oldmemo.NAMESPACE)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1853 if oldmemo_active is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1854 trust_ui.addEmpty()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1855 trust_ui.addLabel(D_("(not available for Oldmemo)"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1856 if oldmemo_active is False:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1857 trust_ui.addEmpty()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1858 trust_ui.addLabel(D_("(inactive for Oldmemo)"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1859
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1860 trust_ui.addEmpty()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1861 trust_ui.addEmpty()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1862
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1863 return result
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1864
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1865 @staticmethod
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1866 def __get_joined_muc_users(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1867 client: SatXMPPClient,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1868 xep_0045: XEP_0045,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1869 room_jid: jid.JID
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1870 ) -> Set[str]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1871 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1872 @param client: The client.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1873 @param xep_0045: A MUC plugin instance.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1874 @param room_jid: The room JID.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1875 @return: A set containing the bare JIDs of the MUC participants.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1876 @raise InternalError: if the MUC is not joined or the entity information of a
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1877 participant isn't available.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1878 """
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
1879
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1880 bare_jids: Set[str] = set()
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1881
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1882 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1883 room = cast(muc.Room, xep_0045.getRoom(client, room_jid))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1884 except exceptions.NotFound as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1885 raise exceptions.InternalError(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1886 "Participant list of unjoined MUC requested."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1887 ) from e
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1888
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1889 for user in cast(Dict[str, muc.User], room.roster).values():
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1890 entity = cast(Optional[SatXMPPEntity], user.entity)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1891 if entity is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1892 raise exceptions.InternalError(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1893 f"Participant list of MUC requested, but the entity information of"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1894 f" the participant {user} is not available."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1895 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1896
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1897 bare_jids.add(entity.jid.userhost())
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1898
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1899 return bare_jids
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1900
3969
8e7d5796fb23 plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents: 3967
diff changeset
1901 async def get_session_manager(self, profile: str) -> omemo.SessionManager:
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1902 """
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1903 @param profile: The profile to prepare for.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1904 @return: A session manager instance for this profile. Creates a new instance if
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1905 none was prepared before.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1906 """
2662
0bef44f8e8ca plugin XEP-0384: PEP handling + mark as encrypted:
Goffi <goffi@goffi.org>
parents: 2654
diff changeset
1907
3214
8d92d4d829fb plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents: 3172
diff changeset
1908 try:
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1909 # Try to return the session manager
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1910 return self.__session_managers[profile]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1911 except KeyError:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1912 # If a session manager for that profile doesn't exist yet, check whether it is
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1913 # currently being built. A session manager being built is signified by the
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1914 # profile key existing on __session_manager_waiters.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1915 if profile in self.__session_manager_waiters:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1916 # If the session manager is being built, add ourselves to the waiting
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1917 # queue
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1918 deferred = defer.Deferred()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1919 self.__session_manager_waiters[profile].append(deferred)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1920 return cast(omemo.SessionManager, await deferred)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1921
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1922 # If the session manager is not being built, do so here.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1923 self.__session_manager_waiters[profile] = []
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1924
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1925 # Build and store the session manager
3929
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1926 try:
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1927 session_manager = await prepare_for_profile(
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1928 self.__sat,
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1929 profile,
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1930 initial_own_label="Libervia"
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1931 )
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1932 except Exception as e:
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1933 # In case of an error during initalization, notify the waiters accordingly
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1934 # and delete them
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1935 for waiter in self.__session_manager_waiters[profile]:
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1936 waiter.errback(e)
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1937 del self.__session_manager_waiters[profile]
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1938
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1939 # Re-raise the exception
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1940 raise
42d3110ac9b1 plugin XEP-0384: proper handling of exceptions in `prepare_for_profile`
Syndace <me@syndace.dev>
parents: 3919
diff changeset
1941
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1942 self.__session_managers[profile] = session_manager
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
1943
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1944 # Notify the waiters and delete them
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1945 for waiter in self.__session_manager_waiters[profile]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1946 waiter.callback(session_manager)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1947 del self.__session_manager_waiters[profile]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1948
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1949 return session_manager
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
1950
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1951 async def __message_received_trigger_atm(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1952 self,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1953 client: SatXMPPClient,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1954 message_elt: domish.Element,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1955 session_manager: omemo.SessionManager,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1956 sender_device_information: omemo.DeviceInformation,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1957 timestamp: datetime
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1958 ) -> None:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1959 """Check a newly decrypted message stanza for ATM content and perform ATM in case.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1960
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1961 @param client: The client which received the message.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1962 @param message_elt: The message element. Can be modified.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1963 @param session_manager: The session manager.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1964 @param sender_device_information: Information about the device that sent/encrypted
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1965 the message.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1966 @param timestamp: Timestamp extracted from the SCE time affix.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1967 """
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1968
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1969 trust_message_cache = persistent.LazyPersistentBinaryDict(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1970 "XEP-0384/TM",
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1971 client.profile
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1972 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1973
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1974 new_cache_entries: Set[TrustMessageCacheEntry] = set()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1975
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1976 for trust_message_elt in message_elt.elements(NS_TM, "trust-message"):
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1977 assert isinstance(trust_message_elt, domish.Element)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1978
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1979 try:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1980 TRUST_MESSAGE_SCHEMA.validate(trust_message_elt.toXml())
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1981 except xmlschema.XMLSchemaValidationError as e:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1982 raise exceptions.ParsingError(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1983 "<trust-message/> element doesn't pass schema validation."
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1984 ) from e
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1985
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1986 if trust_message_elt["usage"] != NS_ATM:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1987 # Skip non-ATM trust message
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1988 continue
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1989
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1990 if trust_message_elt["encryption"] != OMEMO.NS_TWOMEMO:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1991 # Skip non-twomemo trust message
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1992 continue
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1993
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1994 for key_owner_elt in trust_message_elt.elements(NS_TM, "key-owner"):
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1995 assert isinstance(key_owner_elt, domish.Element)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1996
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1997 key_owner_jid = jid.JID(key_owner_elt["jid"]).userhostJID()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1998
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
1999 for trust_elt in key_owner_elt.elements(NS_TM, "trust"):
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2000 assert isinstance(trust_elt, domish.Element)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2001
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2002 new_cache_entries.add(TrustMessageCacheEntry(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2003 sender_jid=jid.JID(sender_device_information.bare_jid),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2004 sender_key=sender_device_information.identity_key,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2005 timestamp=timestamp,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2006 trust_update=TrustUpdate(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2007 target_jid=key_owner_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2008 target_key=base64.b64decode(str(trust_elt)),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2009 target_trust=True
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2010 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2011 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2012
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2013 for distrust_elt in key_owner_elt.elements(NS_TM, "distrust"):
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2014 assert isinstance(distrust_elt, domish.Element)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2015
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2016 new_cache_entries.add(TrustMessageCacheEntry(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2017 sender_jid=jid.JID(sender_device_information.bare_jid),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2018 sender_key=sender_device_information.identity_key,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2019 timestamp=timestamp,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2020 trust_update=TrustUpdate(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2021 target_jid=key_owner_jid,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2022 target_key=base64.b64decode(str(distrust_elt)),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2023 target_trust=False
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2024 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2025 ))
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2026
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2027 # Load existing cache entries
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2028 existing_cache_entries = cast(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2029 Set[TrustMessageCacheEntry],
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2030 await trust_message_cache.get("cache", set())
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2031 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2032
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2033 # Discard cache entries by timestamp comparison
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2034 existing_by_target = {
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2035 (
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2036 cache_entry.trust_update.target_jid.userhostJID(),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2037 cache_entry.trust_update.target_key
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2038 ): cache_entry
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2039 for cache_entry
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2040 in existing_cache_entries
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2041 }
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2042
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2043 # Iterate over a copy here, such that new_cache_entries can be modified
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2044 for new_cache_entry in set(new_cache_entries):
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2045 existing_cache_entry = existing_by_target.get(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2046 (
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2047 new_cache_entry.trust_update.target_jid.userhostJID(),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2048 new_cache_entry.trust_update.target_key
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2049 ),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2050 None
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2051 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2052
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2053 if existing_cache_entry is not None:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2054 if existing_cache_entry.timestamp > new_cache_entry.timestamp:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2055 # If the existing cache entry is newer than the new cache entry,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2056 # discard the new one in favor of the existing one
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2057 new_cache_entries.remove(new_cache_entry)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2058 else:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2059 # Otherwise, discard the existing cache entry. This includes the case
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2060 # when both cache entries have matching timestamps.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2061 existing_cache_entries.remove(existing_cache_entry)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2062
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2063 # If the sending device is trusted, apply the new cache entries
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2064 applied_trust_updates: Set[TrustUpdate] = set()
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2065
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2066 if TrustLevel(sender_device_information.trust_level_name) is TrustLevel.TRUSTED:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2067 # Iterate over a copy such that new_cache_entries can be modified
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2068 for cache_entry in set(new_cache_entries):
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2069 trust_update = cache_entry.trust_update
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2070
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2071 trust_level = (
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2072 TrustLevel.TRUSTED
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2073 if trust_update.target_trust
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2074 else TrustLevel.DISTRUSTED
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2075 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2076
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2077 await session_manager.set_trust(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2078 trust_update.target_jid.userhost(),
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2079 trust_update.target_key,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2080 trust_level.name
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2081 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2082
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2083 applied_trust_updates.add(trust_update)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2084
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2085 new_cache_entries.remove(cache_entry)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2086
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2087 # Store the remaining existing and new cache entries
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2088 await trust_message_cache.force(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2089 "cache",
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2090 existing_cache_entries | new_cache_entries
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2091 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2092
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2093 # If the trust of at least one device was modified, run the ATM cache update logic
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2094 if len(applied_trust_updates) > 0:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2095 await manage_trust_message_cache(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2096 client,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2097 session_manager,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2098 frozenset(applied_trust_updates)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2099 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2100
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2101 async def _message_received_trigger(
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2102 self,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2103 client: SatXMPPClient,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2104 message_elt: domish.Element,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2105 post_treat: defer.Deferred
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2106 ) -> bool:
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2107 """
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2108 @param client: The client which received the message.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2109 @param message_elt: The message element. Can be modified.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2110 @param post_treat: A deferred which evaluates to a :class:`MessageData` once the
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2111 message has fully progressed through the message receiving flow. Can be used
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2112 to apply treatments to the fully processed message, like marking it as
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2113 encrypted.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2114 @return: Whether to continue the message received flow.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2115 """
4007
1d5a81e3c9e8 plugin XEP-0384: skip MessageReceived trigger when in a component:
Goffi <goffi@goffi.org>
parents: 4004
diff changeset
2116 if client.is_component:
1d5a81e3c9e8 plugin XEP-0384: skip MessageReceived trigger when in a component:
Goffi <goffi@goffi.org>
parents: 4004
diff changeset
2117 return True
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2118 muc_plaintext_cache_key: Optional[MUCPlaintextCacheKey] = None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2119
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2120 sender_jid = jid.JID(message_elt["from"])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2121 feedback_jid: jid.JID
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2122
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2123 message_type = message_elt.getAttribute("type", C.MESS_TYPE_NORMAL)
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2124 is_muc_message = message_type == C.MESS_TYPE_GROUPCHAT
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2125 if is_muc_message:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2126 if self.__xep_0045 is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2127 log.warning(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2128 "Ignoring MUC message since plugin XEP-0045 is not available."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2129 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2130 # Can't handle a MUC message without XEP-0045, let the flow continue
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2131 # normally
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2132 return True
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2133
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2134 room_jid = feedback_jid = sender_jid.userhostJID()
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2135
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2136 try:
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2137 room = cast(muc.Room, self.__xep_0045.getRoom(client, room_jid))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2138 except exceptions.NotFound:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2139 log.warning(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2140 f"Ignoring MUC message from a room that has not been joined:"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2141 f" {room_jid}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2142 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2143 # Whatever, let the flow continue
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2144 return True
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2145
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2146 sender_user = cast(Optional[muc.User], room.getUser(sender_jid.resource))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2147 if sender_user is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2148 log.warning(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2149 f"Ignoring MUC message from room {room_jid} since the sender's user"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2150 f" wasn't found {sender_jid.resource}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2151 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2152 # Whatever, let the flow continue
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2153 return True
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2154
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2155 sender_user_jid = cast(Optional[jid.JID], sender_user.entity)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2156 if sender_user_jid is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2157 log.warning(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2158 f"Ignoring MUC message from room {room_jid} since the sender's bare"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2159 f" JID couldn't be found from its user information: {sender_user}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2160 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2161 # Whatever, let the flow continue
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2162 return True
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2163
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2164 sender_jid = sender_user_jid
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2165
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2166 message_uid: Optional[str] = None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2167 if self.__xep_0359 is not None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2168 message_uid = self.__xep_0359.getOriginId(message_elt)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2169 if message_uid is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2170 message_uid = message_elt.getAttribute("id")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2171 if message_uid is not None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2172 muc_plaintext_cache_key = MUCPlaintextCacheKey(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2173 client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2174 room_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2175 message_uid
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2176 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2177 else:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2178 # I'm not sure why this check is required, this code is copied from the old
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2179 # plugin.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2180 if sender_jid.userhostJID() == client.jid.userhostJID():
3944
748094d5a74d plugin XEP-0374, XEP-0384: handle cases where "to" is not set in <message> for `feedback_jid`
Goffi <goffi@goffi.org>
parents: 3943
diff changeset
2181 try:
748094d5a74d plugin XEP-0374, XEP-0384: handle cases where "to" is not set in <message> for `feedback_jid`
Goffi <goffi@goffi.org>
parents: 3943
diff changeset
2182 feedback_jid = jid.JID(message_elt["to"])
748094d5a74d plugin XEP-0374, XEP-0384: handle cases where "to" is not set in <message> for `feedback_jid`
Goffi <goffi@goffi.org>
parents: 3943
diff changeset
2183 except KeyError:
748094d5a74d plugin XEP-0374, XEP-0384: handle cases where "to" is not set in <message> for `feedback_jid`
Goffi <goffi@goffi.org>
parents: 3943
diff changeset
2184 feedback_jid = client.server_jid
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2185 else:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2186 feedback_jid = sender_jid
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2187
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2188 sender_bare_jid = sender_jid.userhost()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2189
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2190 message: Optional[omemo.Message] = None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2191 encrypted_elt: Optional[domish.Element] = None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2192
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2193 twomemo_encrypted_elt = cast(Optional[domish.Element], next(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2194 message_elt.elements(twomemo.twomemo.NAMESPACE, "encrypted"),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2195 None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2196 ))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2197
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2198 oldmemo_encrypted_elt = cast(Optional[domish.Element], next(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2199 message_elt.elements(oldmemo.oldmemo.NAMESPACE, "encrypted"),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2200 None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2201 ))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2202
3943
8dc6a4cfda4b plugin XEP-0384: continue workflow and log error in case of issue in self.__prepare_for_profile:
Goffi <goffi@goffi.org>
parents: 3933
diff changeset
2203 try:
3969
8e7d5796fb23 plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents: 3967
diff changeset
2204 session_manager = await self.get_session_manager(cast(str, client.profile))
3943
8dc6a4cfda4b plugin XEP-0384: continue workflow and log error in case of issue in self.__prepare_for_profile:
Goffi <goffi@goffi.org>
parents: 3933
diff changeset
2205 except Exception as e:
8dc6a4cfda4b plugin XEP-0384: continue workflow and log error in case of issue in self.__prepare_for_profile:
Goffi <goffi@goffi.org>
parents: 3933
diff changeset
2206 log.error(f"error while preparing profile for {client.profile}: {e}")
8dc6a4cfda4b plugin XEP-0384: continue workflow and log error in case of issue in self.__prepare_for_profile:
Goffi <goffi@goffi.org>
parents: 3933
diff changeset
2207 # we don't want to block the workflow
8dc6a4cfda4b plugin XEP-0384: continue workflow and log error in case of issue in self.__prepare_for_profile:
Goffi <goffi@goffi.org>
parents: 3933
diff changeset
2208 return True
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2209
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2210 if twomemo_encrypted_elt is not None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2211 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2212 message = twomemo.etree.parse_message(
3914
4cb38c8312a1 plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
2213 xml_tools.domish_elt_2_et_elt(twomemo_encrypted_elt),
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2214 sender_bare_jid
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2215 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2216 except (ValueError, XMLSchemaValidationError):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2217 log.warning(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2218 f"Ingoring malformed encrypted message for namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2219 f" {twomemo.twomemo.NAMESPACE}: {twomemo_encrypted_elt.toXml()}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2220 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2221 else:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2222 encrypted_elt = twomemo_encrypted_elt
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2223
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2224 if oldmemo_encrypted_elt is not None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2225 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2226 message = await oldmemo.etree.parse_message(
3914
4cb38c8312a1 plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
2227 xml_tools.domish_elt_2_et_elt(oldmemo_encrypted_elt),
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2228 sender_bare_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2229 client.jid.userhost(),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2230 session_manager
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2231 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2232 except (ValueError, XMLSchemaValidationError):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2233 log.warning(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2234 f"Ingoring malformed encrypted message for namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2235 f" {oldmemo.oldmemo.NAMESPACE}: {oldmemo_encrypted_elt.toXml()}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2236 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2237 except omemo.SenderNotFound:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2238 log.warning(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2239 f"Ingoring encrypted message for namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2240 f" {oldmemo.oldmemo.NAMESPACE} by unknown sender:"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2241 f" {oldmemo_encrypted_elt.toXml()}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2242 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2243 else:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2244 encrypted_elt = oldmemo_encrypted_elt
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2245
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2246 if message is None or encrypted_elt is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2247 # None of our business, let the flow continue
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2248 return True
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2249
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2250 message_elt.children.remove(encrypted_elt)
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2251
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2252 log.debug(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2253 f"{message.namespace} message of type {message_type} received from"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2254 f" {sender_bare_jid}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2255 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2256
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2257 plaintext: Optional[bytes]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2258 device_information: omemo.DeviceInformation
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2259
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2260 if (
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2261 muc_plaintext_cache_key is not None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2262 and muc_plaintext_cache_key in self.__muc_plaintext_cache
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2263 ):
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2264 # Use the cached plaintext
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2265 plaintext = self.__muc_plaintext_cache.pop(muc_plaintext_cache_key)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2266
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2267 # Since this message was sent by us, use the own device information here
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2268 device_information, __ = await session_manager.get_own_device_information()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2269 else:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2270 try:
3969
8e7d5796fb23 plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents: 3967
diff changeset
2271 plaintext, device_information, __ = await session_manager.decrypt(message)
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2272 except omemo.MessageNotForUs:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2273 # The difference between this being a debug or a warning is whether there
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2274 # is a body included in the message. Without a body, we can assume that
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2275 # it's an empty OMEMO message used for protocol stability reasons, which
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2276 # is not expected to be sent to all devices of all recipients. If a body
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2277 # is included, we can assume that the message carries content and we
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2278 # missed out on something.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2279 if len(list(message_elt.elements(C.NS_CLIENT, "body"))) > 0:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2280 client.feedback(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2281 feedback_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2282 D_(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2283 f"An OMEMO message from {sender_jid.full()} has not been"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2284 f" encrypted for our device, we can't decrypt it."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2285 ),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2286 { C.MESS_EXTRA_INFO: C.EXTRA_INFO_DECR_ERR }
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2287 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2288 log.warning("Message not encrypted for us.")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2289 else:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2290 log.debug("Message not encrypted for us.")
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2291
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2292 # No point in further processing this message.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2293 return False
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2294 except Exception as e:
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2295 log.warning(_("Can't decrypt message: {reason}\n{xml}").format(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2296 reason=e,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2297 xml=message_elt.toXml()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2298 ))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2299 client.feedback(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2300 feedback_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2301 D_(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2302 f"An OMEMO message from {sender_jid.full()} can't be decrypted:"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2303 f" {e}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2304 ),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2305 { C.MESS_EXTRA_INFO: C.EXTRA_INFO_DECR_ERR }
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2306 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2307 # No point in further processing this message
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2308 return False
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2309
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2310 affix_values: Optional[SCEAffixValues] = None
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2311
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2312 if message.namespace == twomemo.twomemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2313 if plaintext is not None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2314 # XEP_0420.unpack_stanza handles the whole unpacking, including the
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2315 # relevant modifications to the element
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2316 sce_profile = \
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2317 OMEMO.SCE_PROFILE_GROUPCHAT if is_muc_message else OMEMO.SCE_PROFILE
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2318 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2319 affix_values = self.__xep_0420.unpack_stanza(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2320 sce_profile,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2321 message_elt,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2322 plaintext
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2323 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2324 except Exception as e:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2325 log.warning(D_(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2326 f"Error unpacking SCE-encrypted message: {e}\n{plaintext}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2327 ))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2328 client.feedback(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2329 feedback_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2330 D_(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2331 f"An OMEMO message from {sender_jid.full()} was rejected:"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2332 f" {e}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2333 ),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2334 { C.MESS_EXTRA_INFO: C.EXTRA_INFO_DECR_ERR }
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2335 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2336 # No point in further processing this message
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2337 return False
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2338 else:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2339 if affix_values.timestamp is not None:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2340 # TODO: affix_values.timestamp contains the timestamp included in
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2341 # the encrypted element here. The XEP says it SHOULD be displayed
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2342 # with the plaintext by clients.
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2343 pass
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2344
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2345 if message.namespace == oldmemo.oldmemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2346 # Remove all body elements from the original element, since those act as
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2347 # fallbacks in case the encryption protocol is not supported
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2348 for child in message_elt.elements():
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2349 if child.name == "body":
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2350 message_elt.children.remove(child)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2351
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2352 if plaintext is not None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2353 # Add the decrypted body
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2354 message_elt.addElement("body", content=plaintext.decode("utf-8"))
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2355
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2356 # Mark the message as trusted or untrusted. Undecided counts as untrusted here.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2357 trust_level = \
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2358 await session_manager._evaluate_custom_trust_level(device_information)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2359
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2360 if trust_level is omemo.TrustLevel.TRUSTED:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2361 post_treat.addCallback(client.encryption.markAsTrusted)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2362 else:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2363 post_treat.addCallback(client.encryption.markAsUntrusted)
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2364
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2365 # Mark the message as originally encrypted
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2366 post_treat.addCallback(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2367 client.encryption.markAsEncrypted,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2368 namespace=message.namespace
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2369 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2370
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2371 # Handle potential ATM trust updates
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2372 if affix_values is not None and affix_values.timestamp is not None:
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2373 await self.__message_received_trigger_atm(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2374 client,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2375 message_elt,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2376 session_manager,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2377 device_information,
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2378 affix_values.timestamp
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2379 )
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2380
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2381 # Message processed successfully, continue with the flow
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2382 return True
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2383
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2384 async def __send_trigger(self, client: SatXMPPClient, stanza: domish.Element) -> bool:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2385 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2386 @param client: The client sending this message.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2387 @param stanza: The stanza that is about to be sent. Can be modified.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2388 @return: Whether the send message flow should continue or not.
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2389 """
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2390 # SCE is only applicable to message and IQ stanzas
3919
7b2c51bcc8f5 plugin XEP-0384: temporarily disable `<iq>` stanza encryption:
Goffi <goffi@goffi.org>
parents: 3918
diff changeset
2391 # FIXME: temporary disabling IQ stanza encryption
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2392 if stanza.name not in { "message" }: # , "iq" }:
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2393 return True
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2394
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2395 # Get the intended recipient
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2396 recipient = stanza.getAttribute("to", None)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2397 if recipient is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2398 if stanza.name == "message":
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2399 # Message stanzas must have a recipient
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2400 raise exceptions.InternalError(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2401 f"Message without recipient encountered. Blocking further processing"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2402 f" to avoid leaking plaintext data: {stanza.toXml()}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2403 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2404
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2405 # IQs without a recipient are a thing, I believe those simply target the
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2406 # server and are thus not eligible for e2ee anyway.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2407 return True
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2408
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2409 # Parse the JID
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2410 recipient_bare_jid = jid.JID(recipient).userhostJID()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2411
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2412 # Check whether encryption with twomemo is requested
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2413 encryption = client.encryption.getSession(recipient_bare_jid)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2414
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2415 if encryption is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2416 # Encryption is not requested for this recipient
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2417 return True
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2418
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2419 if encryption["plugin"].namespace != twomemo.twomemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2420 # Encryption is requested for this recipient, but not with twomemo
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2421 return True
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2422
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2423 # All pre-checks done, we can start encrypting!
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2424 await self.encrypt(
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2425 client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2426 twomemo.twomemo.NAMESPACE,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2427 stanza,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2428 recipient_bare_jid,
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2429 stanza.getAttribute("type", C.MESS_TYPE_NORMAL) == C.MESS_TYPE_GROUPCHAT,
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2430 stanza.getAttribute("id", None)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2431 )
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2432
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2433 # Add a store hint if this is a message stanza
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2434 if stanza.name == "message":
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2435 self.__xep_0334.addHintElements(stanza, [ "store" ])
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2436
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2437 # Let the flow continue.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2438 return True
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2439
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2440 async def __send_message_data_trigger(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2441 self,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2442 client: SatXMPPClient,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2443 mess_data: MessageData
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2444 ) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2445 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2446 @param client: The client sending this message.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2447 @param mess_data: The message data that is about to be sent. Can be modified.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2448 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2449
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2450 # Check whether encryption is requested for this message
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2451 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2452 namespace = mess_data[C.MESS_KEY_ENCRYPTION]["plugin"].namespace
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2453 except KeyError:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2454 return
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2455
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2456 # If encryption is requested, check whether it's oldmemo
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2457 if namespace != oldmemo.oldmemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2458 return
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2459
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2460 # All pre-checks done, we can start encrypting!
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2461 stanza = mess_data["xml"]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2462 recipient_jid = mess_data["to"]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2463 is_muc_message = mess_data["type"] == C.MESS_TYPE_GROUPCHAT
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2464 stanza_id = mess_data["uid"]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2465
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2466 await self.encrypt(
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2467 client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2468 oldmemo.oldmemo.NAMESPACE,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2469 stanza,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2470 recipient_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2471 is_muc_message,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2472 stanza_id
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2473 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2474
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2475 # Add a store hint
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2476 self.__xep_0334.addHintElements(stanza, [ "store" ])
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2477
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2478 async def encrypt(
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2479 self,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2480 client: SatXMPPClient,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2481 namespace: Literal["urn:xmpp:omemo:2", "eu.siacs.conversations.axolotl"],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2482 stanza: domish.Element,
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2483 recipient_jids: Union[jid.JID, Set[jid.JID]],
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2484 is_muc_message: bool,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2485 stanza_id: Optional[str]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2486 ) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2487 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2488 @param client: The client.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2489 @param namespace: The namespace of the OMEMO version to use.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2490 @param stanza: The stanza. Twomemo will encrypt the whole stanza using SCE,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2491 oldmemo will encrypt only the body. The stanza is modified by this call.
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2492 @param recipient_jid: The JID of the recipients.
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2493 Can be a bare (aka "userhost") JIDs but doesn't have to.
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2494 A single JID can be used.
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2495 @param is_muc_message: Whether the stanza is a message stanza to a MUC room.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2496 @param stanza_id: The id of this stanza. Especially relevant for message stanzas
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2497 to MUC rooms such that the outgoing plaintext can be cached for MUC message
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2498 reflection handling.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2499
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2500 @warning: The calling code MUST take care of adding the store message processing
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2501 hint to the stanza if applicable! This can be done before or after this call,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2502 the order doesn't matter.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2503 """
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2504 if isinstance(recipient_jids, jid.JID):
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2505 recipient_jids = {recipient_jids}
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2506 if not recipient_jids:
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2507 raise exceptions.InternalError("At least one JID must be specified")
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2508 recipient_jid = next(iter(recipient_jids))
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2509
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2510 muc_plaintext_cache_key: Optional[MUCPlaintextCacheKey] = None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2511
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2512 recipient_bare_jids: Set[str]
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2513 feedback_jid: jid.JID
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2514
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2515 if is_muc_message:
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2516 if len(recipient_jids) != 1:
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2517 raise exceptions.InternalError(
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2518 'Only one JID can be set when "is_muc_message" is set'
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2519 )
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2520 if self.__xep_0045 is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2521 raise exceptions.InternalError(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2522 "Encryption of MUC message requested, but plugin XEP-0045 is not"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2523 " available."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2524 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2525
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2526 if stanza_id is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2527 raise exceptions.InternalError(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2528 "Encryption of MUC message requested, but stanza id not available."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2529 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2530
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2531 room_jid = feedback_jid = recipient_jid.userhostJID()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2532
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2533 recipient_bare_jids = self.__get_joined_muc_users(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2534 client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2535 self.__xep_0045,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2536 room_jid
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2537 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2538
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2539 muc_plaintext_cache_key = MUCPlaintextCacheKey(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2540 client=client,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2541 room_jid=room_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2542 message_uid=stanza_id
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2543 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2544 else:
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3969
diff changeset
2545 recipient_bare_jids = {r.userhost() for r in recipient_jids}
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2546 feedback_jid = recipient_jid.userhostJID()
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2547
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2548 log.debug(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2549 f"Intercepting message that is to be encrypted by {namespace} for"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2550 f" {recipient_bare_jids}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2551 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2552
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2553 def prepare_stanza() -> Optional[bytes]:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2554 """Prepares the stanza for encryption.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2555
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2556 Does so by removing all parts that are not supposed to be sent in plain. Also
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2557 extracts/prepares the plaintext to encrypt.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2558
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2559 @return: The plaintext to encrypt. Returns ``None`` in case body-only
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2560 encryption is requested and no body was found. The function should
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2561 gracefully return in that case, i.e. it's not a critical error that should
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2562 abort the message sending flow.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2563 """
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2564
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2565 if namespace == twomemo.twomemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2566 return self.__xep_0420.pack_stanza(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2567 OMEMO.SCE_PROFILE_GROUPCHAT if is_muc_message else OMEMO.SCE_PROFILE,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2568 stanza
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2569 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2570
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2571 if namespace == oldmemo.oldmemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2572 plaintext: Optional[bytes] = None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2573
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2574 for child in stanza.elements():
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2575 if child.name == "body" and plaintext is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2576 plaintext = str(child).encode("utf-8")
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2577
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2578 # Any other sensitive elements to remove here?
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2579 if child.name in { "body", "html" }:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2580 stanza.children.remove(child)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2581
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2582 if plaintext is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2583 log.warning(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2584 "No body found in intercepted message to be encrypted with"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2585 " oldmemo."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2586 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2587
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2588 return plaintext
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2589
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2590 return assert_never(namespace)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2591
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2592 # The stanza/plaintext preparation was moved into its own little function for type
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2593 # safety reasons.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2594 plaintext = prepare_stanza()
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2595 if plaintext is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2596 return
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2597
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2598 log.debug(f"Plaintext to encrypt: {plaintext}")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2599
3969
8e7d5796fb23 plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents: 3967
diff changeset
2600 session_manager = await self.get_session_manager(client.profile)
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2601
3214
8d92d4d829fb plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents: 3172
diff changeset
2602 try:
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2603 messages, encryption_errors = await session_manager.encrypt(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2604 frozenset(recipient_bare_jids),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2605 { namespace: plaintext },
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2606 backend_priority_order=[ namespace ],
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2607 identifier=feedback_jid.userhost()
3214
8d92d4d829fb plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents: 3172
diff changeset
2608 )
8d92d4d829fb plugin XEP-0384: use "max_items=1" for devices and bundles nodes:
Goffi <goffi@goffi.org>
parents: 3172
diff changeset
2609 except Exception as e:
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2610 msg = _(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2611 # pylint: disable=consider-using-f-string
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2612 "Can't encrypt message for {entities}: {reason}".format(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2613 entities=', '.join(recipient_bare_jids),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2614 reason=e
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2615 )
3237
b0c57c9a4bd8 plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents: 3236
diff changeset
2616 )
2859
4e875d9eea48 plugin XEP-0384: give feedback to client when encryption failed
Goffi <goffi@goffi.org>
parents: 2858
diff changeset
2617 log.warning(msg)
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2618 client.feedback(feedback_jid, msg, {
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2619 C.MESS_EXTRA_INFO: C.EXTRA_INFO_ENCR_ERR
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2620 })
2858
31a5038cdf79 plugin XEP-0384: small refactoring to encrypt messages + bugfix:
Goffi <goffi@goffi.org>
parents: 2857
diff changeset
2621 raise e
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
2622
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2623 if len(encryption_errors) > 0:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2624 log.warning(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2625 f"Ignored the following non-critical encryption errors:"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2626 f" {encryption_errors}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2627 )
3104
118d91c932a7 plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents: 3098
diff changeset
2628
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2629 encrypted_errors_stringified = ", ".join([
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2630 f"device {err.device_id} of {err.bare_jid} under namespace"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2631 f" {err.namespace}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2632 for err
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2633 in encryption_errors
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2634 ])
3104
118d91c932a7 plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents: 3098
diff changeset
2635
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2636 client.feedback(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2637 feedback_jid,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2638 D_(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2639 "There were non-critical errors during encryption resulting in some"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2640 " of your destinees' devices potentially not receiving the message."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2641 " This happens when the encryption data/key material of a device is"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2642 " incomplete or broken, which shouldn't happen for actively used"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2643 " devices, and can usually be ignored. The following devices are"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2644 f" affected: {encrypted_errors_stringified}."
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2645 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2646 )
3104
118d91c932a7 plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents: 3098
diff changeset
2647
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2648 message = next(message for message in messages if message.namespace == namespace)
2738
eb58f26ed236 plugin XEP-0384: update to last python-omemo + trust management:
Goffi <goffi@goffi.org>
parents: 2662
diff changeset
2649
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2650 if namespace == twomemo.twomemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2651 # Add the encrypted element
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2652 stanza.addChild(xml_tools.et_elt_2_domish_elt(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2653 twomemo.etree.serialize_message(message)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2654 ))
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2655
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2656 if namespace == oldmemo.oldmemo.NAMESPACE:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2657 # Add the encrypted element
3967
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2658 stanza.addChild(xml_tools.et_elt_2_domish_elt(
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2659 oldmemo.etree.serialize_message(message)
f461f11ea176 plugin XEP-0384: Implementation of Automatic Trust Management:
Syndace <me@syndace.dev>
parents: 3944
diff changeset
2660 ))
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2661
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2662 if muc_plaintext_cache_key is not None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2663 self.__muc_plaintext_cache[muc_plaintext_cache_key] = plaintext
3104
118d91c932a7 plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents: 3098
diff changeset
2664
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2665 async def __on_device_list_update(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2666 self,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2667 items_event: pubsub.ItemsEvent,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2668 profile: str
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2669 ) -> None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2670 """Handle device list updates fired by PEP.
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2671
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2672 @param items_event: The event.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2673 @param profile: The profile this event belongs to.
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2674 """
3104
118d91c932a7 plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents: 3098
diff changeset
2675
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2676 sender = cast(jid.JID, items_event.sender)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2677 items = cast(List[domish.Element], items_event.items)
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2678
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2679 if len(items) > 1:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2680 log.warning("Ignoring device list update with more than one element.")
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2681 return
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2682
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2683 item = next(iter(items), None)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2684 if item is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2685 log.debug("Ignoring empty device list update.")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2686 return
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2687
3914
4cb38c8312a1 plugin XEP-0384, xml_tools: avoid `getItems` timeout + fix empty node crash + parsing:
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
2688 item_elt = xml_tools.domish_elt_2_et_elt(item)
3104
118d91c932a7 plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents: 3098
diff changeset
2689
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2690 device_list: Dict[int, Optional[str]] = {}
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2691 namespace: Optional[str] = None
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2692
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2693 list_elt = item_elt.find(f"{{{twomemo.twomemo.NAMESPACE}}}devices")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2694 if list_elt is not None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2695 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2696 device_list = twomemo.etree.parse_device_list(list_elt)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2697 except XMLSchemaValidationError:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2698 pass
3104
118d91c932a7 plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents: 3098
diff changeset
2699 else:
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2700 namespace = twomemo.twomemo.NAMESPACE
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2701
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2702 list_elt = item_elt.find(f"{{{oldmemo.oldmemo.NAMESPACE}}}list")
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2703 if list_elt is not None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2704 try:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2705 device_list = oldmemo.etree.parse_device_list(list_elt)
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2706 except XMLSchemaValidationError:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2707 pass
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2708 else:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2709 namespace = oldmemo.oldmemo.NAMESPACE
3104
118d91c932a7 plugin XEP-0384: OMEMO for MUC implementation:
Goffi <goffi@goffi.org>
parents: 3098
diff changeset
2710
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2711 if namespace is None:
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2712 log.warning(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2713 f"Malformed device list update item:"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2714 f" {ET.tostring(item_elt, encoding='unicode')}"
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2715 )
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2716 return
2648
0f76813afc57 plugin XEP-0384: OMEMO implementation first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2717
3969
8e7d5796fb23 plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents: 3967
diff changeset
2718 session_manager = await self.get_session_manager(profile)
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2719
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2720 await session_manager.update_device_list(
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2721 namespace,
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2722 sender.userhost(),
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2723 device_list
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3797
diff changeset
2724 )