import datetime from uuid import uuid4 from xmlrpc.server import SimpleXMLRPCServer from xmlrpc.client import ServerProxy import logging import os 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' # Expose a function def list_contents(dir_name): logging.debug('list_contents(%s)', dir_name) return os.listdir(dir_name) def aud_add(message): logging.debug(message) return 'OK' def auth_response(challenge, server_id, is_server): # logging.debug(f'Challenge: {challenge}, Server: {server_id}, IsServer: {is_server}') msg = '%s%s%s' % (challenge, server_id, PASSWORD) response = gost34112012256.new(msg.encode('utf-8')[::-1]).digest()[::-1].hex() return {'error': False, 'response': response} def auth_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, 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: print('Exiting') def test(): 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__': main() # test()