diff --git a/getMetadata.data b/getMetadata.data new file mode 100644 index 0000000..bbfd9e0 --- /dev/null +++ b/getMetadata.data @@ -0,0 +1 @@ +b'{"files": [], "callback": "http://userv:8008/xmlrpc", "state": 0, "params": {"from": "tcp://kptsp_vb", "query_data": "
", "query_type": 24, "to": "tcp://bnd127", "user_id": "3302", "ts_added": 1679825511.7273829}}' diff --git a/getObjects.data b/getObjects.data new file mode 100644 index 0000000..43ab9f2 --- /dev/null +++ b/getObjects.data @@ -0,0 +1 @@ +b'{"files": [], "callback": "http://userv:8008/xmlrpc", "state": 0, "params": {"from": "tcp://kptsp_vb", "query_data": "
", "query_type": 1, "to": "tcp://bnd127", "user_id": "3302", "ts_added": 1679825320.653038}}' diff --git a/main.py b/main.py index e4b7135..c3e0e27 100644 --- a/main.py +++ b/main.py @@ -1,11 +1,15 @@ +import datetime from uuid import uuid4 from xmlrpc.server import SimpleXMLRPCServer from xmlrpc.client import ServerProxy import logging import os -import requests.graphql +import os.path +from requests.graphql import get_catalog from pygost import gost34112012256 - +import xml.etree.ElementTree as ET +from requests.request_xml_service import RequestXmlService +import zipfile PASSWORD = 'gost_2012$a742ec53198ec2a5027086fba8814a89982a57112d1a72d02260161108f39b50' @@ -29,25 +33,57 @@ def auth_response(challenge, server_id, is_server): def auth_challenge(): - logging.debug('get challenge') + # logging.debug('get challenge') return uuid4().hex def accept(params, files, url): print(params, files, url) print('Accept') + date = datetime.datetime.now() + if params['query_type'] == 4: + 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': '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 +def onSent(params, files, callback_url): + print('onSent') + + def main(): print('Use Control-C to exit') logging.basicConfig(level=logging.DEBUG) - server = SimpleXMLRPCServer(('0.0.0.0', 9000), logRequests=True) + server = SimpleXMLRPCServer(('0.0.0.0', 9000), logRequests=True, allow_none=True) server.register_function(list_contents) server.register_function(aud_add) server.register_function(auth_response) server.register_function(auth_challenge) server.register_function(accept) + server.register_function(onSent) + try: server.serve_forever() except KeyboardInterrupt: @@ -55,8 +91,10 @@ def main(): def test(): - print(requests.graphql.get_classifier()) - # print(requests.graphql.get_catalog()) + params = {'from': 'tcp://kptsp_vb', 'query_data': '
', 'query_type': 4, 'to': 'tcp://bnd127', 'user_id': '1', 'ts_added': 1679213998.282467} + files = [] + url = 'http://127.0.0.1:7000/xmlrpc' + accept(params, files, url) if __name__ == '__main__': diff --git a/requests/catalog.py b/requests/catalog.py index 9a19c1e..7adffa0 100644 --- a/requests/catalog.py +++ b/requests/catalog.py @@ -53,7 +53,7 @@ class Catalog: return ET.tostring(collections, encoding='unicode', xml_declaration=True) def date_to_string(self, date): - return '' + return str(date.timestamp()) def write_collections(self, collections, date): collection = ET.SubElement(collections, self.COLLECTION_TAG_NAME, { @@ -70,7 +70,3 @@ class Catalog: def write_chart(self, charts, chart): ch = ET.SubElement(charts, self.CHART_TAG_NAME) - - - - \ No newline at end of file diff --git a/requests/graphql.py b/requests/graphql.py index d744ee0..40edd80 100644 --- a/requests/graphql.py +++ b/requests/graphql.py @@ -27,4 +27,4 @@ def get_catalog(): """ ) result = client.execute(query) - return result['getClassifier'] + return result['getCatalog'] diff --git a/requests/request_xml_service.py b/requests/request_xml_service.py index 9703141..f09948f 100644 --- a/requests/request_xml_service.py +++ b/requests/request_xml_service.py @@ -1,5 +1,5 @@ import xml.etree.ElementTree as ET -from messages import Messages +from requests.messages import Messages class RequestXmlService: @@ -11,7 +11,7 @@ class RequestXmlService: SOURCE_REQUEST_ID_ATTRIBUTE_NAME: str = 'source_parcel_id' RESULT_CODE_ATTRIBUTE_NAME: str = 'result_code' RESULT_MESSAGE_ATTRIBUTE_NAME: str = 'result_message' - HEADER_XPATH: str = '/' + REQUEST_NODE_NAME + '/' + HEADER_NODE_NAME + HEADER_XPATH: str = HEADER_NODE_NAME def get_request_uuid(self, document: ET.Element) -> str: return self.get_header_attribute(document, self.REQUEST_ID_ATTRIBUTE_NAME) @@ -27,7 +27,7 @@ class RequestXmlService: def get_header_attribute(self, document: ET.Element, attribute_name: str) -> str: header = self.get_header_node(document) - if not header: + if header is None: raise Exception(Messages.MISSING_TAG.value) result = header.get(attribute_name) return result.strip() if result else '' @@ -51,6 +51,8 @@ class RequestXmlService: def set_result(self, document: ET.Element, result_code: int, result_message: str): result = document.find(self.RESULT_NODE_NAME) + if result is None: + result = ET.SubElement(document, self.RESULT_NODE_NAME) result.set(self.RESULT_CODE_ATTRIBUTE_NAME, str(result_code)) result.set(self.RESULT_MESSAGE_ATTRIBUTE_NAME, result_message) diff --git a/tmp.data b/tmp.data new file mode 100644 index 0000000..4ac7715 --- /dev/null +++ b/tmp.data @@ -0,0 +1 @@ +{'from': 'tcp://kptsp_vb', 'query_data': '
', 'query_type': 4, 'to': 'tcp://bnd127', 'user_id': '1', 'ts_added': 1679213998.282467} [] http://127.0.0.1:7000/xmlrpc \ No newline at end of file