From 6bfab737a785af3f17de781726a9a61c528bef31 Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Sat, 29 Nov 2025 20:23:16 -0500 Subject: [PATCH] fix(daemon): add missing reflector server parsing method - Introduces `_parse_reflector_server` utility function for parsing reflector server strings - Implements validation for host:port format and port range (1-65535) - Adds support for default server selection from configuration - Includes proper error handling for invalid formats and values --- lbry/extras/daemon/daemon.py | 39 ++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/lbry/extras/daemon/daemon.py b/lbry/extras/daemon/daemon.py index 49959bf5cf..08bd61ba25 100644 --- a/lbry/extras/daemon/daemon.py +++ b/lbry/extras/daemon/daemon.py @@ -5095,6 +5095,45 @@ async def jsonrpc_blob_list(self, uri=None, stream_hash=None, sd_hash=None, need blobs = [blob_hash for blob_hash in blobs if self.blob_manager.is_blob_verified(blob_hash)] return paginate_list(blobs, page, page_size) + def _parse_reflector_server(self, reflector_server: typing.Optional[str]) -> typing.Tuple[str, int]: + """ + Parse reflector server string and return (server, port) tuple. + + Args: + reflector_server: String in format "host:port" or None to use default + + Returns: + Tuple of (server, port) + + Raises: + ValueError: If the format is invalid + """ + if reflector_server is None: + # Use default reflector server from config + server, port = random.choice(self.conf.reflector_servers) + return server, port + + if ':' not in reflector_server: + raise ValueError(f"Invalid reflector server format: {reflector_server}. Expected format: host:port") + + parts = reflector_server.rsplit(':', 1) + if len(parts) != 2: + raise ValueError(f"Invalid reflector server format: {reflector_server}. Expected format: host:port") + + server, port_str = parts + try: + port = int(port_str) + except ValueError: + raise ValueError(f"Invalid port number in reflector server: {reflector_server}") + + if not server: + raise ValueError(f"Empty server in reflector server: {reflector_server}") + + if port <= 0 or port > 65535: + raise ValueError(f"Port out of range in reflector server: {reflector_server}") + + return server, port + @requires(BLOB_COMPONENT) async def jsonrpc_blob_reflect(self, blob_hashes, reflector_server=None): """