Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0470.py @ 3983:31c3d6652115
component AP gateway: ignore actor delection notifications:
When a `Delete` activity was received and the object was the emitting actor itself, the
signature checking was failing if the actor was unknown (due to the impossibility to
retrieve the actor public key, as it is no more accessible).
To avoid that, those notifications are ignored for now. In the future they should clean
the cache linked to this actor.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 15 Nov 2022 18:15:16 +0100 |
parents | 3cb9ade2ab84 |
children | 722c25818778 |
rev | line source |
---|---|
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/env python3 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 # Libervia plugin for Pubsub Attachments |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 # Copyright (C) 2009-2022 Jérôme Poisson (goffi@goffi.org) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 # This program is free software: you can redistribute it and/or modify |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # it under the terms of the GNU Affero General Public License as published by |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # the Free Software Foundation, either version 3 of the License, or |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 # (at your option) any later version. |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 # This program is distributed in the hope that it will be useful, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # GNU Affero General Public License for more details. |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 # You should have received a copy of the GNU Affero General Public License |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 from typing import List, Tuple, Dict, Any, Callable, Optional |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 from twisted.words.protocols.jabber import jid, xmlstream, error |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 from twisted.words.xish import domish |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
23 from twisted.internet import defer |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 from zope.interface import implementer |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
25 from wokkel import pubsub, disco, iwokkel |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 from sat.core.constants import Const as C |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
28 from sat.core.i18n import _ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 from sat.core.log import getLogger |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 from sat.core.core_types import SatXMPPEntity |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 from sat.core import exceptions |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 from sat.tools.common import uri, data_format, date_utils |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
33 from sat.tools.utils import asDeferred, xmpp_date |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 log = getLogger(__name__) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
38 IMPORT_NAME = "XEP-0470" |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 PLUGIN_INFO = { |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 C.PI_NAME: "Pubsub Attachments", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 C.PI_IMPORT_NAME: IMPORT_NAME, |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
43 C.PI_TYPE: C.PLUG_TYPE_XEP, |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 C.PI_MODES: C.PLUG_MODE_BOTH, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 C.PI_PROTOCOLS: [], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 C.PI_DEPENDENCIES: ["XEP-0060"], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 C.PI_MAIN: "PubsubAttachments", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 C.PI_HANDLER: "yes", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 C.PI_DESCRIPTION: _("""Pubsub Attachments implementation"""), |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 } |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 NS_PREFIX = "urn:xmpp:pubsub-attachments:" |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
52 NS_PUBSUB_ATTACHMENTS = f"{NS_PREFIX}1" |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
53 NS_PUBSUB_ATTACHMENTS_SUM = f"{NS_PREFIX}summary:1" |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 class PubsubAttachments: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 namespace = NS_PUBSUB_ATTACHMENTS |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 def __init__(self, host): |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
60 log.info(_("XEP-0470 (Pubsub Attachments) plugin initialization")) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 host.registerNamespace("pubsub-attachments", NS_PUBSUB_ATTACHMENTS) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 self.host = host |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 self._p = host.plugins["XEP-0060"] |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
64 self.handlers: Dict[Tuple[str, str], dict[str, Any]] = {} |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 host.trigger.add("XEP-0277_send", self.onMBSend) |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
66 self.register_attachment_handler( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
67 "noticed", NS_PUBSUB_ATTACHMENTS, self.noticedGet, self.noticedSet |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
68 ) |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
69 self.register_attachment_handler( |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
70 "reactions", NS_PUBSUB_ATTACHMENTS, self.reactionsGet, self.reactionsSet |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
72 host.bridge.addMethod( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 "psAttachmentsGet", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
74 ".plugin", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 in_sign="sssasss", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
76 out_sign="(ss)", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
77 method=self._get, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
78 async_=True, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
79 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
80 host.bridge.addMethod( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
81 "psAttachmentsSet", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
82 ".plugin", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
83 in_sign="ss", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 out_sign="", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 method=self._set, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
86 async_=True, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
88 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 def getHandler(self, client): |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
90 return PubsubAttachments_Handler() |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
91 |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
92 def register_attachment_handler( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
93 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 name: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
95 namespace: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
96 get_cb: Callable[ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
97 [SatXMPPEntity, domish.Element, Dict[str, Any]], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
98 None], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
99 set_cb: Callable[ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
100 [SatXMPPEntity, Dict[str, Any], Optional[domish.Element]], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 Optional[domish.Element]], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
102 ) -> None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 """Register callbacks to handle an attachment |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
104 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
105 @param name: name of the element |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
106 @param namespace: namespace of the element |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
107 (name, namespace) couple must be unique |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
108 @param get: method to call when attachments are retrieved |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
109 it will be called with (client, element, data) where element is the |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
110 <attachments> element to parse, and data must be updated in place with |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
111 parsed data |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
112 @param set: method to call when the attachment need to be set or udpated |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
113 it will be called with (client, data, former_elt of None if there was no |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
114 former element). When suitable, ``operation`` should be used to check if we |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
115 request an ``update`` or a ``replace``. |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
116 The callback can be either a blocking method, a Deferred or a coroutine |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
117 """ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
118 key = (name, namespace) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
119 if key in self.handlers: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
120 raise exceptions.ConflictError( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
121 f"({name}, {namespace}) attachment handlers are already registered" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
122 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 self.handlers[(name, namespace)] = { |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
124 "get": get_cb, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
125 "set": set_cb |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
126 } |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
127 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
128 def getAttachmentNodeName(self, service: jid.JID, node: str, item: str) -> str: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
129 """Generate name to use for attachment node""" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
130 target_item_uri = uri.buildXMPPUri( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
131 "pubsub", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
132 path=service.userhost(), |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
133 node=node, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
134 item=item |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
135 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
136 return f"{NS_PUBSUB_ATTACHMENTS}/{target_item_uri}" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
137 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
138 def isAttachmentNode(self, node: str) -> bool: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 """Return True if node name is an attachment node""" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
140 return node.startswith(f"{NS_PUBSUB_ATTACHMENTS}/") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
141 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
142 def attachmentNode2Item(self, node: str) -> Tuple[jid.JID, str, str]: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
143 """Retrieve service, node and item from attachement node's name""" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
144 if not self.isAttachmentNode(node): |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
145 raise ValueError("this is not an attachment node!") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
146 prefix_len = len(f"{NS_PUBSUB_ATTACHMENTS}/") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
147 item_uri = node[prefix_len:] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
148 parsed_uri = uri.parseXMPPUri(item_uri) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
149 if parsed_uri["type"] != "pubsub": |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
150 raise ValueError(f"unexpected URI type, it must be a pubsub URI: {item_uri}") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
151 try: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
152 service = jid.JID(parsed_uri["path"]) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
153 except RuntimeError: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
154 raise ValueError(f"invalid service in pubsub URI: {item_uri}") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
155 node = parsed_uri["node"] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
156 item = parsed_uri["item"] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
157 return (service, node, item) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
158 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
159 async def onMBSend( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
160 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
161 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
162 service: jid.JID, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
163 node: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
164 item: domish.Element, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
165 data: dict |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
166 ) -> bool: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
167 """trigger to create attachment node on each publication""" |
3945
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
168 await self.create_attachments_node( |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
169 client, service, node, item["id"], autocreate=True |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
170 ) |
3901
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
171 return True |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
172 |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
173 async def create_attachments_node( |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
174 self, |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
175 client: SatXMPPEntity, |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
176 service: jid.JID, |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
177 node: str, |
3945
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
178 item_id: str, |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
179 autocreate: bool = False |
3901
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
180 ): |
3945
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
181 """Create node for attachements if necessary |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
182 |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
183 @param service: service of target node |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
184 @param node: node where target item is published |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
185 @param item_id: ID of target item |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
186 @param autocrate: if True, target node is create if it doesn't exist |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
187 """ |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
188 try: |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
189 node_config = await self._p.getConfiguration(client, service, node) |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
190 except error.StanzaError as e: |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
191 if e.condition == "item-not-found" and autocreate: |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
192 # we auto-create the missing node |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
193 await self._p.createNode( |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
194 client, service, node |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
195 ) |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
196 node_config = await self._p.getConfiguration(client, service, node) |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
197 else: |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
198 raise e |
3901
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
199 try: |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
200 # FIXME: check if this is the best publish_model option |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
201 node_config.fields["pubsub#publish_model"].value = "open" |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
202 except KeyError: |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
203 log.warning("pubsub#publish_model field is missing") |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
204 attachment_node = self.getAttachmentNodeName(service, node, item_id) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
205 # we use the same options as target node |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
206 try: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
207 await self._p.createIfNewNode( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
208 client, service, attachment_node, options=dict(node_config) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
209 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
210 except Exception as e: |
3901
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
211 log.warning(f"Can't create attachment node {attachment_node}: {e}") |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
212 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
213 def items2attachmentData( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
214 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
215 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
216 items: List[domish.Element] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
217 ) -> List[Dict[str, Any]]: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
218 """Convert items from attachment node to attachment data""" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
219 list_data = [] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
220 for item in items: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
221 try: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
222 attachments_elt = next( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
223 item.elements(NS_PUBSUB_ATTACHMENTS, "attachments") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
224 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
225 except StopIteration: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
226 log.warning( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
227 "item is missing <attachments> elements, ignoring it: {item.toXml()}" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
228 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
229 continue |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
230 item_id = item["id"] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
231 publisher_s = item.getAttribute("publisher") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
232 # publisher is not filled by all pubsub service, so we can't count on it |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
233 if publisher_s: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
234 publisher = jid.JID(publisher_s) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
235 if publisher.userhost() != item_id: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
236 log.warning( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
237 f"publisher {publisher.userhost()!r} doesn't correspond to item " |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
238 f"id {item['id']!r}, ignoring. This may be a hack attempt.\n" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
239 f"{item.toXml()}" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
240 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
241 continue |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
242 try: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
243 jid.JID(item_id) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
244 except RuntimeError: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
245 log.warning( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
246 "item ID is not a JID, this is not compliant and is ignored: " |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
247 f"{item.toXml}" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
248 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
249 continue |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
250 data = { |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
251 "from": item_id |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
252 } |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
253 for handler in self.handlers.values(): |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
254 handler["get"](client, attachments_elt, data) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
255 if len(data) > 1: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
256 list_data.append(data) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
257 return list_data |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
258 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
259 def _get( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
260 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
261 service_s: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
262 node: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
263 item: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
264 senders_s: List[str], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
265 extra_s: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
266 profile_key: str |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
267 ) -> defer.Deferred: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
268 client = self.host.getClient(profile_key) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
269 extra = data_format.deserialise(extra_s) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
270 senders = [jid.JID(s) for s in senders_s] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
271 d = defer.ensureDeferred( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
272 self.getAttachments(client, jid.JID(service_s), node, item, senders) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
273 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
274 d.addCallback( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
275 lambda ret: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
276 (data_format.serialise(ret[0]), |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
277 data_format.serialise(ret[1])) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
278 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
279 return d |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
280 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
281 async def getAttachments( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
282 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
283 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
284 service: jid.JID, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
285 node: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
286 item: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
287 senders: Optional[List[jid.JID]], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
288 extra: Optional[dict] = None |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
289 ) -> Tuple[List[Dict[str, Any]], dict]: |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
290 """Retrieve data attached to a pubsub item |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
291 |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
292 @param service: pubsub service where the node is |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
293 @param node: pubsub node containing the item |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
294 @param item: ID of the item for which attachments will be retrieved |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
295 @param senders: bare JIDs of entities that are checked. Attachments from those |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
296 entities will be retrieved. |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
297 If None, attachments from all entities will be retrieved |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
298 @param extra: extra data, will be used as ``extra`` argument when doing |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
299 ``getItems`` call. |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
300 @return: A tuple with: |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
301 - the list of attachments data, one item per found sender. The attachments |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
302 data are dict containing attachment, no ``extra`` field is used here |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
303 (contrarily to attachments data used with ``set_attachements``). |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
304 - metadata returned by the call to ``getItems`` |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
305 """ |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
306 if extra is None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
307 extra = {} |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
308 attachment_node = self.getAttachmentNodeName(service, node, item) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
309 item_ids = [e.userhost() for e in senders] if senders else None |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
310 items, metadata = await self._p.getItems( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
311 client, service, attachment_node, item_ids=item_ids, extra=extra |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
312 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
313 list_data = self.items2attachmentData(client, items) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
314 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
315 return list_data, metadata |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
316 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
317 def _set( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
318 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
319 attachments_s: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
320 profile_key: str |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
321 ) -> None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
322 client = self.host.getClient(profile_key) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
323 attachments = data_format.deserialise(attachments_s) or {} |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
324 return defer.ensureDeferred(self.set_attachements(client, attachments)) |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
325 |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
326 async def apply_set_handler( |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
327 self, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
328 client: SatXMPPEntity, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
329 attachments_data: dict, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
330 item_elt: Optional[domish.Element], |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
331 handlers: Optional[List[Tuple[str, str]]] = None, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
332 from_jid: Optional[jid.JID] = None, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
333 ) -> domish.Element: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
334 """Apply all ``set`` callbacks to an attachments item |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
335 |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
336 @param attachments_data: data describing the attachments |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
337 ``extra`` key will be used, and created if not found |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
338 @param from_jid: jid of the author of the attachments |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
339 ``client.jid.userhostJID()`` will be used if not specified |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
340 @param item_elt: item containing an <attachments> element |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
341 will be modified in place |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
342 if None, a new element will be created |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
343 @param handlers: list of (name, namespace) of handlers to use. |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
344 if None, all registered handlers will be used. |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
345 @return: updated item_elt if given, otherwise a new item_elt |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
346 """ |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
347 attachments_data.setdefault("extra", {}) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
348 if item_elt is None: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
349 item_id = client.jid.userhost() if from_jid is None else from_jid.userhost() |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
350 item_elt = pubsub.Item(item_id) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
351 item_elt.addElement((NS_PUBSUB_ATTACHMENTS, "attachments")) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
352 |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
353 try: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
354 attachments_elt = next( |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
355 item_elt.elements(NS_PUBSUB_ATTACHMENTS, "attachments") |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
356 ) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
357 except StopIteration: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
358 log.warning( |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
359 f"no <attachments> element found, creating a new one: {item_elt.toXml()}" |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
360 ) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
361 attachments_elt = item_elt.addElement((NS_PUBSUB_ATTACHMENTS, "attachments")) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
362 |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
363 if handlers is None: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
364 handlers = list(self.handlers.keys()) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
365 |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
366 for name, namespace in handlers: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
367 try: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
368 handler = self.handlers[(name, namespace)] |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
369 except KeyError: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
370 log.error( |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
371 f"unregistered handler ({name!r}, {namespace!r}) is requested, " |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
372 "ignoring" |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
373 ) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
374 continue |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
375 try: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
376 former_elt = next(attachments_elt.elements(namespace, name)) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
377 except StopIteration: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
378 former_elt = None |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
379 new_elt = await asDeferred( |
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
380 handler["set"], client, attachments_data, former_elt |
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
381 ) |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
382 if new_elt != former_elt: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
383 if former_elt is not None: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
384 attachments_elt.children.remove(former_elt) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
385 if new_elt is not None: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
386 attachments_elt.addChild(new_elt) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
387 return item_elt |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
388 |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
389 async def set_attachements( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
390 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
391 client: SatXMPPEntity, |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
392 attachments_data: Dict[str, Any] |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
393 ) -> None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
394 """Set or update attachments |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
395 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
396 Former <attachments> element will be retrieved and updated. Individual |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
397 attachments replace or update their elements individually, according to the |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
398 "operation" key. |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
399 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
400 "operation" key may be "update" or "replace", and defaults to update, it is only |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
401 used in attachments where "update" makes sense (e.g. it's used for "reactions" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
402 but not for "noticed"). |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
403 |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
404 @param attachments_data: data describing attachments. Various keys (usually stored |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
405 in attachments_data["extra"]) may be used depending on the attachments |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
406 handlers registered. The keys "service", "node" and "id" MUST be set. |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
407 ``attachments_data`` is thought to be compatible with microblog data. |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
408 |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
409 """ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
410 try: |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
411 service = jid.JID(attachments_data["service"]) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
412 node = attachments_data["node"] |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
413 item = attachments_data["id"] |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
414 except (KeyError, RuntimeError): |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
415 raise ValueError( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
416 'data must have "service", "node" and "id" set' |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
417 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
418 attachment_node = self.getAttachmentNodeName(service, node, item) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
419 try: |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
420 items, __ = await self._p.getItems( |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
421 client, service, attachment_node, item_ids=[client.jid.userhost()] |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
422 ) |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
423 except exceptions.NotFound: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
424 item_elt = None |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
425 else: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
426 if not items: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
427 item_elt = None |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
428 else: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
429 item_elt = items[0] |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
430 |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
431 item_elt = await self.apply_set_handler( |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
432 client, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
433 attachments_data, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
434 item_elt=item_elt, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
435 ) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
436 |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
437 try: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
438 await self._p.sendItems(client, service, attachment_node, [item_elt]) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
439 except error.StanzaError as e: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
440 if e.condition == "item-not-found": |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
441 # the node doesn't exist, we can't publish attachments |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
442 log.warning( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
443 f"no attachment node found at {service} on {node!r} for item " |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
444 f"{item!r}, we can't update attachments." |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
445 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
446 raise exceptions.NotFound("No attachment node available") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
447 else: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
448 raise e |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
449 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
450 async def subscribe( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
451 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
452 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
453 service: jid.JID, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
454 node: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
455 item: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
456 ) -> None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
457 """Subscribe to attachment node targeting the item |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
458 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
459 @param service: service of target item (will also be used for attachment node) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
460 @param node: node of target item (used to get attachment node's name) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
461 @param item: name of target item (used to get attachment node's name) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
462 """ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
463 attachment_node = self.getAttachmentNodeName(service, node, item) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
464 await self._p.subscribe(client, service, attachment_node) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
465 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
466 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
467 def setTimestamp(self, attachment_elt: domish.Element, data: dict) -> None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
468 """Check if a ``timestamp`` attribute is set, parse it, and fill data |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
469 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
470 @param attachments_elt: element where the ``timestamp`` attribute may be set |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
471 @param data: data specific to the attachment (i.e. not the whole microblog data) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
472 ``timestamp`` field will be set there if timestamp exists and is parsable |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
473 """ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
474 timestamp_raw = attachment_elt.getAttribute("timestamp") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
475 if timestamp_raw: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
476 try: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
477 timestamp = date_utils.date_parse(timestamp_raw) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
478 except date_utils.ParserError: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
479 log.warning(f"can't parse timestamp: {timestamp_raw}") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
480 else: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
481 data["timestamp"] = timestamp |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
482 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
483 def noticedGet( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
484 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
485 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
486 attachments_elt: domish.Element, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
487 data: Dict[str, Any], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
488 ) -> None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
489 try: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
490 noticed_elt = next( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
491 attachments_elt.elements(NS_PUBSUB_ATTACHMENTS, "noticed") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
492 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
493 except StopIteration: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
494 pass |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
495 else: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
496 noticed_data = { |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
497 "noticed": True |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
498 } |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
499 self.setTimestamp(noticed_elt, noticed_data) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
500 data["noticed"] = noticed_data |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
501 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
502 def noticedSet( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
503 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
504 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
505 data: Dict[str, Any], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
506 former_elt: Optional[domish.Element] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
507 ) -> Optional[domish.Element]: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
508 """add or remove a <noticed> attachment |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
509 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
510 if data["noticed"] is True, element is added, if it's False, it's removed, and |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
511 it's not present or None, the former element is kept. |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
512 """ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
513 noticed = data["extra"].get("noticed") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
514 if noticed is None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
515 return former_elt |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
516 elif noticed: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
517 return domish.Element( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
518 (NS_PUBSUB_ATTACHMENTS, "noticed"), |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
519 attribs = { |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
520 "timestamp": xmpp_date() |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
521 } |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
522 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
523 else: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
524 return None |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
525 |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
526 def reactionsGet( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
527 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
528 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
529 attachments_elt: domish.Element, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
530 data: Dict[str, Any], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
531 ) -> None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
532 try: |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
533 reactions_elt = next( |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
534 attachments_elt.elements(NS_PUBSUB_ATTACHMENTS, "reactions") |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
535 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
536 except StopIteration: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
537 pass |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
538 else: |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
539 reactions_data = {"reactions": []} |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
540 reactions = reactions_data["reactions"] |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
541 for reaction_elt in reactions_elt.elements(NS_PUBSUB_ATTACHMENTS, "reaction"): |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
542 reactions.append(str(reaction_elt)) |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
543 self.setTimestamp(reactions_elt, reactions_data) |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
544 data["reactions"] = reactions_data |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
545 |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
546 def reactionsSet( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
547 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
548 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
549 data: Dict[str, Any], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
550 former_elt: Optional[domish.Element] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
551 ) -> Optional[domish.Element]: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
552 """update the <reaction> attachment""" |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
553 reactions_data = data["extra"].get("reactions") |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
554 if reactions_data is None: |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
555 return former_elt |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
556 operation_type = reactions_data.get("operation", "update") |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
557 if operation_type == "update": |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
558 former_reactions = { |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
559 str(r) for r in former_elt.elements(NS_PUBSUB_ATTACHMENTS, "reaction") |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
560 } if former_elt is not None else set() |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
561 added_reactions = set(reactions_data.get("add") or []) |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
562 removed_reactions = set(reactions_data.get("remove") or []) |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
563 reactions = list((former_reactions | added_reactions) - removed_reactions) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
564 elif operation_type == "replace": |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
565 reactions = reactions_data.get("reactions") or [] |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
566 else: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
567 raise exceptions.DataError(f"invalid reaction operation: {operation_type!r}") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
568 if reactions: |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
569 reactions_elt = domish.Element( |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
570 (NS_PUBSUB_ATTACHMENTS, "reactions"), |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
571 attribs = { |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
572 "timestamp": xmpp_date() |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
573 } |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
574 ) |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
575 for reactions_data in reactions: |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
576 reactions_elt.addElement("reaction", content=reactions_data) |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
577 return reactions_elt |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
578 else: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
579 return None |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
580 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
581 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
582 @implementer(iwokkel.IDisco) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
583 class PubsubAttachments_Handler(xmlstream.XMPPHandler): |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
584 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
585 def getDiscoInfo(self, requestor, service, nodeIdentifier=""): |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
586 return [disco.DiscoFeature(NS_PUBSUB_ATTACHMENTS)] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
587 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
588 def getDiscoItems(self, requestor, service, nodeIdentifier=""): |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
589 return [] |