diff --git a/tools/server/public_simplechat/docs/changelog.md b/tools/server/public_simplechat/docs/changelog.md index 7a1b7200d5..e67233bca8 100644 --- a/tools/server/public_simplechat/docs/changelog.md +++ b/tools/server/public_simplechat/docs/changelog.md @@ -316,6 +316,7 @@ Chat Session specific settings * add ssl ie https support and restrict it to latest supported ssl/tls version * enable multi threaded ssl and client request handling, so that rogue clients cant mount simple DoS by opening connection and then missing in action. + * switch to a Dicty DataClass based Config with better type validation and usage, instead of literal dict++ ## ToDo diff --git a/tools/server/public_simplechat/local.tools/config.py b/tools/server/public_simplechat/local.tools/config.py index 0db0ed3611..4e9e330bb6 100644 --- a/tools/server/public_simplechat/local.tools/config.py +++ b/tools/server/public_simplechat/local.tools/config.py @@ -61,6 +61,9 @@ class Network(DictyDataclassMixin): port: int = 3128 addr: str = '' + def server_address(self): + return (self.addr, self.port) + @dataclass class Op(DictyDataclassMixin): diff --git a/tools/server/public_simplechat/local.tools/simpleproxy.py b/tools/server/public_simplechat/local.tools/simpleproxy.py index cdaf6e4d38..75fe8e4113 100644 --- a/tools/server/public_simplechat/local.tools/simpleproxy.py +++ b/tools/server/public_simplechat/local.tools/simpleproxy.py @@ -95,7 +95,7 @@ class ProxyHandler(http.server.BaseHTTPRequestHandler): return { 'AllOk': False, 'Msg': "Invalid auth line" } if authlineA[0] != 'Bearer': return { 'AllOk': False, 'Msg': "Invalid auth type" } - if authlineA[1] != gMe['--bearer.transformed']: + if authlineA[1] != gMe.op.bearerTransformed: return { 'AllOk': False, 'Msg': "Invalid auth" } return { 'AllOk': True, 'Msg': "Auth Ok" } @@ -159,8 +159,8 @@ class ProxyHandler(http.server.BaseHTTPRequestHandler): """ print(f"\n\n\nDBUG:ProxyHandler:Handle:RequestFrom:{self.client_address}") try: - if (gMe['sslContext']): - self.request = gMe['sslContext'].wrap_socket(self.request, server_side=True) + if (gMe.op.sslContext): + self.request = gMe.op.sslContext.wrap_socket(self.request, server_side=True) self.rfile = self.request.makefile('rb', self.rbufsize) self.wfile = self.request.makefile('wb', self.wbufsize) except: @@ -203,17 +203,16 @@ def setup_server(): Helps setup a http/https server """ try: - gMe['serverAddr'] = ('', gMe['--port']) - gMe['server'] = http.server.ThreadingHTTPServer(gMe['serverAddr'], ProxyHandler) - if gMe.get('--sec.keyfile') and gMe.get('--sec.certfile'): + gMe.op.server = http.server.ThreadingHTTPServer(gMe.nw.server_address(), ProxyHandler) + if gMe.sec.get('keyFile') and gMe.sec.get('certFile'): sslCtxt = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) - sslCtxt.load_cert_chain(certfile=gMe['--sec.certfile'], keyfile=gMe['--sec.keyfile']) + sslCtxt.load_cert_chain(certfile=gMe.sec.certFile, keyfile=gMe.sec.keyFile) sslCtxt.minimum_version = ssl.TLSVersion.MAXIMUM_SUPPORTED sslCtxt.maximum_version = ssl.TLSVersion.MAXIMUM_SUPPORTED - gMe['sslContext'] = sslCtxt - print(f"INFO:SetupServer:Starting on {gMe['serverAddr']}:Https mode") + gMe.op.sslContext = sslCtxt + print(f"INFO:SetupServer:Starting on {gMe.nw.server_address()}:Https mode") else: - print(f"INFO:SetupServer:Starting on {gMe['serverAddr']}:Http mode") + print(f"INFO:SetupServer:Starting on {gMe.nw.server_address()}:Http mode") except Exception as exc: print(f"ERRR:SetupServer:{traceback.format_exc()}") raise RuntimeError(f"SetupServer:{exc}") from exc @@ -222,16 +221,18 @@ def setup_server(): def run(): try: setup_server() - gMe['server'].serve_forever() + if not gMe.op.server: + raise RuntimeError("Server missing!!!") + gMe.op.server.serve_forever() except KeyboardInterrupt: print("INFO:Run:Shuting down...") - if (gMe['server']): - gMe['server'].server_close() + if gMe.op.server: + gMe.op.server.server_close() sys.exit(0) except Exception as exc: print(f"ERRR:Run:Exiting:Exception:{exc}") - if (gMe['server']): - gMe['server'].server_close() + if gMe.op.server: + gMe.op.server.server_close() sys.exit(1)