Updated select module and refined message retrieval process in RMASS definitions
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,10 +1,15 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
def buildOutput(response, action, outputs):
|
def buildOutput(response, action, outputs):
|
||||||
#if select_data != "not applied":
|
#if select_data != "not applied":
|
||||||
#response_data = select_data
|
#response_data = select_data
|
||||||
#else:
|
#else:
|
||||||
#response_data = response.json()
|
#response_data = response.json()
|
||||||
if hasattr(action, "outputs"):
|
if hasattr(action, "outputs"):
|
||||||
response_data = response.json()
|
try:
|
||||||
|
response_data = response.json()
|
||||||
|
except AttributeError:
|
||||||
|
response_data = json.loads(response)
|
||||||
response_objects = [response_data]
|
response_objects = [response_data]
|
||||||
|
|
||||||
while response_objects:
|
while response_objects:
|
||||||
|
|||||||
@@ -5,12 +5,14 @@ def recursiveSet(definition, outputs):
|
|||||||
for item in outputs[definition.recursiveset["source"]]:
|
for item in outputs[definition.recursiveset["source"]]:
|
||||||
outputs[definition.recursiveset["outputlabel"]] = item
|
outputs[definition.recursiveset["outputlabel"]] = item
|
||||||
#outputs["recursive"] = item
|
#outputs["recursive"] = item
|
||||||
|
print("DEBUGGING recursiveset item")
|
||||||
|
print(outputs[definition.recursiveset["outputlabel"]])
|
||||||
|
|
||||||
for job in recursiveset:
|
for job in recursiveset:
|
||||||
outputs, response = buildAction(job, outputs)
|
outputs, response = buildAction(job, outputs)
|
||||||
|
|
||||||
print(outputs["profile"])
|
#print(outputs["profile"])
|
||||||
print(outputs["messages"])
|
#print(outputs["messages"])
|
||||||
return outputs
|
return outputs
|
||||||
|
|
||||||
from core.execution.action.action import buildAction
|
from core.execution.action.action import buildAction
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import json
|
import json
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
def buildSave(action, outputs):
|
def buildSave(action, outputs):
|
||||||
if hasattr(action, "savedata"):
|
if hasattr(action, "savedata"):
|
||||||
@@ -11,6 +12,27 @@ def buildSave(action, outputs):
|
|||||||
json.dump(save_data, save_file)
|
json.dump(save_data, save_file)
|
||||||
|
|
||||||
print(f"Data saved by {action.name} to {action.savepath}")
|
print(f"Data saved by {action.name} to {action.savepath}")
|
||||||
|
|
||||||
|
database = sqlite3.connect("savedata/rmmanager.db")
|
||||||
|
for key, value in save_data.items():
|
||||||
|
database.execute("""
|
||||||
|
CREATE TABLE IF NOT EXISTS output_test (
|
||||||
|
dictionary TEXT NOT NULL UNIQUE,
|
||||||
|
value TEXT NOT NULL UNIQUE
|
||||||
|
)
|
||||||
|
""")
|
||||||
|
|
||||||
|
database.execute("""
|
||||||
|
INSERT INTO output_test(dictionary, value)
|
||||||
|
VALUES (?, ?)
|
||||||
|
ON CONFLICT (dictionary)
|
||||||
|
DO UPDATE SET value = excluded.value
|
||||||
|
""", (key, value)
|
||||||
|
)
|
||||||
|
|
||||||
|
database.commit()
|
||||||
|
database.close()
|
||||||
|
|
||||||
return outputs
|
return outputs
|
||||||
|
|
||||||
def loadSave(action, outputs):
|
def loadSave(action, outputs):
|
||||||
@@ -23,3 +45,21 @@ def loadSave(action, outputs):
|
|||||||
|
|
||||||
print(f"Data loaded by {action.name} from {action.savepath}")
|
print(f"Data loaded by {action.name} from {action.savepath}")
|
||||||
return outputs
|
return outputs
|
||||||
|
|
||||||
|
def buildSave2(action, outputs):
|
||||||
|
|
||||||
|
database.execute("""
|
||||||
|
CREATE TABLE IF NOT EXISTS message_mapping (
|
||||||
|
rmass_message_id INTEGER PRIMARY KEY,
|
||||||
|
matrix_event_id TEXT NOT NULL UNIQUE
|
||||||
|
)
|
||||||
|
""")
|
||||||
|
database = sqlite3.connect("rmmanager.db")
|
||||||
|
|
||||||
|
database.execute(
|
||||||
|
"INSERT INTO message_mapping VALUES (?, ?)",
|
||||||
|
(action.savedata[savename], outputs["event_id"])
|
||||||
|
)
|
||||||
|
|
||||||
|
database.commit()
|
||||||
|
database.close()
|
||||||
@@ -24,11 +24,15 @@ def buildSelect(action, outputs):
|
|||||||
if include_match and exclude_match:
|
if include_match and exclude_match:
|
||||||
select_data.append(item)
|
select_data.append(item)
|
||||||
|
|
||||||
outputs[action.select["source"]] = select_data
|
#outputs[{action.select["source"]}] = select_data
|
||||||
#print(select_data)
|
outputs[action.alias] = select_data
|
||||||
|
|
||||||
|
print("DEBUGGING", action.alias)
|
||||||
|
print(outputs[action.alias])
|
||||||
|
|
||||||
return select_data, action, outputs
|
return select_data, action, outputs
|
||||||
except: (KeyError, TypeError)
|
except (KeyError, TypeError):
|
||||||
|
print("Error in selection")
|
||||||
#select_data = ["no selection"]
|
#select_data = ["no selection"]
|
||||||
return select_data, action, outputs
|
return select_data, action, outputs
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
+103
-52
@@ -1,72 +1,123 @@
|
|||||||
import socket
|
|
||||||
import json
|
|
||||||
import os
|
import os
|
||||||
import logging
|
import json
|
||||||
from http.server import HTTPServer, BaseHTTPRequestHandler
|
from http.server import HTTPServer, BaseHTTPRequestHandler
|
||||||
|
|
||||||
from .dispatcher import dispatchRequest
|
from .dispatcher import dispatchRequest
|
||||||
from .createresponse import buildResponse
|
from .createresponse import buildResponse
|
||||||
|
from core.runtime.outputs import buildOutput
|
||||||
|
from plugins.rmass.inbound import receive
|
||||||
|
|
||||||
port = int(os.environ.get("SERVER_PORT", 19001))
|
port = int(os.environ.get("SERVER_PORT", 19001))
|
||||||
|
|
||||||
from http.server import HTTPServer, BaseHTTPRequestHandler
|
|
||||||
|
|
||||||
class RequestHandler(BaseHTTPRequestHandler):
|
class RequestHandler(BaseHTTPRequestHandler):
|
||||||
def do_POST(self):
|
def do_POST(self):
|
||||||
|
lifecycles = {}
|
||||||
print("POST request received")
|
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-Type", "application/json")
|
||||||
|
self.send_header("Content-Length", str(len(responsebytes)))
|
||||||
self.end_headers()
|
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():
|
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}")
|
print(f"Server listening on port {port}")
|
||||||
|
|
||||||
server.serve_forever()
|
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()
|
|
||||||
@@ -1 +1 @@
|
|||||||
from . import actions, operations
|
from . import actions, operations, inbound
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -2,6 +2,8 @@ name = "Get messages"
|
|||||||
|
|
||||||
kind = "action"
|
kind = "action"
|
||||||
|
|
||||||
|
alias = "getmessage"
|
||||||
|
|
||||||
showstatus = True
|
showstatus = True
|
||||||
|
|
||||||
method = "GET"
|
method = "GET"
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ name = "Get message list"
|
|||||||
|
|
||||||
kind = "action"
|
kind = "action"
|
||||||
|
|
||||||
|
alias = "pullmessages"
|
||||||
|
|
||||||
showstatus = True
|
showstatus = True
|
||||||
|
|
||||||
method = "GET"
|
method = "GET"
|
||||||
|
|||||||
@@ -6,12 +6,14 @@ kind = "action"
|
|||||||
|
|
||||||
showstatus = True
|
showstatus = True
|
||||||
|
|
||||||
astoken = os.environ["AS_TOKEN"]
|
#astoken = os.environ["AS_TOKEN"]
|
||||||
|
|
||||||
resolve = {
|
resolve = {
|
||||||
"get": {
|
"get": {
|
||||||
"sender": ["messages", 0, "senderId"],
|
"sender": ["messageheaders", "userCard", "id"],
|
||||||
"username": ["profile", "username"],
|
#"sender": ["pullmessages", 0, "userCard", "id"],
|
||||||
|
"username": ["messageheaders", "userCard", "username"],
|
||||||
|
#"username": ["pullmessages", 0, "userCard", "username"],
|
||||||
},
|
},
|
||||||
"construct": {
|
"construct": {
|
||||||
"matrixuser": [
|
"matrixuser": [
|
||||||
|
|||||||
@@ -8,8 +8,10 @@ showstatus = True
|
|||||||
|
|
||||||
resolve = {
|
resolve = {
|
||||||
"get": {
|
"get": {
|
||||||
"sender": ["messages", 0, "senderId"],
|
"sender": ["messageheaders", "userCard", "id"],
|
||||||
"username": ["profile", "username"],
|
#"sender": ["pullmessages", 0, "userCard", "id"],
|
||||||
|
#"username": ["messageheaders", "username"],
|
||||||
|
"username": ["messageheaders", "userCard", "username"],
|
||||||
},
|
},
|
||||||
"construct": {
|
"construct": {
|
||||||
"matrixuser": [
|
"matrixuser": [
|
||||||
|
|||||||
@@ -8,7 +8,10 @@ showstatus = True
|
|||||||
|
|
||||||
resolve = {
|
resolve = {
|
||||||
"get": {
|
"get": {
|
||||||
"sender": ["messages", 0, "senderId"],
|
"sender": ["messageheaders", "userCard", "id"],
|
||||||
|
#"sender": ["pullmessages", 0, "userCard", "id"],
|
||||||
|
#"username": ["messageheaders", "username"],
|
||||||
|
#"username": ["messageheaders", "userCard", "username"],
|
||||||
},
|
},
|
||||||
"construct": {
|
"construct": {
|
||||||
"matrixdm": [
|
"matrixdm": [
|
||||||
|
|||||||
@@ -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",
|
||||||
|
#}
|
||||||
@@ -7,7 +7,7 @@ kind = "action"
|
|||||||
showstatus = True
|
showstatus = True
|
||||||
|
|
||||||
recursive = {
|
recursive = {
|
||||||
"source": "messages",
|
"source": "getmessage",
|
||||||
"reverse": True,
|
"reverse": True,
|
||||||
"label": "messageitem",
|
"label": "messageitem",
|
||||||
}
|
}
|
||||||
@@ -55,7 +55,12 @@ keys = [
|
|||||||
"resolved": "message_body",
|
"resolved": "message_body",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"keytitle": "com.loxthelion.rmass_message_id",
|
||||||
|
"keyvalue": {
|
||||||
|
"resolved": "message_id",
|
||||||
|
},
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
method = "PUT"
|
method = "PUT"
|
||||||
@@ -80,6 +85,4 @@ headers = {
|
|||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
}
|
}
|
||||||
|
|
||||||
#outputs = {
|
|
||||||
# "room_id": "room_id",
|
|
||||||
#}
|
|
||||||
|
|||||||
@@ -8,8 +8,10 @@ showstatus = True
|
|||||||
|
|
||||||
resolve = {
|
resolve = {
|
||||||
"get": {
|
"get": {
|
||||||
"sender": ["messages", 0, "senderId"],
|
"sender": ["messageheaders", "userCard", "id"],
|
||||||
"username": ["profile", "username"],
|
#"sender": ["pullmessages", 0, "userCard", "id"],
|
||||||
|
"username": ["messageheaders", "userCard", "username"],
|
||||||
|
#"username": ["pullmessages", 0, "userCard", "username"],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
keys = [
|
keys = [
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
from . import receive
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,12 @@
|
|||||||
|
name = "Reception Test"
|
||||||
|
|
||||||
|
kind = "action"
|
||||||
|
|
||||||
|
showstatus = False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
outputs = {
|
||||||
|
"events": "events",
|
||||||
|
}
|
||||||
|
|
||||||
Binary file not shown.
@@ -12,8 +12,8 @@ actions = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
recursiveset = {
|
recursiveset = {
|
||||||
"source": "emails",
|
"source": "pullmessages",
|
||||||
"outputlabel": "messageheaders",
|
"outputlabel": "messageheaders",
|
||||||
"actions": [getmessage, synapseregister, synapseassignusername, synapsecreatespace, synapsegetspaceid, synapsecreatedmroom, synapsegetroomid, synapseassignspace, synapsepushmessages],
|
"actions": [synapseregister, synapseassignusername, getmessage, synapsecreatespace, synapsegetspaceid, synapsecreatedmroom, synapsegetroomid, synapseassignspace, synapsepushmessages],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
+1
-1
@@ -1 +1 @@
|
|||||||
{"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTIwODQ2MDksIm5iZiI6MTc5MjA4NDQyOSwic3ViIjoiMjM4MzAyIiwidXNlcm5hbWUiOiJYeHhvdGlxIiwidXNlclR5cGUiOjEsInN0YWdlTmFtZSI6Ilh4eG90aXEiLCJhcHByb3ZlZCI6MSwibG9jYXRpb25JZCI6NDcyLCJzZWFyY2hDaXR5IjoiYXRsYW50YSIsImNvdW50cnlTaG9ydCI6IlVTIiwic2Vzc2lvbkNvdW50cnlDb250aW5lbnQiOiJOQSIsImlzRnJvemVuIjowLCJsb2NhdGlvbkxhYmVsIjoiQXRsYW50YSwgR0EiLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MjA4NDQ4OX0.CcXQrFvFl5LraO3VWoe3CZ4u-jAHVuMt6Fag2_v5QJ79ekRsPMnOFSMjLycaZoc0hTZRiJnpUIqBWKmTsg2juA", "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTQ2NzY0ODksIm5iZiI6MTc5MjA4NDQyOSwianRpIjoiQjIrSmxQWVdvYjYvOVBYTjZ3VnFrZzhmZHFrY05nQVZjbHF5YVluclJUdz0iLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MjA4NDQ4OSwic3ViIjoiMjM4MzAyIn0.RSOQP-lQv7N7Ut_YOkwF58-k-kGoFYCsGqYISJiUxajJ2YuDWz6vMQoWCN82NYUPJvfFDnGgiiugAnrhWS-OoQ"}
|
{"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTIxNjkwNTUsIm5iZiI6MTc5MjE2ODg3NSwic3ViIjoiMjM4MzAyIiwidXNlcm5hbWUiOiJYeHhvdGlxIiwidXNlclR5cGUiOjEsInN0YWdlTmFtZSI6Ilh4eG90aXEiLCJhcHByb3ZlZCI6MSwibG9jYXRpb25JZCI6NDcyLCJzZWFyY2hDaXR5IjoiYXRsYW50YSIsImNvdW50cnlTaG9ydCI6IlVTIiwic2Vzc2lvbkNvdW50cnlDb250aW5lbnQiOiJOQSIsImlzRnJvemVuIjowLCJsb2NhdGlvbkxhYmVsIjoiQXRsYW50YSwgR0EiLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MjE2ODkzNX0.Z3RFCsh82FEka9eUcg-vzo9ocOI2Xoay1SyYtYM4zFb3ub3roYfIZ6pGLazfCm0j_o3aKP9VmxLkbIthRTOgSg", "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTQ3NjA5MzUsIm5iZiI6MTc5MjE2ODg3NSwianRpIjoieVBJZ2ljRGlvUE5VQzVSVHdOZVIyTFNmZnFPY0hNQlNjRmVLd25tTFpFOD0iLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MjE2ODkzNSwic3ViIjoiMjM4MzAyIn0.DcwTYGNTX-NBNynrPGDMZqoxyZhOhCaTpHSX_1spNIIOdsDaBpc0nHjOc5m8iZB0C8obM1lQD5d5FZbCyuGzjA"}
|
||||||
Reference in New Issue
Block a user