From 21a6f3e3f285475d08524d2b9da6d33e8d14f3be Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Tue, 3 Dec 2024 12:14:45 -0500 Subject: [PATCH] Implement TLS listener support --- lib/nntp/tiny/server.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/nntp/tiny/server.py b/lib/nntp/tiny/server.py index 3aee70e..bb1cc38 100644 --- a/lib/nntp/tiny/server.py +++ b/lib/nntp/tiny/server.py @@ -1,5 +1,6 @@ import enum import socket +import ssl import threading from configparser import ConfigParser @@ -18,6 +19,12 @@ class Server(): self.config = config self.capabilities = ServerCapability.NONE self.newsgroups = dict() + self.sslctx = None + + if config['listen'].get('tls', 'no') == 'yes': + self.sslctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) + self.sslctx.load_cert_chain(config['tls']['cert'], + config['tls']['key']) self._init_newsgroups() @@ -38,14 +45,20 @@ class Server(): listener.bind((host, port)) listener.listen() + if self.sslctx: + listener = self.sslctx.wrap_socket(listener, server_side=True) + while True: - sock, addr = listener.accept() + try: + sock, addr = listener.accept() - def spawn(): - session = Session(self, sock) - session.handle() + def spawn(): + session = Session(self, sock) + session.handle() - thread = threading.Thread(target=spawn) - thread.start() + thread = threading.Thread(target=spawn) + thread.start() + except: + pass listener.close()