Separated listener by introducing create listener. Working State. Message loop prevention filters added to server
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
+13
-6
@@ -9,15 +9,22 @@ def buildLog (action, outputs, response):
|
|||||||
f"{outputs[print_key]}",
|
f"{outputs[print_key]}",
|
||||||
)
|
)
|
||||||
|
|
||||||
except: (KeyError, TypeError)
|
except (KeyError, TypeError):
|
||||||
|
pass
|
||||||
|
|
||||||
if action.showstatus is True and response.status_code in [200, 204]:
|
if action.showstatus is True and response.ok:
|
||||||
print(f"{action.name} successful")
|
print(f"{action.name} successful")
|
||||||
|
|
||||||
elif action.showstatus is True and response.status_code not in [200, 204]:
|
elif action.showstatus is True and not response.ok:
|
||||||
print(f"{action.name} failed with status code {response.status_code}")
|
print(f"{action.name} failed with status code {response.status_code}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
print(f"Response: {response.json()["error"]}")
|
response_data = response.json()
|
||||||
except KeyError:
|
except ValueError:
|
||||||
print(f"Response:", response.json())
|
response_data = response.text
|
||||||
|
|
||||||
|
if isinstance(response_data, dict):
|
||||||
|
print("Response:", response_data.get("error", response_data))
|
||||||
|
else:
|
||||||
|
print("Response:", response_data)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import json
|
|||||||
|
|
||||||
def buildOutput(response, action, outputs):
|
def buildOutput(response, action, outputs):
|
||||||
if hasattr(action, "outputs"):
|
if hasattr(action, "outputs"):
|
||||||
if response != None:
|
if response is not None:
|
||||||
try:
|
try:
|
||||||
response_data = response.json()
|
response_data = response.json()
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
@@ -20,13 +20,13 @@ def buildOutput(response, action, outputs):
|
|||||||
for output_name, response_key in action.outputs.items():
|
for output_name, response_key in action.outputs.items():
|
||||||
if key == response_key:
|
if key == response_key:
|
||||||
outputs[output_name] = value
|
outputs[output_name] = value
|
||||||
return outputs
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
return outputs
|
print("No response received"),
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#return outputs
|
return outputs
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ def recursiveSet(definition, outputs):
|
|||||||
for job in recursiveset:
|
for job in recursiveset:
|
||||||
outputs, response = buildAction(job, outputs)
|
outputs, response = buildAction(job, outputs)
|
||||||
|
|
||||||
print("MESSAGE BODY DEBUG")
|
#print("MESSAGE BODY DEBUG")
|
||||||
print(resolved["messages"])
|
#print(resolved["messages"])
|
||||||
return outputs
|
return outputs
|
||||||
|
|
||||||
from core.execution.action.action import buildAction
|
from core.execution.action.action import buildAction
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,50 @@
|
|||||||
|
import json
|
||||||
|
from core.runtime.outputs import buildOutput
|
||||||
|
from core.execution.operation import buildOperation
|
||||||
|
|
||||||
|
def buildListener(listener, self):
|
||||||
|
|
||||||
|
if self.path.startswith(listener.acceptpath):
|
||||||
|
|
||||||
|
#Prints can used buildlog for listener runtime
|
||||||
|
print("Matrix transaction received")
|
||||||
|
|
||||||
|
content_length = int(self.headers["Content-Length"])
|
||||||
|
data = self.rfile.read(content_length)
|
||||||
|
request = json.loads(data)
|
||||||
|
|
||||||
|
outputs = {}
|
||||||
|
|
||||||
|
outputs = buildOutput(data, listener, outputs)
|
||||||
|
|
||||||
|
#if applyConditions(listener, outputs)
|
||||||
|
# continue
|
||||||
|
|
||||||
|
print(outputs)
|
||||||
|
for event in outputs[listener.recursive["source"]]:
|
||||||
|
|
||||||
|
print("DEBUG")
|
||||||
|
print(listener.recursive["source"])
|
||||||
|
|
||||||
|
if "state_key" in event:
|
||||||
|
continue
|
||||||
|
if event.get("sender") != "@lyncoln:loxthelion.com":
|
||||||
|
continue
|
||||||
|
if "com.loxthelion.rmass_message_id" in event.get("content", {}):
|
||||||
|
continue
|
||||||
|
if event.get("type") == "m.room.message":
|
||||||
|
# Process and forward to RMASS
|
||||||
|
|
||||||
|
outputs = buildOperation(listener.execute, outputs)
|
||||||
|
|
||||||
|
|
||||||
|
self.send_response(200)
|
||||||
|
self.send_header("Content-Type", "application/json")
|
||||||
|
self.send_header("Content-Length", "2")
|
||||||
|
self.end_headers()
|
||||||
|
self.wfile.write(b"{}")
|
||||||
|
|
||||||
|
else:
|
||||||
|
self.send_error(404)
|
||||||
|
|
||||||
|
return outputs
|
||||||
+2
-33
@@ -9,6 +9,7 @@ from core.runtime.resolver import resolveItem
|
|||||||
from plugins.rmass.listeners import synapselistener
|
from plugins.rmass.listeners import synapselistener
|
||||||
from plugins.rmass.operations import rmassmessagepush
|
from plugins.rmass.operations import rmassmessagepush
|
||||||
from core.execution.operation import buildOperation
|
from core.execution.operation import buildOperation
|
||||||
|
from core.server.createlistener import buildListener
|
||||||
|
|
||||||
port = int(os.environ.get("SERVER_PORT", 19001))
|
port = int(os.environ.get("SERVER_PORT", 19001))
|
||||||
|
|
||||||
@@ -97,39 +98,7 @@ class RequestHandler(BaseHTTPRequestHandler):
|
|||||||
def do_PUT(self):
|
def do_PUT(self):
|
||||||
print("PUT request received")
|
print("PUT request received")
|
||||||
|
|
||||||
if self.path.startswith("/_matrix/app/v1/transactions/"):
|
outputs = buildListener(synapselistener, self)
|
||||||
print("Matrix transaction received")
|
|
||||||
|
|
||||||
outputs = {}
|
|
||||||
|
|
||||||
content_length = int(self.headers["Content-Length"])
|
|
||||||
data = self.rfile.read(content_length)
|
|
||||||
request = json.loads(data)
|
|
||||||
|
|
||||||
requestjson = json.dumps(request, indent=4)
|
|
||||||
#print (request)
|
|
||||||
#print(requestjson)
|
|
||||||
for event in request["events"]:
|
|
||||||
if "state_key" in event:
|
|
||||||
# Room state event
|
|
||||||
continue
|
|
||||||
|
|
||||||
if event.get("type") == "m.room.message":
|
|
||||||
# Process the message
|
|
||||||
print (event)
|
|
||||||
outputs = buildOutput(data, synapselistener, outputs)
|
|
||||||
#print (event)
|
|
||||||
|
|
||||||
outputs = buildOperation(rmassmessagepush, outputs)
|
|
||||||
|
|
||||||
self.send_response(200)
|
|
||||||
self.send_header("Content-Type", "application/json")
|
|
||||||
self.send_header("Content-Length", "2")
|
|
||||||
self.end_headers()
|
|
||||||
self.wfile.write(b"{}")
|
|
||||||
|
|
||||||
else:
|
|
||||||
self.send_error(404)
|
|
||||||
|
|
||||||
def startServer():
|
def startServer():
|
||||||
server = HTTPServer(("0.0.0.0", port), RequestHandler)
|
server = HTTPServer(("0.0.0.0", port), RequestHandler)
|
||||||
|
|||||||
Binary file not shown.
@@ -1,12 +1,19 @@
|
|||||||
name = "Reception Test"
|
from plugins.rmass.operations import rmassmessagepush
|
||||||
|
|
||||||
kind = "action"
|
|
||||||
|
|
||||||
showstatus = False
|
|
||||||
|
|
||||||
|
name = "Synapse Listener"
|
||||||
|
|
||||||
|
kind = "listener"
|
||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
"events": "events",
|
"events": "events",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
acceptpath = "/_matrix/app/v1/transactions/"
|
||||||
|
|
||||||
|
execute = rmassmessagepush
|
||||||
|
|
||||||
|
recursive = {
|
||||||
|
"source": "events",
|
||||||
|
"reverse": False,
|
||||||
|
"label": "outboundmessage",
|
||||||
|
}
|
||||||
|
|||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTIyMTE4NzEsIm5iZiI6MTc5MjIxMTY5MSwic3ViIjoiMjM4MzAyIiwidXNlcm5hbWUiOiJYeHhvdGlxIiwidXNlclR5cGUiOjEsInN0YWdlTmFtZSI6Ilh4eG90aXEiLCJhcHByb3ZlZCI6MSwibG9jYXRpb25JZCI6NDcyLCJzZWFyY2hDaXR5IjoiYXRsYW50YSIsImNvdW50cnlTaG9ydCI6IlVTIiwic2Vzc2lvbkNvdW50cnlDb250aW5lbnQiOiJOQSIsImlzRnJvemVuIjowLCJsb2NhdGlvbkxhYmVsIjoiQXRsYW50YSwgR0EiLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MjIxMTc1MX0.yPPrAkT6ZnR9Y3rLhUkWSgL6X_I0UuKznujBg2L-UkI3kGPZbe2G4ADSZBq0DGxiAVnmglwbhXZHs6QuHwIOTQ", "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTQ4MDM3NTEsIm5iZiI6MTc5MjIxMTY5MSwianRpIjoia3FxVjB1dEpnRDM4V2MwNnE1b0l2Mkx6SGJGYTVKcjM2aHRtZUQxRk1vVT0iLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MjIxMTc1MSwic3ViIjoiMjM4MzAyIn0.4QG6fWWAwzvmox4QmWmcP6bIS6pA7Vi2srsppplI0BDXI2NWbigxfswrTrmb1-QI7PpB9azHDP7Xt_gY_6_pnA"}
|
{"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTIyMjI5MjQsIm5iZiI6MTc5MjIyMjc0NCwic3ViIjoiMjM4MzAyIiwidXNlcm5hbWUiOiJYeHhvdGlxIiwidXNlclR5cGUiOjEsInN0YWdlTmFtZSI6Ilh4eG90aXEiLCJhcHByb3ZlZCI6MSwibG9jYXRpb25JZCI6NDcyLCJzZWFyY2hDaXR5IjoiYXRsYW50YSIsImNvdW50cnlTaG9ydCI6IlVTIiwic2Vzc2lvbkNvdW50cnlDb250aW5lbnQiOiJOQSIsImlzRnJvemVuIjowLCJsb2NhdGlvbkxhYmVsIjoiQXRsYW50YSwgR0EiLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MjIyMjgwNH0.ZAGwq0DlacX_VBfysDOu6pAlt1FzwccZe1zIlMZcozOs_C7jOiOhkC-o1BH4-UPxe_MniYKux3s5br6kwJHFqQ", "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTQ4MTQ4MDQsIm5iZiI6MTc5MjIyMjc0NCwianRpIjoiRmVoVGM1cVFwQUQvRWtjYW1aLy85YllLbVB2ZEhPSXYyUE9YM25aTlhPRT0iLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MjIyMjgwNCwic3ViIjoiMjM4MzAyIn0.BOPpuwg88qWk5A0XciE2wi_4mC6V9jvnQzWms0vxIkWctsGMQnhLABzuD8Zjofdf1qK5pQXxf9010SYV5c9r8A"}
|
||||||
Reference in New Issue
Block a user