From 8fc85db44a514902a3a0cfa1f4af0cf09a87be07 Mon Sep 17 00:00:00 2001 From: Lyncoln Date: Wed, 28 Oct 2026 22:01:35 -0400 Subject: [PATCH] Refined firewall by adding resolved. Added dictionary vs list handling in resolved. --- core/runtime/firewall.py | 10 ++++++++- core/runtime/resolver.py | 10 ++++++--- plugins/rmass/listeners/synapselistener.py | 26 +++++++++++++++++++++- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/core/runtime/firewall.py b/core/runtime/firewall.py index 189f852..ffec54a 100644 --- a/core/runtime/firewall.py +++ b/core/runtime/firewall.py @@ -2,6 +2,8 @@ import os import logging from core.runtime.applyconditions import applyConditions +from core.runtime.resolver import resolveItem + def buildFirewall(listener, outputs): #firewall_log = os.environ.get("LOGS_FIREWALL", "false").lower() == "true" @@ -10,11 +12,17 @@ def buildFirewall(listener, outputs): status_code = 200 outputs["firewall_allowed"] = [] for item in outputs[listener.recursive["source"]]: + resolved = resolveItem(listener, item) - match, filter = applyConditions(listener, item, outputs) + match, filter = applyConditions(listener, resolved, outputs) if match: status_code = filter.get("status_code", 200) + + if filter.get("execute", False): + from core.apirequest.execute import executeRequest + response, outputs = executeRequest(filter["execute"], outputs, resolved) + if firewall_log: logging.info(filter.get("print")) logging.info(f"Returning status_code: {status_code}") diff --git a/core/runtime/resolver.py b/core/runtime/resolver.py index 24915a3..f037a5c 100644 --- a/core/runtime/resolver.py +++ b/core/runtime/resolver.py @@ -1,15 +1,19 @@ import os def resolveItem(action, item): - resolver_log = os.environ.get("LOGS_RESOLVER", "false").lower() == "true" + #resolver_log = os.environ.get("LOGS_RESOLVER", "false").lower() == "true" + resolver_log = True resolved = {} if hasattr(action, "resolve"): for label, keys in action.resolve["get"].items(): target = item try: - for key in keys: - target = target[key] + for key in keys: + if isinstance(target, dict): + target = target.get(key) + else: + target = target[key] except (KeyError, IndexError) as error: if resolver_log: diff --git a/plugins/rmass/listeners/synapselistener.py b/plugins/rmass/listeners/synapselistener.py index bf69e5b..4b67525 100644 --- a/plugins/rmass/listeners/synapselistener.py +++ b/plugins/rmass/listeners/synapselistener.py @@ -1,4 +1,5 @@ from plugins.rmass.operations import rmassmessagepush +from plugins.rmass.actions import synapsenotify name = "Synapse Listener" @@ -8,6 +9,19 @@ outputs = { "events": "events", } +resolve = { + "get": { + "sender": ["sender"], + "event_id": ["event_id"], + "message_body": ["content", "body"], + "content": ["content"], + "type": ["type"], + "room_id": ["room_id"], + "timestamp": ["origin_server_ts"], + "filter_item": [] + } +} + recursive = { "source": "events", "reverse": False, @@ -20,7 +34,7 @@ execute = rmassmessagepush filters = [ { - "filterkey": "called_dictionary", + "filterkey": "filter_item", "operator": "in", "filtervalue": "state_key", "print": "Excluding state.key event", @@ -47,6 +61,16 @@ filters = [ "print": "Excluding imported message loop item", "status_code": 200, }, + { + "filterkey": "message_body", + #"filterkey_lib": "resolved", + "filterkey_format": "length", + "execute": synapsenotify, + "operator": "<", + "filtervalue": 5, + "print": f"Message body is less than 5 characters. Notifying with {synapsenotify.name}...", + "status_code":200 + }, ]