annotate libervia/backend/plugins/plugin_comp_email_gateway/pubsub_service.py @ 4351:6a0a081485b8

plugin autocrypt: Autocrypt protocol implementation: Implementation of autocrypt: `autocrypt` header is checked, and if present and no public key is known for the peer, the key is imported. `autocrypt` header is also added to outgoing message (only if an email gateway is detected). For the moment, the JID is use as identifier, but the real email used by gateway should be used in the future. rel 456
author Goffi <goffi@goffi.org>
date Fri, 28 Feb 2025 09:23:35 +0100
parents 699aa8788d98
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4338
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/env python3
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
2
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
3 # Libervia ActivityPub Gateway
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
5
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
6 # This program is free software: you can redistribute it and/or modify
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # (at your option) any later version.
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
10
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
11 # This program is distributed in the hope that it will be useful,
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # GNU Affero General Public License for more details.
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
15
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
18
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
19 from typing import TYPE_CHECKING
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
20 from twisted.internet import defer
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
21 from twisted.words.protocols.jabber import jid, error
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
22 from twisted.words.xish import domish
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
23 from wokkel import data_form, disco, pubsub, rsm
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
24
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from libervia.backend.core.i18n import _
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
26 from libervia.backend.core.constants import Const as C
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
27 from libervia.backend.core.log import getLogger
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
28 from libervia.backend.plugins.plugin_xep_0498 import NodeData
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
29 from libervia.backend.tools.utils import ensure_deferred
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
30
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
31 if TYPE_CHECKING:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
32 from . import EmailGatewayComponent
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
33
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
34
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
35 log = getLogger(__name__)
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
36
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
37 # all nodes have the same config
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
38 NODE_CONFIG = [
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
39 {"var": "pubsub#persist_items", "type": "boolean", "value": True},
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
40 {"var": "pubsub#max_items", "value": "max"},
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
41 {"var": "pubsub#access_model", "type": "list-single", "value": "open"},
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
42 {"var": "pubsub#publish_model", "type": "list-single", "value": "open"},
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
43 ]
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
44
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
45 NODE_CONFIG_VALUES = {c["var"]: c["value"] for c in NODE_CONFIG}
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
46 NODE_OPTIONS = {c["var"]: {} for c in NODE_CONFIG}
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
47 for c in NODE_CONFIG:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
48 NODE_OPTIONS[c["var"]].update(
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
49 {k: v for k, v in c.items() if k not in ("var", "value")}
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
50 )
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
51
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
52
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
53 class EmailGWPubsubResource(pubsub.PubSubResource):
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
54
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
55 def __init__(self, service: "EmailGWPubsubService") -> None:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
56 self.gateway = service.gateway
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
57 self.host = self.gateway.host
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
58 self.service = service
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
59 self._pfs = service._pfs
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
60 super().__init__()
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
61
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
62 def getNodes(
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
63 self, requestor: jid.JID, service: jid.JID, nodeIdentifier: str
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
64 ) -> defer.Deferred[list[str]]:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
65 return defer.succeed([self._pfs.namespace])
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
66
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
67 @ensure_deferred
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
68 async def items(
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
69 self,
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
70 request: rsm.PubSubRequest,
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
71 ) -> tuple[list[domish.Element], rsm.RSMResponse | None]:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
72 client = self.gateway.client
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
73 assert client is not None
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
74 sender = request.sender.userhostJID()
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
75 if not client.is_local(sender):
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 raise error.StanzaError("forbidden")
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
77
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
78 if request.nodeIdentifier != self._pfs.namespace:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
79 return [], None
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
80
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
81 files = await self.host.memory.get_files(client, sender)
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
82 node_data = NodeData.from_files_data(client.jid, files)
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
83 return node_data.to_elements(), None
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
84
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
85 @ensure_deferred
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
86 async def retract(self, request: rsm.PubSubRequest) -> None:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
87 client = self.gateway.client
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
88 assert client is not None
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
89 sender = request.sender.userhostJID()
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
90 if not client.is_local(sender):
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
91 raise error.StanzaError("forbidden")
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
92 if request.nodeIdentifier != self._pfs.namespace:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
93 raise error.StanzaError("bad-request")
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
94
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
95 for item_id in request.itemIdentifiers:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
96 try:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
97 # FIXME: item ID naming convention must be hanlded using dedicated methods
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
98 # in XEP-0498.
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
99 file_id = item_id.rsplit("_", 1)[1]
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
100 except IndexError:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
101 file_id = ""
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
102 if not file_id:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
103 raise error.StanzaError("bad-request")
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
104 # Ownership is checked by ``file_delete``, and payload deletion is done there
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
105 # too.
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
106 await self.host.memory.file_delete(client, sender.userhostJID(), file_id)
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
107
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
108 @ensure_deferred
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
109 async def subscribe(self, request: rsm.PubSubRequest):
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
110 raise rsm.Unsupported("subscribe")
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
111
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
112 @ensure_deferred
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
113 async def unsubscribe(self, request: rsm.PubSubRequest):
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
114 raise rsm.Unsupported("unsubscribe")
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
115
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
116 def getConfigurationOptions(self):
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
117 return NODE_OPTIONS
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
118
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
119 def getConfiguration(
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
120 self, requestor: jid.JID, service: jid.JID, nodeIdentifier: str
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
121 ) -> defer.Deferred:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
122 return defer.succeed(NODE_CONFIG_VALUES)
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
123
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
124 def getNodeInfo(
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
125 self,
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
126 requestor: jid.JID,
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
127 service: jid.JID,
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
128 nodeIdentifier: str,
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
129 pep: bool = False,
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
130 recipient: jid.JID | None = None,
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
131 ) -> dict | None:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
132 if not nodeIdentifier:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
133 return None
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
134 info = {"type": "leaf", "meta-data": NODE_CONFIG}
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
135 return info
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
136
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
137
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
138 class EmailGWPubsubService(rsm.PubSubService):
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
139 """Pubsub service for XMPP requests"""
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
140
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
141 def __init__(self, gateway: "EmailGatewayComponent"):
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
142 self.gateway = gateway
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
143 self._pfs = gateway._pfs
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
144 resource = EmailGWPubsubResource(self)
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
145 super().__init__(resource)
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
146 self.host = gateway.host
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
147 self.discoIdentity = {
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
148 "category": "pubsub",
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
149 "type": "service",
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
150 "name": "Libervia Email Gateway",
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
151 }
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
152
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
153 @ensure_deferred
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
154 async def getDiscoInfo(
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
155 self, requestor: jid.JID, target: jid.JID, nodeIdentifier: str = ""
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
156 ) -> list[disco.DiscoFeature | disco.DiscoIdentity | data_form.Form]:
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
157 infos = await super().getDiscoInfo(requestor, target, nodeIdentifier)
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
158 infos.append(disco.DiscoFeature(self._pfs.namespace))
7c0b7ecb816f component email gateway: Add a pubsub service:
Goffi <goffi@goffi.org>
parents:
diff changeset
159 return infos