Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_xep_0424.py @ 4219:1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
when a peer jid was not in our roster, devices list was not retrieved, resulting in failed
en/decryption. This patch does check it and download missing devices list in necessary.
There is no subscription managed yet, so the list won't be updated in case of new devices,
this should be addressed at some point.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 05 Mar 2024 17:31:36 +0100 |
parents | 7eda7cb8a15c |
children |
rev | line source |
---|---|
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/env python3 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 # Copyright (C) 2009-2022 Jérôme Poisson (goffi@goffi.org) |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 # This program is free software: you can redistribute it and/or modify |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 # it under the terms of the GNU Affero General Public License as published by |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # the Free Software Foundation, either version 3 of the License, or |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # (at your option) any later version. |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 # This program is distributed in the hope that it will be useful, |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # GNU Affero General Public License for more details. |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 # You should have received a copy of the GNU Affero General Public License |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 import time |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
19 from typing import Any, Dict |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
21 from sqlalchemy.orm.attributes import flag_modified |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
22 from twisted.internet import defer |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
23 from twisted.words.protocols.jabber import jid, xmlstream |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 from twisted.words.xish import domish |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
25 from wokkel import disco |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 from zope.interface import implementer |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
28 from libervia.backend.core import exceptions |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
29 from libervia.backend.core.constants import Const as C |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
30 from libervia.backend.core.core_types import MessageData, SatXMPPEntity |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
31 from libervia.backend.core.i18n import D_, _ |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
32 from libervia.backend.core.log import getLogger |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4051
diff
changeset
|
33 from libervia.backend.memory.sqla_mapping import History |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
34 from libervia.backend.tools.common import data_format |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 log = getLogger(__name__) |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 PLUGIN_INFO = { |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 C.PI_NAME: "Message Retraction", |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 C.PI_IMPORT_NAME: "XEP-0424", |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 C.PI_TYPE: "XEP", |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 C.PI_MODES: C.PLUG_MODE_BOTH, |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
44 C.PI_PROTOCOLS: ["XEP-0424"], |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
45 C.PI_DEPENDENCIES: ["XEP-0334", "XEP-0428"], |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
46 C.PI_RECOMMENDATIONS: ["XEP-0045"], |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 C.PI_MAIN: "XEP_0424", |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 C.PI_HANDLER: "yes", |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 C.PI_DESCRIPTION: _("""Implementation Message Retraction"""), |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 } |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
52 NS_MESSAGE_RETRACT = "urn:xmpp:message-retract:1" |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 CATEGORY = "Privacy" |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 NAME = "retract_history" |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 LABEL = D_("Keep History of Retracted Messages") |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 PARAMS = """ |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 <params> |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 <individual> |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
60 <category name="{category_name}"> |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 <param name="{name}" label="{label}" type="bool" value="false" /> |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 </category> |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 </individual> |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
64 </params> |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 """.format( |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
66 category_name=CATEGORY, name=NAME, label=_(LABEL) |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
67 ) |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
68 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
69 |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
70 class XEP_0424: |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 def __init__(self, host): |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
72 log.info(f"plugin {PLUGIN_INFO[C.PI_NAME]!r} initialization") |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 self.host = host |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3887
diff
changeset
|
74 host.memory.update_params(PARAMS) |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 self._h = host.plugins["XEP-0334"] |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
76 self._m = host.plugins.get("XEP-0045") |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3887
diff
changeset
|
77 host.register_namespace("message-retract", NS_MESSAGE_RETRACT) |
4051
c23cad65ae99
core: renamed `messageReceived` trigger to `message_received`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
78 host.trigger.add("message_received", self._message_received_trigger, 100) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3887
diff
changeset
|
79 host.bridge.add_method( |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3887
diff
changeset
|
80 "message_retract", |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
81 ".plugin", |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
82 in_sign="ss", |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
83 out_sign="", |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 method=self._retract, |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 async_=True, |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
86 ) |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3887
diff
changeset
|
88 def get_handler(self, __): |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 return XEP_0424_handler() |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
90 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
91 def _retract(self, message_id: str, profile: str) -> None: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3887
diff
changeset
|
92 client = self.host.get_client(profile) |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
93 return defer.ensureDeferred(self.retract(client, message_id)) |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
95 def send_retract( |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
96 self, client: SatXMPPEntity, peer_jid: jid.JID, retract_id: str, history: History |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
97 ) -> None: |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
98 """Send a message retraction using origin-id |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
99 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
100 [retract] should be prefered: internal ID should be used as it is independant of |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 XEPs changes. However, in some case messages may not be stored in database |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
102 (notably for some components), and then this method can be used |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
103 |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
104 @param retract_id: ID (origin or stanza according to XEP-0359) of message to |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
105 retract |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
106 @param history: history instance of the message to retract |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
107 """ |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
108 message_elt = domish.Element((None, "message")) |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
109 message_elt["from"] = client.jid.full() |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
110 message_elt["to"] = peer_jid.full() |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
111 message_elt["type"] = history.type |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
112 retract_elt = message_elt.addElement((NS_MESSAGE_RETRACT, "retract")) |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
113 retract_elt["id"] = retract_id |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3887
diff
changeset
|
114 self.host.plugins["XEP-0428"].add_fallback_elt( |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
115 message_elt, |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
116 "[A message retraction has been requested, but your client doesn't support " |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
117 "it]", |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
118 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3887
diff
changeset
|
119 self._h.add_hint_elements(message_elt, [self._h.HINT_STORE]) |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
120 client.send(message_elt) |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
121 |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
122 async def retract_by_history(self, client: SatXMPPEntity, history: History) -> None: |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 """Send a message retraction using History instance |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
124 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
125 This method is to use instead of [retract] when the history instance is already |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
126 retrieved. Note that the instance must have messages and subjets loaded |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
127 @param history: history instance of the message to retract |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
128 """ |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
129 if history.type == C.MESS_TYPE_GROUPCHAT: |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
130 is_group_chat = True |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
131 peer_jid = jid.JID(history.source) |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
132 retract_id = history.stanza_id |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
133 else: |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
134 is_group_chat = False |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
135 peer_jid = jid.JID(history.dest) |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
136 if self._m is not None and self._m.is_joined_room(client, peer_jid): |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
137 # it's actually a private MUC message, we need the full JID. |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
138 peer_jid = history.dest_jid |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
139 retract_id = history.origin_id |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
140 |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
141 if not retract_id: |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
142 raise exceptions.FeatureNotFound( |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
143 "Message to retract doesn't have the necessary ID, the sending client is " |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
144 "probably not supporting message retraction." |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
145 ) |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
146 |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
147 self.send_retract(client, peer_jid, retract_id, history) |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
148 if not is_group_chat: |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
149 # retraction will happen when <retract> message will be received in the |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
150 # chat. |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
151 await self.retract_db_history(client, history) |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
152 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
153 async def retract( |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
154 self, |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
155 client: SatXMPPEntity, |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
156 message_id: str, |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
157 ) -> None: |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
158 """Send a message retraction request |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
159 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
160 @param message_id: ID of the message |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
161 This ID is the Libervia internal ID of the message. It will be retrieve from |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
162 database to find the ID used by XMPP (i.e. XEP-0359's "origin ID"). If the |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
163 message is not found in database, an exception will be raised |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
164 """ |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
165 if not message_id: |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
166 raise ValueError("message_id can't be empty") |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
167 history = await self.host.memory.storage.get( |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
168 client, |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
169 History, |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
170 History.uid, |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
171 message_id, |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
172 joined_loads=[History.messages, History.subjects, History.thread], |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
173 ) |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
174 if history is None: |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
175 raise exceptions.NotFound( |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
176 f"message to retract not found in database ({message_id})" |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
177 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3887
diff
changeset
|
178 await self.retract_by_history(client, history) |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
179 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3887
diff
changeset
|
180 async def retract_db_history(self, client, history: History) -> None: |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
181 """Mark an history instance in database as retracted |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
182 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
183 @param history: history instance |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
184 "messages" and "subjects" must be loaded too |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
185 """ |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
186 # FIXME: should we keep history? This is useful to check why a message has been |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
187 # retracted, but if may be bad if the user think it's really deleted |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
188 flag_modified(history, "extra") |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
189 keep_history = await self.host.memory.param_get_a_async( |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
190 NAME, CATEGORY, profile_key=client.profile |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
191 ) |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
192 old_version: Dict[str, Any] = {"timestamp": time.time()} |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
193 if keep_history: |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
194 old_version.update( |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
195 { |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
196 "messages": [m.serialise() for m in history.messages], |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
197 "subjects": [s.serialise() for s in history.subjects], |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
198 } |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
199 ) |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
200 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
201 history.extra.setdefault("old_versions", []).append(old_version) |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
202 |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
203 history.messages.clear() |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
204 history.subjects.clear() |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
205 history.extra["retracted"] = True |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
206 # we remove editions history to keep no trace of old messages |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
207 if "editions" in history.extra: |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
208 del history.extra["editions"] |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
209 if "attachments" in history.extra: |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
210 del history.extra["attachments"] |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
211 await self.host.memory.storage.add(history) |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
212 |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
213 retract_data = MessageData(history.serialise()) |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
214 self.host.bridge.message_update( |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
215 history.uid, |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
216 C.MESS_UPDATE_RETRACT, |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
217 data_format.serialise(retract_data), |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
218 client.profile, |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
219 ) |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
220 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3887
diff
changeset
|
221 async def _message_received_trigger( |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
222 self, |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
223 client: SatXMPPEntity, |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
224 message_elt: domish.Element, |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
225 post_treat: defer.Deferred, |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
226 ) -> bool: |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
227 retract_elt = next(message_elt.elements(NS_MESSAGE_RETRACT, "retract"), None) |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
228 if not retract_elt: |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
229 return True |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
230 try: |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
231 if message_elt.getAttribute("type") == C.MESS_TYPE_GROUPCHAT: |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
232 col_id = History.stanza_id |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
233 else: |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
234 col_id = History.origin_id |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
235 history = await self.host.memory.storage.get( |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
236 client, |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
237 History, |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
238 col_id, |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
239 retract_elt["id"], |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
240 joined_loads=[History.messages, History.subjects, History.thread], |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
241 ) |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
242 except KeyError: |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
243 log.warning(f"invalid retract element, missing id: {retract_elt.toXml()}") |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
244 return False |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
245 from_jid = jid.JID(message_elt["from"]) |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
246 |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
247 if history is not None and ( |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
248 (history.type == C.MESS_TYPE_GROUPCHAT and history.source_jid != from_jid) |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
249 or ( |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
250 history.type != C.MESS_TYPE_GROUPCHAT |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
251 and history.source_jid.userhostJID() != from_jid.userhostJID() |
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
252 ) |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
253 ): |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
254 log.warning( |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
255 f"Received message retraction from {from_jid.full()}, but the message to " |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
256 f"retract is from {history.source_jid.full()}. This maybe a hack " |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
257 f"attempt.\n{message_elt.toXml()}" |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
258 ) |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
259 return False |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
260 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3887
diff
changeset
|
261 if not await self.host.trigger.async_point( |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
262 "XEP-0424_retract_received", client, message_elt, retract_elt, history |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
263 ): |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
264 return False |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
265 |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
266 if history is None: |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
267 # we check history after the trigger because we may be in a component which |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
268 # doesn't store messages in database. |
4199
7eda7cb8a15c
plugin XEP-0424: fix ID used and recipients
Goffi <goffi@goffi.org>
parents:
4166
diff
changeset
|
269 log.warning(f"No message found with given id: {message_elt.toXml()}") |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
270 return False |
4166
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
271 log.info(f"[{client.profile}] retracting message {history.uid!r}") |
a1f7040b5a15
plugin XEP-0424: message retraction update:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
272 await self.retract_db_history(client, history) |
3801
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
273 return False |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
274 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
275 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
276 @implementer(disco.IDisco) |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
277 class XEP_0424_handler(xmlstream.XMPPHandler): |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
278 def getDiscoInfo(self, __, target, nodeIdentifier=""): |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
279 return [disco.DiscoFeature(NS_MESSAGE_RETRACT)] |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
280 |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
281 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
6952a002abc7
plugin XEP-424: Message Retractation implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
282 return [] |