Compare commits

...
3 Commits
5 changed files with 55 additions and 17 deletions
+6 -2
View File
@@ -49,8 +49,12 @@ def applyConditions(definition, dictionary, outputs):
return True, filter return True, filter
if filter["operator"] == "in": if filter["operator"] == "in":
if filtervalue in dictionary: if filter["filterkey"] == "called_dictionary":
return True, filter if filtervalue in dictionary:
return True, filter
else:
if filtervalue in dictionary.get(filter["filterkey"], {}):
return True, filter
if filter["operator"] == "is": if filter["operator"] == "is":
if resolvedvalue is filtervalue: if resolvedvalue is filtervalue:
+9 -10
View File
@@ -2,6 +2,8 @@ import os
import logging import logging
from core.runtime.applyconditions import applyConditions from core.runtime.applyconditions import applyConditions
from core.runtime.resolver import resolveItem
def buildFirewall(listener, outputs): def buildFirewall(listener, outputs):
#firewall_log = os.environ.get("LOGS_FIREWALL", "false").lower() == "true" #firewall_log = os.environ.get("LOGS_FIREWALL", "false").lower() == "true"
@@ -10,25 +12,22 @@ def buildFirewall(listener, outputs):
status_code = 200 status_code = 200
outputs["firewall_allowed"] = [] outputs["firewall_allowed"] = []
for item in outputs[listener.recursive["source"]]: 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: if match:
status_code = filter.get("status_code", 200) 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: if firewall_log:
logging.info(filter.get("print")) logging.info(filter.get("print"))
logging.info(f"Returning status_code: {status_code}") logging.info(f"Returning status_code: {status_code}")
continue continue
#This needs to be moved into definitions but until logic is put in place it lives here.
if "com.loxthelion.rmass_message_id" in item.get("content", {}):
status_code = 200
if firewall_log:
logging.info("Excluding previously imported items")
logging.info(f"Returning status_code: {status_code}")
continue
outputs["firewall_allowed"].append(item) outputs["firewall_allowed"].append(item)
if outputs["firewall_allowed"] != []: if outputs["firewall_allowed"] != []:
+7 -3
View File
@@ -1,15 +1,19 @@
import os import os
def resolveItem(action, item): 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 = {} resolved = {}
if hasattr(action, "resolve"): if hasattr(action, "resolve"):
for label, keys in action.resolve["get"].items(): for label, keys in action.resolve["get"].items():
target = item target = item
try: try:
for key in keys: for key in keys:
target = target[key] if isinstance(target, dict):
target = target.get(key)
else:
target = target[key]
except (KeyError, IndexError) as error: except (KeyError, IndexError) as error:
if resolver_log: if resolver_log:
+1 -1
View File
@@ -90,7 +90,7 @@ outputs = {
filters = [ filters = [
{ {
"filterkey": "message_body", "filterkey": "message_body",
#"filterkey_lib": "outputs", #"filterkey_lib": "resolved",
"filterkey_format": "length", "filterkey_format": "length",
"execute": synapsenotify, "execute": synapsenotify,
"operator": "<", "operator": "<",
+32 -1
View File
@@ -1,4 +1,5 @@
from plugins.rmass.operations import rmassmessagepush from plugins.rmass.operations import rmassmessagepush
from plugins.rmass.actions import synapsenotify
name = "Synapse Listener" name = "Synapse Listener"
@@ -8,6 +9,19 @@ outputs = {
"events": "events", "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 = { recursive = {
"source": "events", "source": "events",
"reverse": False, "reverse": False,
@@ -20,7 +34,7 @@ execute = rmassmessagepush
filters = [ filters = [
{ {
"filterkey": "event", "filterkey": "filter_item",
"operator": "in", "operator": "in",
"filtervalue": "state_key", "filtervalue": "state_key",
"print": "Excluding state.key event", "print": "Excluding state.key event",
@@ -40,6 +54,23 @@ filters = [
"print": "Excluding non-room message event", "print": "Excluding non-room message event",
"status_code": 200, "status_code": 200,
}, },
{
"filterkey": "content",
"operator": "in",
"filtervalue": "com.loxthelion.rmass_message_id",
"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
},
] ]