cancel subscription task if authentication error occurs

This commit is contained in:
Marc Koch 2024-06-21 14:42:48 +02:00
parent a55124c23a
commit acc3a4cd47
1 changed files with 24 additions and 1 deletions

View File

@ -160,7 +160,9 @@ class NtfyBot(Plugin):
line = line.decode("utf-8").strip() line = line.decode("utf-8").strip()
self.log.trace("Received notification: %s", line) self.log.trace("Received notification: %s", line)
message = json.loads(line) message = json.loads(line)
if message["event"] != "message": if not "event" in message or message["event"] != "message":
if "error" in message:
await self.handle_subscription_error(message, topic, self.tasks[topic.id])
continue continue
self.log.debug("Received message event: %s", line) self.log.debug("Received message event: %s", line)
# persist the received message id # persist the received message id
@ -186,6 +188,27 @@ class NtfyBot(Plugin):
self.log.exception( self.log.exception(
"Failed to send matrix message!", exc_info=exc) "Failed to send matrix message!", exc_info=exc)
async def handle_subscription_error(self, message: dict, topic: Topic,
task: asyncio.Task) -> None:
self.log.error(message["error"])
code = message["code"] if "code" in message else None
match code:
case 42909:
if task.cancel():
for sub in await self.db.get_subscriptions(topic.id):
html_content = "<span>Authentication failed, please check the access token. Subscription has been cancelled.</span>"
text_content = await parse_html(html_content.strip())
content = TextMessageEventContent(
msgtype=MessageType.TEXT,
format=Format.HTML,
formatted_body=html_content,
body=text_content,
)
await self.client.send_message(sub.room_id, content)
else:
self.log.error("Failed to cancel subscription task")
def build_message_content(self, server: str, message) -> str: def build_message_content(self, server: str, message) -> str:
topic = message["topic"] topic = message["topic"]
body = message["message"] body = message["message"]