Skip to content

Commit 55106c5

Browse files
authored
Merge pull request #15 from microsoft/sec/remove-authkey-from-logs
security: remove auth_key from logs/backlog; inject only at send time
2 parents b3e7c30 + 0994278 commit 55106c5

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

sparrow/rest_client.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,11 @@ def read_solar_generation():
185185
def append_metric_to_backlog(metric):
186186
"""Append a metrics record to the backlog file as a JSON line."""
187187
try:
188-
backlog_dir = os.path.dirname(metrics_backlog_file)
189-
os.makedirs(backlog_dir, exist_ok=True)
188+
os.makedirs(os.path.dirname(metrics_backlog_file), exist_ok=True)
189+
safe = dict(metric)
190+
safe.pop("auth_key", None)
190191
with open(metrics_backlog_file, "a") as f:
191-
f.write(json.dumps(metric) + "\n")
192+
f.write(json.dumps(safe) + "\n")
192193
logger.info("Appended current metric to backlog.")
193194
except Exception as e:
194195
logger.error(f"Failed to append metric to backlog: {e}")
@@ -223,7 +224,8 @@ def send_backlog_metrics():
223224

224225
for record in records:
225226
try:
226-
response = requests.post(system_metrics_url, json=record, timeout=10)
227+
payload = {**record, "auth_key": auth_key}
228+
response = requests.post(system_metrics_url, json=payload, timeout=10)
227229
response.raise_for_status()
228230
sent_count += 1
229231
except requests.exceptions.RequestException:
@@ -266,7 +268,8 @@ def upload_image_and_data(image_path, detection_data_list):
266268
"confidence": float(detection_data["Confidence Score"]),
267269
"date": detection_data["Date"],
268270
}
269-
logger.info(f"Sending image data to server: {data}")
271+
logger.info("Sending image data to server: %s",
272+
{k: v for k, v in data.items() if k != "auth_key"})
270273
response = requests.post(image_server_url, files=files, data=data)
271274
response.raise_for_status()
272275
except requests.exceptions.RequestException as e:
@@ -454,7 +457,8 @@ def gather_system_metrics():
454457
"network_received": psutil.net_io_counters().bytes_recv,
455458
"uptime_seconds": int(time.time() - psutil.boot_time()),
456459
}
457-
460+
461+
# Sensor reads must never explode the whole job
458462
try:
459463
env = read_env(bus, SENSOR_STATE)
460464
metrics["temperature_celsius"] = env.get("t_c")
@@ -484,7 +488,8 @@ def gather_system_metrics():
484488
metrics["vedirect_battery_voltage"] = round(ved_v, 2) if ved_v is not None else None
485489
metrics["vedirect_load_power_watts"] = round(ved_load_p, 2) if ved_load_p is not None else None
486490

487-
logger.info(f"System metrics gathered: {metrics}")
491+
logger.info("System metrics gathered: %s",
492+
{k: v for k, v in metrics.items() if k != "auth_key"})
488493
return metrics
489494

490495
def send_system_metrics():
@@ -503,8 +508,9 @@ def send_system_metrics():
503508
logger.info(f"Successfully sent system metrics: {response.status_code}")
504509
except requests.exceptions.RequestException as e:
505510
logger.error(f"Failed to POST system metrics: {e}")
506-
append_metric_to_backlog(metrics)
511+
append_metric_to_backlog(metrics) # still have 'metrics' here
507512
except Exception as e:
513+
# If we failed before 'metrics' existed, at least log it clearly
508514
logger.critical(f"send_system_metrics() unexpected error before POST: {e}", exc_info=True)
509515

510516

@@ -627,4 +633,4 @@ def schedule_uploads():
627633
logger.warning(f"BME688 not detected or unreadable at 0x{bme_addr:02X}; temperature/humidity/pressure will be None.")
628634

629635
# Kick off the scheduler loop
630-
schedule_uploads()
636+
schedule_uploads()

0 commit comments

Comments
 (0)