Mercurial > libervia-backend
comparison sat/plugins/plugin_xep_0465.py @ 4008:56e5b18f4d06
plugin XEP-0465: log a warning and return empty list/dict when `forbidden` error is received:
this error probably means that the service doesn't support PPS.
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 16 Mar 2023 12:33:33 +0100 |
parents | b7cef1b24f83 |
children | 524856bd7b19 |
comparison
equal
deleted
inserted
replaced
4007:1d5a81e3c9e8 | 4008:56e5b18f4d06 |
---|---|
18 | 18 |
19 from typing import Optional, List, Dict, Union | 19 from typing import Optional, List, Dict, Union |
20 | 20 |
21 from twisted.words.protocols.jabber.xmlstream import XMPPHandler | 21 from twisted.words.protocols.jabber.xmlstream import XMPPHandler |
22 from twisted.words.protocols.jabber import jid | 22 from twisted.words.protocols.jabber import jid |
23 from twisted.words.protocols.jabber import error | |
23 from twisted.words.xish import domish | 24 from twisted.words.xish import domish |
24 from zope.interface import implementer | 25 from zope.interface import implementer |
25 from wokkel import disco, iwokkel | 26 from wokkel import disco, iwokkel |
26 | 27 |
27 from sat.core.constants import Const as C | 28 from sat.core.constants import Const as C |
48 | 49 |
49 NS_PPS = "urn:xmpp:pps:0" | 50 NS_PPS = "urn:xmpp:pps:0" |
50 NS_PPS_SUBSCRIPTIONS = "urn:xmpp:pps:subscriptions:0" | 51 NS_PPS_SUBSCRIPTIONS = "urn:xmpp:pps:subscriptions:0" |
51 NS_PPS_SUBSCRIBERS = "urn:xmpp:pps:subscribers:0" | 52 NS_PPS_SUBSCRIBERS = "urn:xmpp:pps:subscribers:0" |
52 SUBSCRIBERS_NODE_PREFIX = f"{NS_PPS_SUBSCRIBERS}/" | 53 SUBSCRIBERS_NODE_PREFIX = f"{NS_PPS_SUBSCRIBERS}/" |
54 NOT_IMPLEMENTED_MSG = ( | |
55 "The service at {service!s} doesn't seem to support Pubsub Public Subscriptions " | |
56 "(XEP-0465), please request support from your service administrator." | |
57 ) | |
53 | 58 |
54 | 59 |
55 class XEP_0465: | 60 class XEP_0465: |
56 | 61 |
57 def __init__(self, host): | 62 def __init__(self, host): |
137 @param nodeIdentifier(unicode, None): node to filter | 142 @param nodeIdentifier(unicode, None): node to filter |
138 None to get all subscriptions | 143 None to get all subscriptions |
139 """ | 144 """ |
140 if service is None: | 145 if service is None: |
141 service = client.jid.userhostJID() | 146 service = client.jid.userhostJID() |
142 items, __ = await self.host.plugins["XEP-0060"].getItems( | 147 try: |
143 client, service, NS_PPS_SUBSCRIPTIONS | 148 items, __ = await self.host.plugins["XEP-0060"].getItems( |
144 ) | 149 client, service, NS_PPS_SUBSCRIPTIONS |
150 ) | |
151 except error.StanzaError as e: | |
152 if e.condition == "forbidden": | |
153 log.warning(NOT_IMPLEMENTED_MSG.format(service=service)) | |
154 return [] | |
155 else: | |
156 raise e | |
145 ret = [] | 157 ret = [] |
146 for item in items: | 158 for item in items: |
147 try: | 159 try: |
148 subscription_elt = next(item.elements(NS_PPS, "subscription")) | 160 subscription_elt = next(item.elements(NS_PPS, "subscription")) |
149 except StopIteration: | 161 except StopIteration: |
202 if service is None: | 214 if service is None: |
203 service = client.jid.userhostJID() | 215 service = client.jid.userhostJID() |
204 | 216 |
205 subscribers_node = self.getPublicSubscribersNode(nodeIdentifier) | 217 subscribers_node = self.getPublicSubscribersNode(nodeIdentifier) |
206 | 218 |
207 items, __ = await self.host.plugins["XEP-0060"].getItems( | 219 try: |
208 client, service, subscribers_node | 220 items, __ = await self.host.plugins["XEP-0060"].getItems( |
209 ) | 221 client, service, subscribers_node |
222 ) | |
223 except error.StanzaError as e: | |
224 if e.condition == "forbidden": | |
225 log.warning(NOT_IMPLEMENTED_MSG.format(service=service)) | |
226 return {} | |
227 else: | |
228 raise e | |
210 ret = {} | 229 ret = {} |
211 for item in items: | 230 for item in items: |
212 try: | 231 try: |
213 subscriber_elt = next(item.elements(NS_PPS, "subscriber")) | 232 subscriber_elt = next(item.elements(NS_PPS, "subscriber")) |
214 except StopIteration: | 233 except StopIteration: |