From 8898a0f0a26500a9e37f9acd592dea50fe4196a6 Mon Sep 17 00:00:00 2001 From: Maksim Eltyshev Date: Mon, 9 Feb 2026 13:35:04 +0100 Subject: [PATCH] fix: Block unsupported local Apprise schemas --- .../api/helpers/utils/send-notifications.js | 2 +- server/utils/send_notifications.py | 31 ++++++++++++++++--- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/server/api/helpers/utils/send-notifications.js b/server/api/helpers/utils/send-notifications.js index d9e9b44a..88069f5c 100644 --- a/server/api/helpers/utils/send-notifications.js +++ b/server/api/helpers/utils/send-notifications.js @@ -42,7 +42,7 @@ module.exports = { }, ); } catch (error) { - sails.log.error(`Error sending notifications: ${error.stderr || error.message}`); + sails.log.error(`Error sending notifications:\n${error.stderr || error.message}`); } }, }; diff --git a/server/utils/send_notifications.py b/server/utils/send_notifications.py index 974593ed..fe6bef5e 100644 --- a/server/utils/send_notifications.py +++ b/server/utils/send_notifications.py @@ -7,6 +7,18 @@ import logging import apprise +BLOCKED_SCHEMAS_SET = { + 'syslog', + 'dbus', + 'kde', + 'qt', + 'glib', + 'gnome', + 'macosx', + 'windows', +} + + last_apprise_message = None class CaptureWarningHandler(logging.Handler): def emit(self, record): @@ -34,8 +46,15 @@ if __name__ == '__main__': title = sys.argv[2] body_by_format = json.loads(sys.argv[3]) + errors = [] for service in services: url = service['url'] + schema = url.split(':')[0] + + if schema in BLOCKED_SCHEMAS_SET: + errors.append(f'[{schema}] Blocked service schema') + continue + body_format = service['format'] body = body_by_format[body_format] @@ -43,10 +62,14 @@ if __name__ == '__main__': if not send_notification(url, title, body, body_format): if last_apprise_message: if last_apprise_message == 'There are no service(s) to notify': - sys.stderr.write('Unknown service URL') + errors.append(f'[{schema}] Unknown service URL') else: - sys.stderr.write(last_apprise_message) + errors.append(f'[{schema}] {last_apprise_message}') else: - sys.stderr.write('Unknown error') + errors.append(f'[{schema}] Unknown error') - sys.exit(1) + if errors: + for error in errors: + print(error, file=sys.stderr) + + sys.exit(1)