Skip to content

Commit c2e74ca

Browse files
committed
fix: adding comprehensive check of return codes for update checks
1 parent dbbc132 commit c2e74ca

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

packages/ns-api/files/ns.update

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ import os
1111
import sys
1212
import json
1313
import time
14-
import urllib
1514
import subprocess
16-
import urllib.request
15+
import requests
1716
from nethsec import utils
1817
from urllib.parse import urlparse
1918
from euci import EUci
@@ -89,19 +88,30 @@ def install_package_updates():
8988
def check_system_update():
9089
e_uci = EUci()
9190
current_version = get_system_version()
92-
ret = {"currentVersion": f'NethSecurity {current_version}', "lastVersion": "", "scheduledAt": get_update_schedule()}
91+
data = {"currentVersion": f'NethSecurity {current_version}', "lastVersion": "", "scheduledAt": get_update_schedule()}
92+
url = e_uci.get('ns-plug', 'config', 'repository_url')
93+
if e_uci.get('ns-plug', 'config', 'system_id', default=None) is None:
94+
url = f"{url}/{get_distfeed_channel()}"
9395
try:
94-
url = e_uci.get('ns-plug', 'config', 'repository_url')
95-
if (e_uci.get('ns-plug', 'config', 'system_id', default=None) is None):
96-
url = f"{url}/{get_distfeed_channel()}"
97-
98-
p = subprocess.run(["/usr/bin/curl", "-L", "-s", f"{url}/latest_release"], check=True, capture_output=True, text=True)
99-
version = p.stdout.rstrip()
96+
response = requests.get(f"{url}/latest_release", headers={"Accept": "application/json"}, timeout=5)
97+
response.raise_for_status()
98+
version = response.text.strip()
10099
if current_version != version:
101-
ret["lastVersion"] = f'NethSecurity {version}'
102-
except Exception as e:
103-
print(e, file=sys.stderr)
104-
return ret
100+
data["lastVersion"] = f'NethSecurity {version}'
101+
except requests.exceptions.ConnectionError:
102+
return utils.generic_error("connection_error")
103+
except requests.exceptions.RequestException as e:
104+
match e.response.status_code:
105+
case requests.codes.service_unavailable:
106+
return utils.generic_error("maintenance")
107+
case requests.codes.unauthorized:
108+
return utils.generic_error("unauthorized")
109+
case _:
110+
return utils.generic_error("server_error")
111+
except Exception:
112+
return utils.generic_error("generic_error")
113+
114+
return data
105115

106116
def schedule_system_update(timestamp):
107117
if timestamp < 0:

0 commit comments

Comments
 (0)