From 4ef153b1b21d281d46100502d024276d6166fe2f Mon Sep 17 00:00:00 2001 From: A_D Date: Fri, 21 May 2021 09:10:26 +0200 Subject: [PATCH] Added fake EDDN Listener A simple HTTP handler has been added that will dump any and all POST data it gets to EDMC's log. Additionally, a new command line argument to switch EDMC to using this as its EDDN target has been added. --- EDMarketConnector.py | 8 ++++++++ eddnListener.py | 34 ++++++++++++++++++++++++++++++++++ edmc_data.py | 2 ++ plugins/eddn.py | 6 +++++- 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 eddnListener.py diff --git a/EDMarketConnector.py b/EDMarketConnector.py index 00ab907e..fe32c5e1 100755 --- a/EDMarketConnector.py +++ b/EDMarketConnector.py @@ -93,6 +93,8 @@ if __name__ == '__main__': # noqa: C901 action='store_true' ) + parser.add_argument('--eddn-local', help='Redirect EDDN requests to a local webserver', action='store_true') + auth_options = parser.add_mutually_exclusive_group(required=False) auth_options.add_argument('--force-localserver-for-auth', help='Force EDMC to use a localhost webserver for Frontier Auth callback', @@ -129,6 +131,12 @@ if __name__ == '__main__': # noqa: C901 parser.print_help() exit(1) + if args.eddn_local: + import eddnListener + import edmc_data + eddnListener.run_listener() + edmc_data.EDDN_DEBUG_SERVER = True + def handle_edmc_callback_or_foregrounding() -> None: # noqa: CCR001 """Handle any edmc:// auth callback, else foreground existing window.""" logger.trace('Begin...') diff --git a/eddnListener.py b/eddnListener.py new file mode 100644 index 00000000..781119a8 --- /dev/null +++ b/eddnListener.py @@ -0,0 +1,34 @@ +"""Simple HTTP listener to be used with debugging EDDN sends.""" +import threading +from http import server +from typing import Any + +from EDMCLogging import get_main_logger + +logger = get_main_logger() + + +class LoggingHandler(server.BaseHTTPRequestHandler): + """HTTP Handler implementation that logs to EDMCs logger.""" + + def log_message(self, format: str, *args: Any) -> None: + """Override default handler logger with EDMC logger.""" + logger.info(format % args) + + def do_POST(self) -> None: # noqa: N802 # I cant change it + """Handle POST.""" + logger.info("Received a POST!") + data = self.rfile.read(int(self.headers['Content-Length'])) + logger.info(f"POST DATA FOLLOWS\n{data.decode('utf-8', errors='replace')}") + self.send_response(200, "OK") + + +def run_listener(port: int = 9090) -> None: + """Run a listener thread.""" + logger.info('Starting HTTP listener on 127.0.0.1:{port}!') + listener = server.HTTPServer(("127.0.0.1", port), LoggingHandler) + threading.Thread(target=listener.serve_forever, daemon=True) + + +if __name__ == "__main__": + server.HTTPServer(("127.0.0.1", 8080), LoggingHandler).serve_forever() diff --git a/edmc_data.py b/edmc_data.py index 45f424fc..473e59cb 100644 --- a/edmc_data.py +++ b/edmc_data.py @@ -570,3 +570,5 @@ edmc_suit_symbol_localised = { 'utilitysuit': 'Traje Maverick', }, } + +EDDN_DEBUG_SERVER = False # Are we using a local server for debugging? diff --git a/plugins/eddn.py b/plugins/eddn.py index a306de82..c88f90fc 100644 --- a/plugins/eddn.py +++ b/plugins/eddn.py @@ -19,6 +19,7 @@ import requests import killswitch import myNotebook as nb # noqa: N813 import plug +import edmc_data from companion import CAPIData, category_map from config import applongname, appversion_nobuild, config from EDMCLogging import get_main_logger @@ -87,9 +88,12 @@ HORIZ_SKU = 'ELITE_HORIZONS_V_PLANETARY_LANDINGS' class EDDN: """EDDN Data export.""" - # SERVER = 'http://localhost:8081' # testing SERVER = 'https://eddn.edcd.io:4430' + if edmc_data.EDDN_DEBUG_SERVER: + SERVER = '127.0.0.1:9090' + UPLOAD = f'{SERVER}/upload/' + REPLAYPERIOD = 400 # Roughly two messages per second, accounting for send delays [ms] REPLAYFLUSH = 20 # Update log on disk roughly every 10 seconds TIMEOUT = 10 # requests timeout