fix: Audit-Befunde in Protokoll-Parsing, Error-Handling und Eingabe-Validierung
BragiResponse-Felder korrekt zugeordnet (endpoint=raw[1], command=raw[2], status=raw[3]) gemäß Protokoll-Doku. PropertyNotSupported durch DeviceError ersetzt, parse_response_validated in device.rs aktiviert, flush() mit Iterationslimit gegen Endlosschleifen, Sidetone-Range per clap validiert statt clamp, JSON-Escaping im hidpp-battery-waybar.sh, udev auf uaccess umgestellt. 52 Tests grün.
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
# ABOUTME: Waybar-Modul für Logitech HID++ Geräte-Batterien.
|
||||
# ABOUTME: Findet den richtigen hidpp_battery_* Eintrag dynamisch per MODEL_NAME.
|
||||
|
||||
MODEL="G515 LS TKL"
|
||||
ICON=""
|
||||
|
||||
# hidpp_battery_* mit passendem MODEL_NAME finden
|
||||
for dev in /sys/class/power_supply/hidpp_battery_*; do
|
||||
[[ -d "$dev" ]] || continue
|
||||
name=$(cat "$dev/model_name" 2>/dev/null)
|
||||
if [[ "$name" == "$MODEL" ]]; then
|
||||
capacity=$(cat "$dev/capacity" 2>/dev/null || echo 0)
|
||||
status=$(cat "$dev/status" 2>/dev/null || echo "Unknown")
|
||||
|
||||
# Eingabe-Validierung gegen JSON-Injection
|
||||
[[ "$capacity" =~ ^[0-9]+$ ]] || capacity=0
|
||||
[[ "$status" =~ ^[A-Za-z\ ]+$ ]] || status="Unknown"
|
||||
|
||||
class="normal"
|
||||
if [[ "$status" == "Charging" ]]; then
|
||||
class="charging"
|
||||
elif (( capacity <= 15 )); then
|
||||
class="critical"
|
||||
elif (( capacity <= 30 )); then
|
||||
class="warning"
|
||||
fi
|
||||
|
||||
echo "{\"text\":\"${capacity}% ${ICON}\",\"tooltip\":\"${MODEL}: ${capacity}% — ${status}\",\"class\":\"${class}\",\"percentage\":${capacity}}"
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
|
||||
# Gerät nicht gefunden — nichts ausgeben, Waybar versteckt das Modul
|
||||
exit 0
|
||||
Reference in New Issue
Block a user