From 9f282a4bd89948a8cfca4ef4868e8db5889e0ae3 Mon Sep 17 00:00:00 2001 From: Lyncoln Date: Fri, 16 Oct 2026 17:59:28 -0400 Subject: [PATCH] Updated select module and refined message retrieval process in RMASS definitions --- .../__pycache__/outputs.cpython-314.pyc | Bin 923 -> 1102 bytes .../__pycache__/recursive.cpython-314.pyc | Bin 1216 -> 1414 bytes .../__pycache__/savedata.cpython-314.pyc | Bin 1576 -> 3137 bytes .../__pycache__/select.cpython-314.pyc | Bin 1315 -> 1522 bytes core/runtime/outputs.py | 7 +- core/runtime/recursive.py | 6 +- core/runtime/savedata.py | 40 +++++ core/runtime/select.py | 10 +- .../server/__pycache__/server.cpython-314.pyc | Bin 3481 -> 4454 bytes core/server/server.py | 155 ++++++++++++------ plugins/rmass/__init__.py | 2 +- .../__pycache__/__init__.cpython-314.pyc | Bin 205 -> 223 bytes .../__pycache__/getmessage.cpython-314.pyc | Bin 736 -> 764 bytes .../pullmessagelist.cpython-314.pyc | Bin 596 -> 626 bytes .../synapseassignusername.cpython-314.pyc | Bin 960 -> 899 bytes .../synapsecreatedmroom.cpython-314.pyc | Bin 1203 -> 1214 bytes .../synapsegetroomid.cpython-314.pyc | Bin 776 -> 781 bytes .../synapsepushmessages.cpython-314.pyc | Bin 1396 -> 1471 bytes .../synapseregister.cpython-314.pyc | Bin 871 -> 880 bytes plugins/rmass/actions/getmessage.py | 2 + plugins/rmass/actions/pullmessagelist.py | 2 + .../rmass/actions/synapseassignusername.py | 8 +- plugins/rmass/actions/synapsecreatedmroom.py | 6 +- plugins/rmass/actions/synapsegetroomid.py | 5 +- plugins/rmass/actions/synapsematchmessages.py | 90 ++++++++++ plugins/rmass/actions/synapsepushmessages.py | 13 +- plugins/rmass/actions/synapseregister.py | 6 +- plugins/rmass/inbound/__init__.py | 1 + .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 189 bytes .../__pycache__/receive.cpython-314.pyc | Bin 0 -> 265 bytes plugins/rmass/inbound/receive.py | 12 ++ .../synapsemessagepush.cpython-314.pyc | Bin 819 -> 825 bytes .../rmass/operations/synapsemessagepush.py | 4 +- savedata/rmmanager.db | Bin 0 -> 16384 bytes tokens.json | 2 +- 35 files changed, 296 insertions(+), 75 deletions(-) create mode 100644 plugins/rmass/actions/synapsematchmessages.py create mode 100644 plugins/rmass/inbound/__init__.py create mode 100644 plugins/rmass/inbound/__pycache__/__init__.cpython-314.pyc create mode 100644 plugins/rmass/inbound/__pycache__/receive.cpython-314.pyc create mode 100644 plugins/rmass/inbound/receive.py create mode 100644 savedata/rmmanager.db diff --git a/core/runtime/__pycache__/outputs.cpython-314.pyc b/core/runtime/__pycache__/outputs.cpython-314.pyc index f64d61976050c73e7d76fd2bbb84d8fbea46cddd..a6cee941556ca4fc695ef7f2700383758823a70d 100644 GIT binary patch delta 532 zcmbQuevTtnn~#@^0SLIOE@n9}GcY^`abSQ6%J?h-WHd0uF$6JsGL$d`F^MyjFa|Ly zGiWlu1S#=L2I_Cu=Y&iVDHR5j0p+SiJ&63=2$WwIecuE delta 333 zcmX@dF`M0An~#@^0SKbR&u3j?Vqka-;=lkSl<}Dd$Y@{)Vi0F2VF+SWX3%6xW`-#O z(yTxX;(tz>7^}iLmw`csA&en_d2$}3)Wl`djI1CATLEhrYXCctDLe5$7cVDFdl-8R z*JLq9MMmDq7L1Cbd@ykY4b~JUqse%SJ-@W1ptPh|lj9b9Mq+VdNlDQymaO9ZyveRi z>Ws{jbD1Q7WE;~89Z{fmkn4-50*MBOFI)^9{2gTzDzCFEUSe0gA)zpzcP8&_{tn(7 zGMbYUnadnLgY5IuWGn*dT**)*2BeBafW$2ho80`A(wtPgA_*WDY$zziJ}@&fGJata JV-yCf1pw%5KkEPh diff --git a/core/runtime/__pycache__/recursive.cpython-314.pyc b/core/runtime/__pycache__/recursive.cpython-314.pyc index 2826d94aebf30a82d4964efe0b466170b14caa57..6b4456f6175d3678f486af2ae9821978dc3fb70b 100644 GIT binary patch delta 493 zcmX@W*~ZPM&Bx2d00f&oFJ(EgOynzKl$qEV#~3~Ffu2$fGe`ymf|yMhAuM?YglM?H z#1~3RI#LiB5Q$I~#w5VtCcwZ@z!JkcS&C7C&pVcZfs;XwA&gO(L6c?j1V%Z_Drpy2 zr%-oyPd|5sqSWNlqT%;ud>BQGQxx zPUjdY0s delta 288 zcmXAiJ5Iwu5Qej?Ux|Z}@Cp)JgBpKzaZc^2CqsAU1mGgNO@1m!`)k$tV#{b%Sq|_T4&B&Pr>1!R z!8YZ*i2Gnsj@naqmZcq1sl~Qr9$5_pZ9skhDWqish-w_*FuGOz4ZZ^4BzYJ_38!At z3+yx(VMSIVF8VT-e$<092~N(y3vsW-T~+v4nWVicO)0Uf+m^37{r0T&iwsQ85>k_bZo#mj-)=Mm;02 zwc7=|_s$OcVBfHBV947SfF;uQGWHL{QGY+a!VynE*$aLMxl7?#I>JTT<;}~~c3LFe zc~)RWk>@F74HA`1aS7#7Q>=JiqAm!@ghWNs@svcT_-I0us0175B%SbOEGlxHk}jM~ zB)G6B(P$VKBpr8&3#Ua+(uR}qcofmYv82EuQ_-^W14%mNEd|Md?II)_kJ6PTE8TO^ z7$@oR+$1Y-68Qx;Bhm5!1RNAvTJW_&D7CxKC*zzu!cIpcMe}lplRW3<(+M$(CROum zPt8b%$#gUp89^KK4M+|?wD1qAX2GV;GB-V++0Y$%s5_Fg*UTB79CR!?esautbInKB zn@`MnS4{A!t$Lwm(Q(_6t#dB*ZP+^2Y#qzq%}V<%!%f42bFI?-k^~2it=KxA=|H`6 z#{>+PdCS7|;^o_y7vf7@%i8z~f`VGGcWl{z(uI;bTJ*Y7DA2OB!1cDv~ zAQ%+<-Utxi-~cg^54;#e{Ps)hQ zWcHSKx3r)h=6$B==+gV^O(*6~ubLX4k=Pfs*cYsKw0Dg^8yCJ>8d!ese)qlZ?D4*= zrGHKD$;n1)MPkqnuLOLwUu%17=s#+Vy)A|^1I4$34Q_i!R(4$DFXS+YkS{2gDPnga zbJ@>05q1+QFUoWFmxl8nyzj13%uz~>EJ!e9>9`cBk$il%U8MwpHU2`*Qe-O5GZfD2 zGItA+{6An5y|{qzHWX)5sc2$q7j*J*RuDoePc(wD%X8YpKtJO>)5DyFgPybHxEW_f zK6)v{O>+q`gcj_Fv<1BsfXbN4P~TY!lj_#0dSy5$>D6s~P92YvFCO0uk5f1Wt>okb zn>BC4G@O+=$r3-PLj(ca39@*_-YW{>|2U5`oMV_{5>>O{31!-#>?@QVMcW!Zing=? zMeoYm8&|%&vhek)wSD%J0!xl^=V;@#(ACfnMYf(_9&DVyn z4zE$wIm&d+ch&cZvTvhZu$y8RRt|yzh{t{>tMUurTXA3U%Tw`WBpu^E;*TO4He&(P ew@88@9s}cJV0lhKqUw1+VIZn@YAT6pdGWssS6MFr delta 330 zcmX>ov4V$Bn~#@^0SIC~oXh&oG?7ojRtm^#V2EP~V)SGvVF+RpXDDF|Vg`~-L5#`_ znk+9t%Keg=Kok^k0BL3*{v0-W5}OKR^Tuf$jFb1WEAe=@GcZ^)%Q9p#YO+q=#H7Nc z$uYT@#heMqyUSw4Ud#&Aq^34mpVgjA7-~jw$K(puD#aVzLJfZ3IT?fuuL~Mn5H$Ez z%mY+#kXPJEoc)kEx0A-^Dz?pxGNM4iB5n`?lGbD`;svq!K!o6APYx9kAt3V>M^1iX zN^oLXY7xkD0+Sm#X8UL|7jc4=f$RkfuVnZPWHJ;%blBwPrEh}X>hA98=Uye`T2z!@ zq>!1XP@I~Rnp~2ZpQp)wi#;Q;II*OpsE8S8(Ji*bf`Zh%lv}KcIhl#Yw^$2`GV@9% z-(-5ICIgfPIk{LBNH#D$5E5zde!|YzQ8uCCI=jMUc7+d2vYZ-|A26@3mtjyfnBX?u zXQIzV9>pg-f)li7l+CZ1S#yO)=MIpkK3`|1&Q&4xD?AzxgymMSUl7*6z@z_xgMmkU z0s94R^$RTOKfbUt2ujY;yuh#Wg@KV%1E}qSklHmK^$*NI-mhX+phKoRskoRk9I_Dr zl7|IZL8P>!IFNEbVlLw<#(Y$i5lH%JG8TcHzLMcHkYp&51`@Y8Y;yBcN^?@}isXS@ Wu&+P?4m6yR@e7j*qehV&kP86b#d9P8 delta 332 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 B!!Q5< literal 3481 zcmai0O>7&-6`m!R`0E)G*N&8iGu=Cdx_Epun#%7Kn^|TSR`@KQ$a$iC5#o+MGXYK8I{on$)#_0xm-#u z&>=YQ&Agd6Gv9pk-uBhSLBo(_KvpNWt?y zr*)olB&j>PRx|2BQm7S4!d&pYzcQ*`3b!KCAc;^nO5Aajj{Jj}CeuDDj^=XNX$`Mx zn6|v8SQ=|f+FL7{MMjl^YG^pk(Rx+4iVDduRV>gIySbtps-#&(vtVg7GCeHK3`=r$ zO3LXkk0X?K7I*5(e$l~6Xe)r>93q^A0J9kJw;&S`g}w2Tj|65A2}*w0BTwrN?<4Pe zVLo~I!})}RFF;vGvsIgfTy&CX24yQ4uqket|I?un0k_|i5-0gwtZgsAh@<6vrNg!h zN395DBmdne`Ms4T9?lq8YtBwh=Tg`K9AsY8S2cAldetlttw8#7w~N|ZgHkLSdR`&A zS;)L$0pJbb{O7$EQOJtbdok5(zS;YW$#jqgidZiY8nd*5D&y+q*v%zPQQ?*&%;e}6 z4cuDL4Gjd=i3YdITbi+8F)&ZkzRZ%jtYuVXRaY~3d08naiyF@4O{`@sn=utJP`ph; zstI>Loue&>FKwXGUk5I&F{swjz7Q+bo!AjhJ{F?8LPuHX*c#jsl6$PxRuScLB#}+a4f>tnP86Sh`v{{xJhoTg5=J>Y@7n132iveWAd>Qv?-mc1Ij~78MesgHZh+EBvht zRKSK<>sI13wba)4`TTb5()!2~K3s~P_)NVwQxZ?_@coZ@ahGo^^KB3L4jacq5VF_H z_H|%D4G@Crl&q`N$evnz6<}{b&Fm`Vp49^%fUUys*(EevjRS)<*N{O)4rct1c;H>d zEMtyc;5w^b4qs=2#WO~(BgOS{3r>WO*LbSg!;CN6cw`zh=es?!BoO%bW!bAZQoN{D zATC)pNP^JEX2sg5oNX4_rMji0#~-va!xg5RF4X2Kh* zGlHAZiecDkmpjXoHLG@ey{-nUhTT18d)!`6N&(mE$|Sn}E5uMqd!t;){3a{uSF?#Q&b7GgmIemDs$t~FoD=d~hXK_hP#3R<3J zD@#X^s@9HOHFU^kscX7bu|bXttdNEN3v10|g;mAS)ztX()TEaI+pij?Wjk}GdOj!D z5*2q|UyA6`+Q&cVmY)Ya?qbWR$+GC}#9dO^i0*fI?| zaSq#oEU4J~r=q11<_&yN9uo2@O3$uWO*%u)Vv8<{X1`Vhy%SDR@wL;!h zHAsaTlbF`C6J4_#!x)>GhFrgaJRD9-M=+xb6%Bns%iqo$nngwLOf;mZD&%mB@~T1< z8mfFH&>&gDkjrV%Np+M5sZpVt?gJWI&0?oYdBq9E(V9?v4!_EVz~8zK*^I^FV;gfH z&3*df-Jws0K7Vny?{c~C@^)-!eFTE=2iM=fzS;iiwNgXR4&VE@@!0w}>z#Oi;+IqV zM`HG#Shv^x+}-6*mValKg~W$qHRtaMO}j!@S?Jojxg+#E<=eu^y{4AE)}D{w`}KSG z$ad@LP5!&q#D2WJ)REbVpV^DIKk4Ycd+N8R?&Y>SPHl#s48Hcqm$nCQlpD@$2JekL zNxX2s<%{@sVrWx%+|aSx&|7Zk-H*3@JpP;Ut+%)1FYLxM<#^@~q3!sEfBAilO;6(} z*18+*EJr&ZM!Ua%R*xFu8}HnCXScquT;KN$`NEm~Xk)1 zNoah1IXTkpf6&=Fe8K-2tD~5gXP~nopy&*gXO&|}lCZGZ^IPMXOJwlO3DEtW3{S{sO z7CrwhO8+e+et2%<;+=~dLwAO@`tLVyM>5-?Gwb|!=;AY8;08*~06xfn#sgg9S<^`_ HX)pI5<3itJ diff --git a/core/server/server.py b/core/server/server.py index a2f7e6e..3a4128c 100644 --- a/core/server/server.py +++ b/core/server/server.py @@ -1,72 +1,123 @@ -import socket -import json import os -import logging +import json from http.server import HTTPServer, BaseHTTPRequestHandler + from .dispatcher import dispatchRequest from .createresponse import buildResponse +from core.runtime.outputs import buildOutput +from plugins.rmass.inbound import receive port = int(os.environ.get("SERVER_PORT", 19001)) -from http.server import HTTPServer, BaseHTTPRequestHandler class RequestHandler(BaseHTTPRequestHandler): def do_POST(self): + lifecycles = {} print("POST request received") - self.send_response(200) + max_request_size = 1024 + + content_length = self.headers.get("Content-Length") + + # Check whether Content-Length exists + if content_length is None: + response = { + "status": "error", + "message": "Content length required" + } + status = 411 + + else: + # Attempt to convert the header into an integer + try: + length = int(content_length) + except ValueError: + length = None + + # Validate the converted length + if length is None: + response = { + "status": "error", + "message": "Invalid Content-Length" + } + status = 400 + + elif length < 0: + response = { + "status": "error", + "message": "Bad Request" + } + status = 400 + + elif length > max_request_size: + response = { + "status": "error", + "message": "Content exceeds maximum request size" + } + status = 413 + + else: + # Content-Length is valid, so read the body + data = self.rfile.read(length) + + try: + request = json.loads(data) + + except json.JSONDecodeError: + response = { + "status": "error", + "message": "Invalid JSON received" + } + status = 400 + + else: + # Only valid JSON reaches the dispatcher + thread, lifecycles, module, mode = dispatchRequest( + request, lifecycles + ) + + response = buildResponse(module, thread, mode) + status = 200 + + # Serialize the response + responsebytes = json.dumps(response).encode("utf-8") + + # Send one HTTP response + self.send_response(status) self.send_header("Content-Type", "application/json") + self.send_header("Content-Length", str(len(responsebytes))) self.end_headers() - self.wfile.write(b'{"status": "ok"}') + self.wfile.write(responsebytes) + + + def do_PUT(self): + print("PUT request received") + + if self.path.startswith("/_matrix/app/v1/transactions/"): + 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) + outputs = buildOutput(data, receive, outputs) + print (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(): - server = HTTPServer(("127.0.0.1", port), RequestHandler) + server = HTTPServer(("0.0.0.0", port), RequestHandler) print(f"Server listening on port {port}") - server.serve_forever() - - - -def startServer2(): - server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - - server.bind(("0.0.0.0", port)) - - lifecycles = {} - - server.listen() - print(f"Server listening on port {port}") - while True: - connection, address = server.accept() - print("Accepting connections") - connection.settimeout(30) - - try: - while True: - data = connection.recv(4096) - - if not data: - print("Client Disconnected") - break - - request = json.loads(data) - - thread, lifecycles, module, mode = dispatchRequest(request, lifecycles) - - response = buildResponse(module, thread, mode) - - connection.sendall( - json.dumps(response).encode("utf-8"), - ) - except json.decoder.JSONDecodeError as error: - print("Invalid JSON received", error) - print("Closing client connection") - except socket.timeout: - print("Client connection timed out") - - finally: - connection.close() - - # server.close() + server.serve_forever() \ No newline at end of file diff --git a/plugins/rmass/__init__.py b/plugins/rmass/__init__.py index 8142fd0..9516405 100644 --- a/plugins/rmass/__init__.py +++ b/plugins/rmass/__init__.py @@ -1 +1 @@ -from . import actions, operations +from . import actions, operations, inbound diff --git a/plugins/rmass/__pycache__/__init__.cpython-314.pyc b/plugins/rmass/__pycache__/__init__.cpython-314.pyc index cbb73b4be5c61827e3b1f7f31beab675e1792f1b..e8ecef06a6922e9111b15ab391b92a1347e0d533 100644 GIT binary patch delta 126 zcmX@hc%PA1n~#@^0SNBqUd+;-$SWBp1>`g^#4!djdNO!0mN0rSl`wfQmoUpS1TiTy zXfnTK1S-&EzQvxHT#}ieSA2^rzaX_J5yEEA%uC8I%}epqWVyvq#0*qf!~!B%CuX@Z Sa!uSQ%&B#mL92)ZC1BnmJjEs!; N85A!vC>F5;`2eoW8sY!| diff --git a/plugins/rmass/actions/__pycache__/getmessage.cpython-314.pyc b/plugins/rmass/actions/__pycache__/getmessage.cpython-314.pyc index 48de30d75c994d18e529ca144c2d217ff81056d2..7bbe39fa07dd0313ab687d4ba27e268dc5e78a93 100644 GIT binary patch delta 254 zcmX9&F;2rk5WGF#*^Y^m05%~+LPV($Qtk8XkKvY+&IdK)BG3 z9I-_Y5qw7r%{~s$M~nf6PFxN!k~zeY(;VVhbb=Ho7~|AwOprQ-u~U-uxQDa3x}3iD zZ*smUr+Hmx%e?OV?4FC~s*9F6m;cZ8_9uxtQ)Ok|na84f=xp{>WOe&N=j6Aaw3^MO dJ;~Nvpc^~TJ^`~z?HJ){5t delta 217 zcmWMgJ8r^25ZzhtVt&gf{85yEs1TBuThPBY6%sB0;l@*?iLYR}&H)frZjd8TA|xb^ zK$j*3Gf!_c?^Ddby<4|vxT=y_{+)NL+>O2x5t)Kw1!96`jer9fSd#LY2hd52w z`LUM&-dyEslJz0Jn*BD}6hHJvwm8%7bt>PHFg?k71VnTRdzrb1&CC=Z`rEvV{{){# BFgO4J diff --git a/plugins/rmass/actions/__pycache__/pullmessagelist.cpython-314.pyc b/plugins/rmass/actions/__pycache__/pullmessagelist.cpython-314.pyc index e9fe07dbc659972f42892560a1ee7e3c71bef62a..a856a98ad23624a55e9b53bceddb66b668c96ade 100644 GIT binary patch delta 189 zcmWMgISRr+0NhPBr#aM!V6d|ii!H7F!W32_1Pl^Qg0O2Vsq8}<3%}t*lvLaL17F|{ z49rzb&weaiMWIhLUhB`PZ^PMct4%{dBmtEahBRPG6HGE#(t-^KEM1vP3h=1&^s671z9HTEsa!gxt3*>3y~dj(LSCNPq8|ya>dR?eNa|b d7MbWa^zP5~6{;zk?oAWsP8+NH(u$=z`vc)*EnNTr delta 208 zcmeywa)pIgn~#@^0SLsq&S&kJ$SYYN1mrX@1TmB_1TmH{1~HW|1u>T}2eFi}1hEFO z1+fQl1aay!=`)tF25|*(2k`{)>N5oK=`-jv1@Q;*1_=c5#R1v+%q46@_8>uJ z22G(V0r%7rh1}HQ;>7e+g`CXdl3Q$v$t9Wjc_Fu$-CaYf)G|s+3W_Ig@8{*X#gdnp yn|g~SJ2Nk3auj2mj1zy=2@U`7wb($Y!jxi?h_tY#Qlyi3oFCG;ZC&&p`rVtWyZn!y+(njf=0%l9f;#><1e K&xZOgmiz-ao>+JQ delta 376 zcmY+8!Ab&A6o&7;O2RlS)Fat?Q z$&^mKjfD9%7c4s$RMDr8|nmgOKX&sl%qtkSK6v%}i%_Fkwoxd=6% zyAAGz^w#H|TW|AFzwtWft?T~xFnGlqi?q#szux4&N94~To$}R2$?#G^fh;Atd)M+h zZm8FN(YfMouu1OOie#}I|2=pk`SKStpUY3>-ti|ZcJ)X@DjU<}M|yos)4ih?Hp)~Y YRWY@Q1`%1NhG`Iq6@#pD5i81?UvGI@9{>OV diff --git a/plugins/rmass/actions/__pycache__/synapsecreatedmroom.cpython-314.pyc b/plugins/rmass/actions/__pycache__/synapsecreatedmroom.cpython-314.pyc index 9f71236042a8e93fd65fc3c64c9831323c70b718..0349598a6c9663ceee0da24a3daa03b2e00c8ad1 100644 GIT binary patch delta 292 zcmdnYxsQ`qn~#@^0SGF5E@kbX$ZJ)v;?EewuE!9h>d&ap6vPq48N?OD9mJ;37{sH; z9K;*M2jS^4=>uU2OAvpMK#(9%j9nk3oK}u(&9YB?e}R16eF!mIRO` zsRz`j$5z4`Bvrx|B&`HAic_CakEw(`NG3=&NG?b|NCBu=F-Qq$9Y>IIkn+SAo|~;0 z^BK+ga#M?o6Vp>OQWH~Bi;8b?loqEJIVTpS++xa1(PS=?0s5;*7DTWC2~Dmd2@soi y@+qdpjMkI$m{kPKKCm%x3SSbj`@qS{!}ft^@)Bkf4t^nSrUv#8I+GtTUj_h#LO{s? delta 280 zcmdnTxtWt!n~#@^0SKztE@qibqhwwnM`b;G(K>|U7K|(+=c6~;mdVwHeFpm$)69Mu>!Qx^-mN=Lt0c5d&S&~4O zlpau@9$N`(kaP)Kkc<-0C@y_QJ*E=&AlV?fAo(DLAVr{Jr66UXbsRw|K`Ikpc(St> z6y>L7=4{qyEM!#V$W1LSPE1cNE@A@u+qpO*ps(xS1N*KWI#T&3qXE*`_|1 diff --git a/plugins/rmass/actions/__pycache__/synapsegetroomid.cpython-314.pyc b/plugins/rmass/actions/__pycache__/synapsegetroomid.cpython-314.pyc index e4b69902b1c45ae79867ce4b7e1f8637c13908db..5f2e7f58ba476e623a222f9fb56496e95ba78db1 100644 GIT binary patch delta 119 zcmeBR>t*B9=HumJ0D=^sOIa$+8~J84%JAi;78fU`r)H!krlb}X-{L4OPAzgyEK0e> zlsWkT;~Yl0$+1kj`eq-PS$Wt#@G!6n+~5$p!6S8pSA2%V1stN&4=HumJ00I?;i&@!B8~J84igVn!Jz6n?)L^0|4TD7HI$g diff --git a/plugins/rmass/actions/__pycache__/synapsepushmessages.cpython-314.pyc b/plugins/rmass/actions/__pycache__/synapsepushmessages.cpython-314.pyc index 4d92fe66382c40d0cda50f614165dee9e4234f13..cffdc720673e44e01857ef8c96d0a46bbfcd3836 100644 GIT binary patch delta 224 zcmeyuwV#_;n~#@^0SHW-FJ(=c$ScYCZKC?puprqW)gbvGi6CBmMtvqd))KZLwG#Fq zb)bl#K4XvuL?%cRNQ(jaT0mMDNNekHmT&~=1nCCp1?dMF=raWw1{vuym2d_zDl=#r zPZnX+28O-R#X6#i&>%pPZkomy=&nl98H|nV+Xul$%&w91m3!pP90G zDN_O?W5Z-N76rzf$?7Z*l=v7pg)fMh-rx|r!6P<<=L0j7DAxy8R#vtT+R_|M4J;q5 JCiAnV0sux@I^O^Q delta 148 zcmdnb{e_EHn~#@^0SF#)Ud*zZ$ScYCVxsy|4?UI=wjk9K_8_$&i6B9J#vpYd%?qS8 zfV3Ep)&$bRKw3+WvxFl^J4h!;H%Ko?U!N(+AjnXksf06#QJF#0XtENc9w$d`YH@L5 rdTR0JXvQeU&DWR`7#Y(ho3kh|W=)P@dB7nr#=+FU^1)zo6l*E~CVV6q diff --git a/plugins/rmass/actions/__pycache__/synapseregister.cpython-314.pyc b/plugins/rmass/actions/__pycache__/synapseregister.cpython-314.pyc index a07fcce34d91c793cc5129924ba2a47ba5456a67..0474b2ab699476363de3965b4f3f92988d3b6283 100644 GIT binary patch delta 206 zcmaFP_JNI8n~#@^0SL;1E@iEr$ZHiX>CYI%uE!80<)B=L2N<1L3}`2kO)6eghii8kGX_3NT7r*NU(%GNGM1+NCc=x6sSThNL-((gd<2I zNMhn5pNZdJ8u8_(78fU`r)H!krlb}X-{L4OPAzgyEK0e>l$oN*TqF#1PLT+RU;`4G tTtxzt|1d6P+&Os>lZvR>0}i1}B6c6xS$Wt#Ftc+rHL!mWnS7tA0{{?gG!Fm( delta 196 zcmeys_MDAZn~#@^0SNk^UdR%j$ZHiX<fvEuE(U$q|aEw62uwA6~rCHqt66n zu>)DWL2N;MLHs~jkca?Kghii8kGX_3NU(%0NT`H8NH|C&NEE0>45&gpNJ5{fgd<2Y zNOIyLA9nVFqWrYXoQZE<%W&kT78fU`rxq760UdCQqc}A$CAG*iMU$&Ya55*;QpUZL n*E6X|>fYcGnh?2w>w<{(2Ucbtwhzp#+)NGZ9|R`9VCnz>4L330 diff --git a/plugins/rmass/actions/getmessage.py b/plugins/rmass/actions/getmessage.py index 23dad36..a6ec6a8 100644 --- a/plugins/rmass/actions/getmessage.py +++ b/plugins/rmass/actions/getmessage.py @@ -2,6 +2,8 @@ name = "Get messages" kind = "action" +alias = "getmessage" + showstatus = True method = "GET" diff --git a/plugins/rmass/actions/pullmessagelist.py b/plugins/rmass/actions/pullmessagelist.py index b7d5591..d04fab3 100644 --- a/plugins/rmass/actions/pullmessagelist.py +++ b/plugins/rmass/actions/pullmessagelist.py @@ -2,6 +2,8 @@ name = "Get message list" kind = "action" +alias = "pullmessages" + showstatus = True method = "GET" diff --git a/plugins/rmass/actions/synapseassignusername.py b/plugins/rmass/actions/synapseassignusername.py index 166831e..de0e735 100644 --- a/plugins/rmass/actions/synapseassignusername.py +++ b/plugins/rmass/actions/synapseassignusername.py @@ -6,12 +6,14 @@ kind = "action" showstatus = True -astoken = os.environ["AS_TOKEN"] +#astoken = os.environ["AS_TOKEN"] resolve = { "get": { - "sender": ["messages", 0, "senderId"], - "username": ["profile", "username"], + "sender": ["messageheaders", "userCard", "id"], + #"sender": ["pullmessages", 0, "userCard", "id"], + "username": ["messageheaders", "userCard", "username"], + #"username": ["pullmessages", 0, "userCard", "username"], }, "construct": { "matrixuser": [ diff --git a/plugins/rmass/actions/synapsecreatedmroom.py b/plugins/rmass/actions/synapsecreatedmroom.py index ccb912a..30c9999 100644 --- a/plugins/rmass/actions/synapsecreatedmroom.py +++ b/plugins/rmass/actions/synapsecreatedmroom.py @@ -8,8 +8,10 @@ showstatus = True resolve = { "get": { - "sender": ["messages", 0, "senderId"], - "username": ["profile", "username"], + "sender": ["messageheaders", "userCard", "id"], + #"sender": ["pullmessages", 0, "userCard", "id"], + #"username": ["messageheaders", "username"], + "username": ["messageheaders", "userCard", "username"], }, "construct": { "matrixuser": [ diff --git a/plugins/rmass/actions/synapsegetroomid.py b/plugins/rmass/actions/synapsegetroomid.py index 7c31735..8803012 100644 --- a/plugins/rmass/actions/synapsegetroomid.py +++ b/plugins/rmass/actions/synapsegetroomid.py @@ -8,7 +8,10 @@ showstatus = True resolve = { "get": { - "sender": ["messages", 0, "senderId"], + "sender": ["messageheaders", "userCard", "id"], + #"sender": ["pullmessages", 0, "userCard", "id"], + #"username": ["messageheaders", "username"], + #"username": ["messageheaders", "userCard", "username"], }, "construct": { "matrixdm": [ diff --git a/plugins/rmass/actions/synapsematchmessages.py b/plugins/rmass/actions/synapsematchmessages.py new file mode 100644 index 0000000..2e3efc7 --- /dev/null +++ b/plugins/rmass/actions/synapsematchmessages.py @@ -0,0 +1,90 @@ +import os + +name = "Synapse Message Push" + +kind = "action" + +showstatus = True + +recursive = { + "source": "messages", + "reverse": True, + "label": "messageitem", +} + +resolve = { + "get": { + "sender": ["messageitem", "senderId"], + "message_id": ["messageitem", "id"], + "message_body": ["messageitem", "text"], + "room_id": ["dmroom_id"], + "timestamp": ["messageitem", "createdAt"], + }, + "construct": { + "matrixuser": [ + "@rmass_", + {"resolved": "sender"}, + ":loxthelion.com", + ], + }, + "transform": { + "matrixuser": { + "@rmass_238302:loxthelion.com": "@lyncoln:loxthelion.com", + }, + }, +} + +keys = [ + { + "keytitle": "msgtype", + "keyvalue": "m.text", + }, + { + "keytitle": "body", + "keyvalue": { + "resolved": "message_body", + }, + }, + { + "keytitle": "format", + "keyvalue": "org.matrix.custom.html", + }, + { + "keytitle": "formatted_body", + "keyvalue": { + "resolved": "message_body", + }, + }, + { + "keytitle": "com.loxthelion.rmass_message_id", + "keyvalue": { + "resolved": "message_id", + }, + }, +] + +method = "PUT" + +path = [ + "https://loxthelion.com/_matrix/client/v3/rooms/", + {"resolved": "room_id"}, + "/send/m.room.message/", + {"resolved": "message_id"}, + "?user_id=", + {"resolved": "matrixuser"}, + "&ts=", + {"resolved": "timestamp"}, + "000" +] + +headers = { + "Authorization": { + "os": "AS_TOKEN", + "prefix": "Bearer ", + }, + "Content-Type": "application/json", +} + +#outputs = { +# "room_id": "room_id", +#} diff --git a/plugins/rmass/actions/synapsepushmessages.py b/plugins/rmass/actions/synapsepushmessages.py index d9041a9..f2392f0 100644 --- a/plugins/rmass/actions/synapsepushmessages.py +++ b/plugins/rmass/actions/synapsepushmessages.py @@ -7,7 +7,7 @@ kind = "action" showstatus = True recursive = { - "source": "messages", + "source": "getmessage", "reverse": True, "label": "messageitem", } @@ -55,7 +55,12 @@ keys = [ "resolved": "message_body", }, }, - + { + "keytitle": "com.loxthelion.rmass_message_id", + "keyvalue": { + "resolved": "message_id", + }, + }, ] method = "PUT" @@ -80,6 +85,4 @@ headers = { "Content-Type": "application/json", } -#outputs = { -# "room_id": "room_id", -#} + diff --git a/plugins/rmass/actions/synapseregister.py b/plugins/rmass/actions/synapseregister.py index da80e8f..eda2b22 100644 --- a/plugins/rmass/actions/synapseregister.py +++ b/plugins/rmass/actions/synapseregister.py @@ -8,8 +8,10 @@ showstatus = True resolve = { "get": { - "sender": ["messages", 0, "senderId"], - "username": ["profile", "username"], + "sender": ["messageheaders", "userCard", "id"], + #"sender": ["pullmessages", 0, "userCard", "id"], + "username": ["messageheaders", "userCard", "username"], + #"username": ["pullmessages", 0, "userCard", "username"], } } keys = [ diff --git a/plugins/rmass/inbound/__init__.py b/plugins/rmass/inbound/__init__.py new file mode 100644 index 0000000..b418dc1 --- /dev/null +++ b/plugins/rmass/inbound/__init__.py @@ -0,0 +1 @@ +from . import receive diff --git a/plugins/rmass/inbound/__pycache__/__init__.cpython-314.pyc b/plugins/rmass/inbound/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24ea4a85d0c8bd4f0d5deb20190dd763f6131f74 GIT binary patch literal 189 zcmdPqWHa^HWN5QtgU3faZYgDF!hil5_6auW0d z3i|_2!F@1q-kTZbT`bFjAb#EFV~zc1GJCLpu{%LA5J`YY3RE&+GLxC0kV$?{*0a~8 z)EnJ`@$U3q2S{_ZnapjP>s~tucWa)wQ&uPbWL%Ys(D>&73SvmPkI+U4A7nS>r7O{R zt3{=HQ;E)6G6K^XVoqr*MsnqFVFFX`ag`YLYqO}D@|6f2w|jTxo% dD_;%#J3m4ykB4F`$gF&C#*8i4TizYw*&p>JOSk|4 literal 0 HcmV?d00001 diff --git a/plugins/rmass/inbound/receive.py b/plugins/rmass/inbound/receive.py new file mode 100644 index 0000000..61fab4b --- /dev/null +++ b/plugins/rmass/inbound/receive.py @@ -0,0 +1,12 @@ +name = "Reception Test" + +kind = "action" + +showstatus = False + + + +outputs = { + "events": "events", +} + diff --git a/plugins/rmass/operations/__pycache__/synapsemessagepush.cpython-314.pyc b/plugins/rmass/operations/__pycache__/synapsemessagepush.cpython-314.pyc index 2f51a56e9c231b53bbac918f9485313760def515..916d19a5c884a2c095c8bd2dd0a7bbd96ea85c3e 100644 GIT binary patch delta 71 zcmdnYwv&xln~#@^0SFRYE@eqiJ!Ur;pL!8Mtg*#H2d?Gz*c delta 65 zcmdnVwwaArn~#@^0SE#fozD`T$Xmk79LpNZwy{m0k&P`iH!(A3^Fc;)M!}35EP@w= Um2a@{PT-p1e?ix2GAFYE05#DPK>z>% diff --git a/plugins/rmass/operations/synapsemessagepush.py b/plugins/rmass/operations/synapsemessagepush.py index 7f01d37..bba62fd 100644 --- a/plugins/rmass/operations/synapsemessagepush.py +++ b/plugins/rmass/operations/synapsemessagepush.py @@ -12,8 +12,8 @@ actions = [ ] recursiveset = { - "source": "emails", + "source": "pullmessages", "outputlabel": "messageheaders", - "actions": [getmessage, synapseregister, synapseassignusername, synapsecreatespace, synapsegetspaceid, synapsecreatedmroom, synapsegetroomid, synapseassignspace, synapsepushmessages], + "actions": [synapseregister, synapseassignusername, getmessage, synapsecreatespace, synapsegetspaceid, synapsecreatedmroom, synapsegetroomid, synapseassignspace, synapsepushmessages], } diff --git a/savedata/rmmanager.db b/savedata/rmmanager.db new file mode 100644 index 0000000000000000000000000000000000000000..94e431de9cb3d63c80d7018e2e9b6097a37b0d51 GIT binary patch literal 16384 zcmeI&%Z{5?7yw}GvDzle#I3r>B8w1>qO?k9#K15b@8S!_I9$dUV_;)(8w2Lz7<_?U zr->9*>Lc`F`VLv=1-j|7>Z%7<6S>Wd)TWK9R{xO>=5YQ4Ki|O%F2e!uXD)t`EFv?* zDeP0MQo)|$IEG;lQLUkRRVrxZkL|0zn|>c+N8kOjU;i1~yZaiu`?~%^{o9*DVLJ$b z00@8p2!H?xfB*=900@8p2>dmHuc^w%_YMv!mxq~Yg>JIU=F4o7xoNhuT5ZcrQ(|rvv}uHhxWUd^_`#*j(he!e|OEN~n%_9v_L^V8ncN?VyzzF5PS6-wFSc-uvht zcTmCn*l{=M^AO#ZPt0YOY}=Ea1SjN9qefT%?6BjVVS7mQlTvjb)#{yZu>Ch^0R;p= z00ck)1V8`;KmY_l00cg)z@=8LJ$`wA;a)7<)SG0<%#Gc=Pq1e#b_h={l*ar3f&$G3K&XK29y{yX`vXUTtxeZ&z%a2O$z}-N}VYs4%faJ%X2PB zd{=Gt4KfU5He8JuS{)SXQ0+OAp>ny>6(b|=p6i4s4ni@IBb9eZI#asyuGAsQMCLXn zl!+uxPhQ(avf`J9nwyDf}Lv3=L&P9%soU~)M<~9-c0?DSMGv8AERcId8Qweuxg1kD!@Dz!(io|v}nrs;djavL$2twrT#*>}#!U;B2A+kIc&J$uKGfmwpr8{Few*{gg$mcCF*9zkUQl<@5E&rgsCyxskeKr+@g%o zC^eCw#Wn(6ljjym_seZ!$Ij8r6vnul>!jB)HJL7jQB10jX+q!5hPZOjx*dm#$u{zG zX1GvQ%6x26Eo?GeS+ln>9kg%49MfoK2W9@!;I|nqm2L(RcdtCY5bG2%H@6oN@$3ffs|2yAf`#+)u6c7Lb y5C8!X009sH0T2KI5cszQF8SKa`xW>W;2-%Gp!(wT+N&qG-a`}K|NnpA|Njd9pU$QL literal 0 HcmV?d00001 diff --git a/tokens.json b/tokens.json index 6ad53b0..80be52b 100644 --- a/tokens.json +++ b/tokens.json @@ -1 +1 @@ -{"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTIwODQ2MDksIm5iZiI6MTc5MjA4NDQyOSwic3ViIjoiMjM4MzAyIiwidXNlcm5hbWUiOiJYeHhvdGlxIiwidXNlclR5cGUiOjEsInN0YWdlTmFtZSI6Ilh4eG90aXEiLCJhcHByb3ZlZCI6MSwibG9jYXRpb25JZCI6NDcyLCJzZWFyY2hDaXR5IjoiYXRsYW50YSIsImNvdW50cnlTaG9ydCI6IlVTIiwic2Vzc2lvbkNvdW50cnlDb250aW5lbnQiOiJOQSIsImlzRnJvemVuIjowLCJsb2NhdGlvbkxhYmVsIjoiQXRsYW50YSwgR0EiLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MjA4NDQ4OX0.CcXQrFvFl5LraO3VWoe3CZ4u-jAHVuMt6Fag2_v5QJ79ekRsPMnOFSMjLycaZoc0hTZRiJnpUIqBWKmTsg2juA", "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTQ2NzY0ODksIm5iZiI6MTc5MjA4NDQyOSwianRpIjoiQjIrSmxQWVdvYjYvOVBYTjZ3VnFrZzhmZHFrY05nQVZjbHF5YVluclJUdz0iLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MjA4NDQ4OSwic3ViIjoiMjM4MzAyIn0.RSOQP-lQv7N7Ut_YOkwF58-k-kGoFYCsGqYISJiUxajJ2YuDWz6vMQoWCN82NYUPJvfFDnGgiiugAnrhWS-OoQ"} \ No newline at end of file +{"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTIxNjkwNTUsIm5iZiI6MTc5MjE2ODg3NSwic3ViIjoiMjM4MzAyIiwidXNlcm5hbWUiOiJYeHhvdGlxIiwidXNlclR5cGUiOjEsInN0YWdlTmFtZSI6Ilh4eG90aXEiLCJhcHByb3ZlZCI6MSwibG9jYXRpb25JZCI6NDcyLCJzZWFyY2hDaXR5IjoiYXRsYW50YSIsImNvdW50cnlTaG9ydCI6IlVTIiwic2Vzc2lvbkNvdW50cnlDb250aW5lbnQiOiJOQSIsImlzRnJvemVuIjowLCJsb2NhdGlvbkxhYmVsIjoiQXRsYW50YSwgR0EiLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MjE2ODkzNX0.Z3RFCsh82FEka9eUcg-vzo9ocOI2Xoay1SyYtYM4zFb3ub3roYfIZ6pGLazfCm0j_o3aKP9VmxLkbIthRTOgSg", "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTQ3NjA5MzUsIm5iZiI6MTc5MjE2ODg3NSwianRpIjoieVBJZ2ljRGlvUE5VQzVSVHdOZVIyTFNmZnFPY0hNQlNjRmVLd25tTFpFOD0iLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MjE2ODkzNSwic3ViIjoiMjM4MzAyIn0.DcwTYGNTX-NBNynrPGDMZqoxyZhOhCaTpHSX_1spNIIOdsDaBpc0nHjOc5m8iZB0C8obM1lQD5d5FZbCyuGzjA"} \ No newline at end of file