Fix GetCatalog

This commit is contained in:
Ivan Vazhenin
2023-03-26 15:29:17 +03:00
parent 65c0b561a7
commit c2383140b6
12 changed files with 109 additions and 34 deletions

124
main.py
View File

@@ -1,14 +1,16 @@
import datetime import datetime
from uuid import uuid4 import json
from uuid import uuid4, UUID
from xmlrpc.server import SimpleXMLRPCServer from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.client import ServerProxy from xmlrpc.client import ServerProxy
import logging import logging
import os import os
import os.path import os.path
from requests.graphql import get_catalog import requests
from reqs.graphql import get_catalog, get_object
from pygost import gost34112012256 from pygost import gost34112012256
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from requests.request_xml_service import RequestXmlService from reqs.request_xml_service import RequestXmlService
import zipfile import zipfile
PASSWORD = 'gost_2012$a742ec53198ec2a5027086fba8814a89982a57112d1a72d02260161108f39b50' PASSWORD = 'gost_2012$a742ec53198ec2a5027086fba8814a89982a57112d1a72d02260161108f39b50'
@@ -37,35 +39,92 @@ def auth_challenge():
return uuid4().hex return uuid4().hex
def restore_uuid(oid):
uuid = UUID(oid)
return str(uuid)
def get_catalog(params, files, url):
date = datetime.datetime.now()
rxmls = RequestXmlService()
req = ET.fromstring(params['query_data'])
req_id = rxmls.get_request_uuid(req)
res_id = uuid4().hex
res = rxmls.get_request_document(res_id, req_id)
rxmls.set_result(res, 0, '')
response_params = {
'from': params['to'],
'to': params['from'],
'ts_added': date.timestamp(),
'user_id': '1',
'user_id_to': params['user_id'],
'query_type': 1004,
'query_data': ET.tostring(res, encoding='unicode', xml_declaration=True)
}
catalog = get_catalog()
filename = uuid4().hex
filepath = '/tmp/' + filename
zipf = zipfile.ZipFile(filepath, "w")
zipf.writestr('WF.CLL', catalog)
zipf.close()
response_files = [{'name': filename, 'url': filepath, 'size': os.path.getsize(filepath)}]
proxy = ServerProxy(url)
proxy.send(response_params, response_files, 'http://10.10.8.27:9000/')
def get_objects(params, files, url):
date = datetime.datetime.now()
rxmls = RequestXmlService()
req = ET.fromstring(params['query_data'])
req_id = rxmls.get_request_uuid(req)
res_id = uuid4().hex
res = rxmls.get_request_document(res_id, req_id)
rxmls.set_result(res, 0, '')
objs = req.find('objects')
uids = [restore_uuid(x.get('object_id')) for x in objs.findall('object')]
rxmls.set_result(res, 0, '')
response_params = {
'from': params['to'],
'to': params['from'],
'ts_added': date.timestamp(),
'user_id': '1',
'user_id_to': params['user_id'],
'query_type': 1001,
'query_data': ET.tostring(res, encoding='unicode', xml_declaration=True)
}
filename = uuid4().hex
filepath = '/tmp/' + filename
zipf = zipfile.ZipFile(filepath, "w")
main_filename = None
for uid in uids:
obj = json.loads(get_object(uid))
print(type(obj))
for file in obj['properties'].get('c1000', []):
if not main_filename:
main_filename = file['fileName']
res = requests.get(f'https://gql.ivazh.ru/item/{file["key"]}')
zipf.writestr(f'{main_filename}/{file["fileName"]}', res.content)
zipf.close()
response_files = [{'name': filename, 'url': filepath, 'size': os.path.getsize(filepath)}]
print(response_files)
# proxy = ServerProxy(url)
# proxy.send(response_params, response_files, 'http://10.10.8.27:9000/')
def get_metadata(params, files, url):
pass
def accept(params, files, url): def accept(params, files, url):
print(params, files, url) print(params, files, url)
print('Accept') print('Accept')
date = datetime.datetime.now()
if params['query_type'] == 4: if params['query_type'] == 4:
rxmls = RequestXmlService() get_catalog(params, files, url)
req = ET.fromstring(params['query_data']) if params['query_type'] == 1:
req_id = rxmls.get_request_uuid(req) get_objects(params, files, url)
res_id = uuid4().hex if params['query_type'] == 24:
res = rxmls.get_request_document(res_id, req_id) get_metadata(params, files, url)
rxmls.set_result(res, 0, '')
response_params = {
'from': params['to'],
'to': params['from'],
'ts_added': date.timestamp(),
'user_id': '1',
'user_id_to': '3302',
'query_type': 1004,
'query_data': ET.tostring(res, encoding='unicode', xml_declaration=True)
}
catalog = get_catalog()
filename = uuid4().hex
filepath = '/tmp/' + filename
zipf = zipfile.ZipFile(filepath, "w")
zipf.writestr('WF.CLL', catalog)
zipf.close()
response_files = [{'name': filename, 'url': filepath, 'size': os.path.getsize(filepath)}]
proxy = ServerProxy(url)
proxy.send(response_params, response_files, 'http://10.10.8.27:9000/')
return True return True
@@ -91,12 +150,13 @@ def main():
def test(): def test():
params = {'from': 'tcp://kptsp_vb', 'query_data': '<?xml version="1.0" encoding="utf-8"?><request><header parcel_id="1665c872f24e46589f36d264a75a72dd"/><getCatalog from="1675776233.21" withRef="NO"/></request>', 'query_type': 4, 'to': 'tcp://bnd127', 'user_id': '1', 'ts_added': 1679213998.282467} params = {"from": "tcp://kptsp_vb", "query_data": "<?xml version=\"1.0\" encoding=\"utf-8\"?><request><header parcel_id=\"990715ba919544a98f22cc7d3b0d9e8d\"/><objects><object object_id=\"fc44343bd1654ee7b03ac1731567bbfd\"/><object object_id=\"13526ac78c574036879e1ec31bb78779\"/><object object_id=\"06b8a23c9a894bc5a5f9e6baa3540f87\"/><object object_id=\"6b02b39791064054852d5e165ff1dfc0\"/><object object_id=\"b81e42e704fe4054986956b2b920661d\"/><object object_id=\"c002a570f05745a2943a78686f3f17c0\"/><object object_id=\"2b15bf0f25e842b6a3b5d9762f2334a7\"/><object object_id=\"294ac9e83d3f4cf380cb0b99f592452b\"/><object object_id=\"a8901d5e642a410c909701e015644f69\"/><object object_id=\"1989b9dc8e114aaca0508cb9241afc5b\"/><object object_id=\"cf2df49a4e9143ffacf490b3138d26bd\"/><object object_id=\"c9861cfc30c641619ae9691f8c7d9c4d\"/><object object_id=\"87ebaff5ab2c411b97626b634d709f38\"/><object object_id=\"735e00c4211344bdaca2ac2332323613\"/><object object_id=\"05cff3bd9f6f4c36a51877c13fda1909\"/><object object_id=\"2178a4d06b6b407db826733c496a596d\"/><object object_id=\"8892c660d75747deaee6bab6163fde04\"/><object object_id=\"3be29dac7e6f45908910492967e3cb08\"/><object object_id=\"53667890f4f84e38a9cd7ab9a63a6193\"/><object object_id=\"69a3a5978f1e449f9729d5d47e0690ad\"/><object object_id=\"9405cc3528c345b1ad200714bb0fec32\"/><object object_id=\"068ab6d165004f9fb6d778a9e2593fd2\"/><object object_id=\"e90b6799c3a2418fa65f6e2f91c53f64\"/><object object_id=\"b209864a514a4d4eae7038a9585e9306\"/><object object_id=\"5f2287cdfeb54eddaa42cc80b21ec081\"/><object object_id=\"a87271f9a4e74b82bc9191cdc36c2783\"/><object object_id=\"bea81cc3b3e842e997594c6e95526456\"/><object object_id=\"13c6fc2edb544a2d98a4f3f10af4fdd1\"/><object object_id=\"9edb7a886d2847fbae83eba272cd3940\"/><object object_id=\"989e0d92955c4adfa3bfe045c6f11d82\"/><object object_id=\"0ebec61db2204477b4b49a20592c818a\"/><object object_id=\"d198d63bc9ed4dfb8f84c3fc5a4146c5\"/><object object_id=\"389482afd85147b2ac397a644f72e3dc\"/><object object_id=\"0e997a62f9c4421b93a284dad938faf4\"/><object object_id=\"dc29afc0ca53472d88e8b58e460ed614\"/><object object_id=\"ded736abc1954413b17e6d283c686b04\"/><object object_id=\"5de7020a497d4e119de0e6f5b869aba3\"/><object object_id=\"d3cfdc9e51fc489cac8a8a9e6285f292\"/><object object_id=\"b812ed1698e2454dbf84595a2addff8f\"/><object object_id=\"fa28d2774a054542a6b7c437ee68f148\"/><object object_id=\"b7fab9c8285f47b699cb5bb6259b7b03\"/><object object_id=\"f8f867f7aa964785ab1e0e84428070c2\"/><object object_id=\"d1cb0bb2c21e4e99b06fcda8f627c720\"/><object object_id=\"41f6531a611143f3a64d3e55f347ed06\"/><object object_id=\"6fb3b57ec8df48e4bfe6f19bef387a61\"/><object object_id=\"97598f541b494606a437a9b5ee5433aa\"/><object object_id=\"d5289e3969cc47a7b50a01ed6f4b41fd\"/><object object_id=\"22ba8c4cf4154874ac98ec42cd053d72\"/><object object_id=\"7ec173a9d51e4babbc0feae70d754c99\"/><object object_id=\"343cd1ee95ce4a3e9d51336a2d0291e9\"/></objects></request>", "query_type": 1, "to": "tcp://bnd127", "user_id": "3302", "ts_added": 1679825320.653038}
files = [] files = []
url = 'http://127.0.0.1:7000/xmlrpc' url = 'http://127.0.0.1:7000/xmlrpc'
accept(params, files, url) # accept(params, files, url)
get_objects(params, files, url)
if __name__ == '__main__': if __name__ == '__main__':
main() # main()
# test() test()

View File

@@ -28,3 +28,17 @@ def get_catalog():
) )
result = client.execute(query) result = client.execute(query)
return result['getCatalog'] return result['getCatalog']
def get_object(oid: str):
client = Client(transport=transport, fetch_schema_from_transport=True)
query = gql(
"""
query getObjects($oid: String!) {
getObject(name: "ood", oid: $oid)
}
"""
)
params = {'oid': oid}
result = client.execute(query, variable_values=params)
return result['getObject']

View File

@@ -1,5 +1,5 @@
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from requests.messages import Messages from reqs.messages import Messages
class RequestXmlService: class RequestXmlService:

View File

@@ -1,2 +1,3 @@
gql~=3.4.0 gql~=3.4.0
pygost~=5.11 pygost~=5.11
requests~=2.28.2