Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
afbe0e1add | ||
|
|
8fc85db44a | ||
|
|
a6bd89bb7e |
@@ -49,8 +49,12 @@ def applyConditions(definition, dictionary, outputs):
|
||||
return True, filter
|
||||
|
||||
if filter["operator"] == "in":
|
||||
if filter["filterkey"] == "called_dictionary":
|
||||
if filtervalue in dictionary:
|
||||
return True, filter
|
||||
else:
|
||||
if filtervalue in dictionary.get(filter["filterkey"], {}):
|
||||
return True, filter
|
||||
|
||||
if filter["operator"] == "is":
|
||||
if resolvedvalue is filtervalue:
|
||||
|
||||
@@ -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,25 +12,22 @@ 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}")
|
||||
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)
|
||||
|
||||
if outputs["firewall_allowed"] != []:
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
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"):
|
||||
@@ -9,6 +10,9 @@ def resolveItem(action, item):
|
||||
target = item
|
||||
try:
|
||||
for key in keys:
|
||||
if isinstance(target, dict):
|
||||
target = target.get(key)
|
||||
else:
|
||||
target = target[key]
|
||||
|
||||
except (KeyError, IndexError) as error:
|
||||
|
||||
@@ -90,7 +90,7 @@ outputs = {
|
||||
filters = [
|
||||
{
|
||||
"filterkey": "message_body",
|
||||
#"filterkey_lib": "outputs",
|
||||
#"filterkey_lib": "resolved",
|
||||
"filterkey_format": "length",
|
||||
"execute": synapsenotify,
|
||||
"operator": "<",
|
||||
|
||||
@@ -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": "event",
|
||||
"filterkey": "filter_item",
|
||||
"operator": "in",
|
||||
"filtervalue": "state_key",
|
||||
"print": "Excluding state.key event",
|
||||
@@ -40,6 +54,23 @@ filters = [
|
||||
"print": "Excluding non-room message event",
|
||||
"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
|
||||
},
|
||||
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user