fix(log): HuggingFace-Token und andere Geheimnisse nicht mehr im Klartext im Log
Die Bridge schrieb beim Config-Broadcast den kompletten Payload ins Log, inklusive huggingfaceToken. Jetzt werden Werte von Schluesseln wie token, secret, passw, apikey, credential als *** ausgegeben (Zaehler wie maxTokens bleiben sichtbar). Dasselbe fuer das Debug-Log der RVS-Nachrichten in der Diagnostic. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+15
-1
@@ -73,6 +73,20 @@ logging.basicConfig(
|
|||||||
logger = logging.getLogger("aria-bridge")
|
logger = logging.getLogger("aria-bridge")
|
||||||
|
|
||||||
|
|
||||||
|
# Schluessel, deren Werte nie ins Log duerfen (HF-Token, Passwoerter, API-Keys).
|
||||||
|
_SECRET_KEY_RE = re.compile(r"token(?!s)|secret|passw|apikey|api_key|credential", re.I)
|
||||||
|
|
||||||
|
|
||||||
|
def _redact(obj):
|
||||||
|
"""Kopie von obj fuer Log-Zeilen: Geheimnis-Werte werden zu '***'."""
|
||||||
|
if isinstance(obj, dict):
|
||||||
|
return {k: ("***" if v and _SECRET_KEY_RE.search(str(k)) else _redact(v))
|
||||||
|
for k, v in obj.items()}
|
||||||
|
if isinstance(obj, list):
|
||||||
|
return [_redact(v) for v in obj]
|
||||||
|
return obj
|
||||||
|
|
||||||
|
|
||||||
# ── TCP-Keepalive Helper ────────────────────────────────────
|
# ── TCP-Keepalive Helper ────────────────────────────────────
|
||||||
#
|
#
|
||||||
# Aktiviert TCP-Level Keepalive auf einer websockets-Verbindung mit
|
# Aktiviert TCP-Level Keepalive auf einer websockets-Verbindung mit
|
||||||
@@ -1830,7 +1844,7 @@ class ARIABridge:
|
|||||||
"payload": payload,
|
"payload": payload,
|
||||||
"timestamp": int(asyncio.get_event_loop().time() * 1000),
|
"timestamp": int(asyncio.get_event_loop().time() * 1000),
|
||||||
})
|
})
|
||||||
logger.info("[rvs] Persistierte Config broadcastet: %s", payload)
|
logger.info("[rvs] Persistierte Config broadcastet: %s", _redact(payload))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.debug("[rvs] Config-Broadcast fehlgeschlagen: %s", e)
|
logger.debug("[rvs] Config-Broadcast fehlgeschlagen: %s", e)
|
||||||
|
|
||||||
|
|||||||
@@ -658,6 +658,13 @@ function nextReqId() {
|
|||||||
return `diag-${++reqIdCounter}`;
|
return `diag-${++reqIdCounter}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// JSON.stringify-Replacer fuer Log-Zeilen: Werte von Geheimnis-Schluesseln
|
||||||
|
// (HF-Token, Passwoerter, API-Keys) kommen nie ins Log.
|
||||||
|
const SECRET_KEY_RE = /token(?!s)|secret|passw|apikey|api_key|credential/i;
|
||||||
|
function redactSecrets(key, value) {
|
||||||
|
return key && value && SECRET_KEY_RE.test(key) && typeof value !== "object" ? "***" : value;
|
||||||
|
}
|
||||||
|
|
||||||
function log(level, source, message) {
|
function log(level, source, message) {
|
||||||
const entry = { ts: new Date().toISOString(), level, source, message };
|
const entry = { ts: new Date().toISOString(), level, source, message };
|
||||||
logs.push(entry);
|
logs.push(entry);
|
||||||
@@ -1460,7 +1467,7 @@ function connectRVS(forcePlain) {
|
|||||||
// PCM-Chunks einer laufenden Voice-Preview — sammeln + WAV bauen
|
// PCM-Chunks einer laufenden Voice-Preview — sammeln + WAV bauen
|
||||||
_handlePreviewChunk(msg.payload);
|
_handlePreviewChunk(msg.payload);
|
||||||
} else {
|
} else {
|
||||||
log("debug", "rvs", `Nachricht: ${JSON.stringify(msg).slice(0, 150)}`);
|
log("debug", "rvs", `Nachricht: ${JSON.stringify(msg, redactSecrets).slice(0, 150)}`);
|
||||||
}
|
}
|
||||||
} catch {}
|
} catch {}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user