mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-09-07 15:07:17 +00:00
Speakers paired via non-AfterTouch tooling (e.g. the USB-stick SSH-enable method) can report a margeAccountUUID that isn't Bose's own 7-digit numeric format, such as "stick@local". Discovery persisted this value unvalidated, and the datastore's identifier check rejected it outright, so the device was silently never saved. Widens datastore.IsSafeIdentifier to accept any identifier that's safe as a path component, XML value, and telnet-command token (still excluding whitespace, control characters, and HTML/XML/shell metacharacters), and makes it the single account-ID validator, replacing setup's separate, stricter 7-digit-only IsValidAccountID. Also closes related gaps found while widening the validator: - postSetMargeAccount now XML-escapes the account ID instead of raw string interpolation. - SaveAccountInfo/HandleMargeCreateAccount now validate the account ID the same way SaveDeviceInfo already did. - handlers_export.go URL-escapes account/device IDs before building outbound diagnostic-fetch URLs. - pkg/service/health gained the sanitizeLog helper every other package already has, applied to log lines carrying speaker-reported values. - The admin web UI (script.js) renders account/device IDs via DOM APIs instead of innerHTML/inline event-handler string interpolation, closing a stored-XSS path, and a duplicate escape helper was consolidated into one. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>