From ce2da9b7ed8b3f713b940c3a717dd6d0c33ef991 Mon Sep 17 00:00:00 2001 From: YuanTingHsieh Date: Tue, 28 Oct 2025 12:09:00 -0700 Subject: [PATCH 1/3] Add allow self signed to edge simulator --- nvflare/edge/simulation/config.py | 4 ++++ nvflare/edge/simulation/feg_api.py | 7 +++++-- nvflare/edge/simulation/run_device_simulator.py | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/nvflare/edge/simulation/config.py b/nvflare/edge/simulation/config.py index 12d5eead0d..4e9cc85a7f 100644 --- a/nvflare/edge/simulation/config.py +++ b/nvflare/edge/simulation/config.py @@ -41,6 +41,7 @@ def load_class(class_path) -> Type: class ConfigParser: def __init__(self, config_file: str): self.job_name = None + self.allow_self_signed = False self.get_job_timeout = None self.processor = None self.endpoint = None @@ -116,6 +117,9 @@ def parse(self, config_file: str): check_positive_number("get_job_timeout", n) self.get_job_timeout = n + n = config.get("allow_self_signed", False) + self.allow_self_signed = n + def _variable_substitution(self, args: Any, variables: dict) -> Any: if isinstance(args, dict): return {k: self._variable_substitution(v, variables) for k, v in args.items()} diff --git a/nvflare/edge/simulation/feg_api.py b/nvflare/edge/simulation/feg_api.py index 2ffd7a31bc..0dfb8201fc 100644 --- a/nvflare/edge/simulation/feg_api.py +++ b/nvflare/edge/simulation/feg_api.py @@ -31,7 +31,7 @@ class FegApi: - def __init__(self, endpoint: str, device_info: DeviceInfo, user_info: UserInfo): + def __init__(self, endpoint: str, device_info: DeviceInfo, user_info: UserInfo, allow_self_signed: bool = False): self.endpoint = endpoint self.device_info = device_info self.user_info = user_info @@ -46,6 +46,7 @@ def __init__(self, endpoint: str, device_info: DeviceInfo, user_info: UserInfo): HttpHeaderKey.DEVICE_INFO: device_qs, HttpHeaderKey.USER_INFO: user_qs, } + self.allow_self_signed = allow_self_signed def get_job(self, request: JobRequest) -> JobResponse: return self._do_post( @@ -91,7 +92,9 @@ def get_selection(self, request: SelectionRequest) -> SelectionResponse: ) def _do_post(self, clazz, url, params, body): - response = requests.post(url, params=params, json=body, headers=self.common_headers) + response = requests.post( + url, params=params, json=body, headers=self.common_headers, verify=False if self.allow_self_signed else True + ) code = response.status_code if code == 200: return clazz(**response.json()) diff --git a/nvflare/edge/simulation/run_device_simulator.py b/nvflare/edge/simulation/run_device_simulator.py index a1b517725f..ae904a0c36 100644 --- a/nvflare/edge/simulation/run_device_simulator.py +++ b/nvflare/edge/simulation/run_device_simulator.py @@ -63,6 +63,7 @@ def _send_request_to_proxy(request, device: SimulatedDevice, parser: ConfigParse endpoint=parser.get_endpoint(), device_info=device.get_device_info(), user_info=device.get_user_info(), + allow_self_signed=parser.allow_self_signed, ) if isinstance(request, TaskRequest): return api.get_task(request) From 9dc364e305229767b5b390bf743812700fcf1339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yuan-Ting=20Hsieh=20=28=E8=AC=9D=E6=B2=85=E5=BB=B7=29?= Date: Thu, 6 Nov 2025 12:59:14 -0800 Subject: [PATCH 2/3] Update nvflare/edge/simulation/config.py Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- nvflare/edge/simulation/config.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nvflare/edge/simulation/config.py b/nvflare/edge/simulation/config.py index 4e9cc85a7f..88c0604d78 100644 --- a/nvflare/edge/simulation/config.py +++ b/nvflare/edge/simulation/config.py @@ -118,6 +118,8 @@ def parse(self, config_file: str): self.get_job_timeout = n n = config.get("allow_self_signed", False) + if not isinstance(n, bool): + raise TypeError(f"allow_self_signed must be a bool, but got {type(n)}") self.allow_self_signed = n def _variable_substitution(self, args: Any, variables: dict) -> Any: From 7071ef281dbfe5cabbf36a206585e729ca07c43d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yuan-Ting=20Hsieh=20=28=E8=AC=9D=E6=B2=85=E5=BB=B7=29?= Date: Thu, 6 Nov 2025 12:59:23 -0800 Subject: [PATCH 3/3] Update nvflare/edge/simulation/feg_api.py Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- nvflare/edge/simulation/feg_api.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nvflare/edge/simulation/feg_api.py b/nvflare/edge/simulation/feg_api.py index 0dfb8201fc..a9dcfe89aa 100644 --- a/nvflare/edge/simulation/feg_api.py +++ b/nvflare/edge/simulation/feg_api.py @@ -92,8 +92,11 @@ def get_selection(self, request: SelectionRequest) -> SelectionResponse: ) def _do_post(self, clazz, url, params, body): + import urllib3 + if self.allow_self_signed: + urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) response = requests.post( - url, params=params, json=body, headers=self.common_headers, verify=False if self.allow_self_signed else True + url, params=params, json=body, headers=self.common_headers, verify=not self.allow_self_signed ) code = response.status_code if code == 200: