From e48eb48a740b4539a03fbb3ce0b5041d0f9adbe1 Mon Sep 17 00:00:00 2001 From: Jonathan Wright Date: Wed, 25 Sep 2024 09:13:23 -0500 Subject: [PATCH] Allow specifying arch which overrides $basearch Fixes #572 --- src/backend/api/handlers.py | 2 ++ src/backend/main.py | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/backend/api/handlers.py b/src/backend/api/handlers.py index 2af5ef17..fd720786 100644 --- a/src/backend/api/handlers.py +++ b/src/backend/api/handlers.py @@ -533,6 +533,8 @@ def get_mirrors_list( mirror.mirror_url + '/', f'{version}/{repo_path}', ) + if arch: + full_mirror_path = full_mirror_path.replace('$basearch', arch) mirrors_list.append(full_mirror_path) if not from_cache: cache.set(redis_key, nearest_mirrors, CACHE_EXPIRED_TIME) diff --git a/src/backend/main.py b/src/backend/main.py index f48cdc9d..cea0532a 100644 --- a/src/backend/main.py +++ b/src/backend/main.py @@ -151,18 +151,32 @@ def get_mirror_list( version: str, repository: str ): + # protocol get arg request_protocol = request.args.get('protocol') if request_protocol and request_protocol not in ["http","https"]: return "Invalid input for protocol, valid options: http, https" + # country get arg request_country = request.args.get('country') if request_country and len(request_country) != 2: return "Invalid input for country, valid options are 2 letter country codes" + # arch get arg + request_arch = request.args.get('arch') + if request_arch: + config = get_config( + logger=logger, + path_to_config=SERVICE_CONFIG_PATH, + path_to_json_schema=SERVICE_CONFIG_JSON_SCHEMA_DIR_PATH, + ) + if not request_arch in config.arches: + arches = ' '.join(config.arches) + return f"Invalid arch requested, valid options are {arches}" + ip_address = _get_request_ip() mirrors = get_mirrors_list( ip_address=ip_address, version=version, - arch=None, + arch=request_arch, repository=repository, request_protocol=request_protocol, request_country=request_country,