Tobias Gesellchen
6aef2b807d
Enhance ResolvConf migration to support multiple DHCP script variants
...
This update allows the service to correctly patch both /etc/udhcpc.d/50default and /opt/Bose/udhcpc.script (used in SoundTouch 10 firmware) for DNS redirection. It also improves robustness by adding file existence checks in rc.local and ensures clean state by reverting to .original backups during migration.
2026-02-16 18:52:25 +01:00
Tobias Gesellchen
95f5e9c831
fix(setup): prevent and clean up corrupted rc.local with cat error message
2026-02-16 18:20:16 +01:00
Tobias Gesellchen
7337296ae9
refactor(setup): reduce cyclomatic complexity of RevertMigration
2026-02-16 18:04:28 +01:00
Tobias Gesellchen
92a5d3592c
feat(setup): replace obsolete resolv method with persistent DHCP-aware DNS hook
2026-02-16 18:04:28 +01:00
Tobias Gesellchen
2f04af872b
feat(setup): implement Aftertouch Hook (DHCP-aware DNS redirection); update UI and tests; docs now use aftertouch.resolv.conf
2026-02-16 18:04:28 +01:00
Tobias Gesellchen
9479d6d11d
Fix missing request body in recorded proxy interactions
2026-02-16 16:30:41 +01:00
Tobias Gesellchen
ab2bf0731a
Add DNS-based discovery and migration via /etc/resolv.conf
2026-02-16 12:18:06 +01:00
Tobias Gesellchen
93082d2cdc
Update root endpoint JSON response with AfterTouch and docs link
2026-02-15 23:47:10 +01:00
Tobias Gesellchen
b7013a5ec8
Apply 'Redact Sensitive Headers' to recordings
2026-02-15 23:12:19 +01:00
Tobias Gesellchen
7d76b3fab2
Implement dynamic Bose proxy with detailed origin logging and Soundcork fallback
2026-02-15 22:50:13 +01:00
Tobias Gesellchen
6ca206053f
Add session download feature to web UI
2026-02-15 22:20:16 +01:00
Tobias Gesellchen
090eb162fb
Fix TypeError in Web UI by renaming proxy-domain to soundcork-url
...
This commit fixes a JS error in showSummary and migrate functions where they were still trying to access the UI element by its old ID 'proxy-domain' instead of the new 'soundcork-url'.
2026-02-15 22:01:58 +01:00
Tobias Gesellchen
9a070da1ef
Fix data race in RecordMiddleware and improve recorder robustness
...
This commit addresses the data race detected in TestRecordMiddleware: - Updated Recorder.Record to clone Request and Response objects (including bodies) before background processing. - Ensures background workers can safely access data after the main request handler has finished. - Enabled synchronous recording in handler tests to ensure deterministic results and avoid race conditions.
2026-02-15 21:51:55 +01:00
Tobias Gesellchen
d4b518da23
Fix proxy and recorder tests by ensuring synchronous recording during testing
...
This commit addresses the test failures in pkg/service/proxy: - Ensures synchronous recording in tests by setting RECORDER_ASYNC=false. - Adds a Close() method to the Recorder for proper cleanup. - Fixes a panic in TestRecorder_Record_Redaction caused by race conditions.
2026-02-15 21:51:55 +01:00
Tobias Gesellchen
89bafd97b6
Optimize recording performance and add Soundcork proxy toggle
...
This commit introduces several key improvements: Performance Optimization (asynchronous recording), Legacy Proxy Control (Soundcork proxy toggle), X-Forwarded-For Sanitization, consistent Soundcork naming across the stack, and various code quality improvements.
2026-02-15 21:51:55 +01:00
Tobias Gesellchen
8af60c7e4b
fix linter issues
2026-02-15 20:20:47 +01:00
Tobias Gesellchen
8a21db3517
Capture additional redirect methods and improve recorder functionality
2026-02-15 20:20:47 +01:00
Tobias Gesellchen
742484568e
feat: implement Stockholm-related cloud API emulation - Added handlers for Stockholm app events (/v1/stapp, /v1/scmudc) - Implemented account profile, password management, and device settings endpoints - Added Go models for new API responses and requests - Created docs/reference/CLOUD-API.md and updated SUMMARY.md - Added comprehensive unit tests for all new handlers - Updated ueberboese-api.yaml with new endpoints and schemas
2026-02-15 20:20:47 +01:00
Tobias Gesellchen
ed2d8680e4
fix: align streaming_token with Bose protocol to avoid 502 errors
2026-02-15 18:58:35 +01:00
Tobias Gesellchen
6dc8c23f04
feat: detect migrated devices and prompt for reboot after migration
2026-02-15 18:58:35 +01:00
Tobias Gesellchen
fa57ee9574
Rebrand to AfterTouch and cleanup SoundCork references
2026-02-15 18:09:49 +01:00
Tobias Gesellchen
f20cfcb319
Enhance interaction session management and cleanup UI
2026-02-15 16:52:44 +01:00
Tobias Gesellchen
a453059d6d
Enhance interaction recording and analysis features
2026-02-15 16:52:44 +01:00
Tobias Gesellchen
505e6dd760
Refactor data storage to use account-based hierarchy and update Web UI
2026-02-15 15:36:01 +01:00
Tobias Gesellchen
59019cf55c
docs: deploy documentation to GitHub Pages and update links in Web UI and README
2026-02-15 00:30:28 +01:00
Tobias Gesellchen
02026a9f3a
Add configurable shortcuts and log them on startup
2026-02-15 00:27:25 +01:00
Tobias Gesellchen
358ea18138
Implement device merging logic and web-based device removal
2026-02-15 00:15:09 +01:00
Tobias Gesellchen
b7197a8679
Add version visibility and discovery controls to Web UI and API
2026-02-14 23:03:53 +01:00
Tobias Gesellchen
5269c05e56
Enhance settings management with persistence and explicit saving, including SAN updates and unit tests
2026-02-14 21:50:36 +01:00
Tobias Gesellchen
d7a15c4dbe
Minor cleanup and formatting fixes in docs handler and setup manager
2026-02-14 18:26:52 +01:00
Tobias Gesellchen
701889076d
Refactor documentation structure, add SUMMARY.md sidebar, and automated consistency checks
2026-02-14 18:26:52 +01:00
Tobias Gesellchen
3acc983183
Cleanup the web ui/flow
2026-02-14 18:26:52 +01:00
Tobias Gesellchen
7d40c61cad
Fix variable shadowing in setup methods
...
Renamed shadowed 'err' and 'out' variables in MigrateSpeaker and TrustCACert to comply with linting rules.
2026-02-14 14:24:46 +01:00
Tobias Gesellchen
93cfd9dbbc
Implement safe migration revert with backup validation
...
- Added strict guardrails for RevertMigration: now fails if .original backup is missing.
- Revert now uses copy (cp) instead of move (mv) to preserve original backups on the device.
- Decoupled reboot from migration/revert processes, making it a manual operation.
- Added standalone Reboot API and manual 'Reboot Speaker' button in the Web UI.
- Separated 'Remove Remote Services' from the revert process to allow independent management.
- Implemented command output capture and display in the Web UI for all setup actions (Migrate, Revert, Trust CA, Backup, Reboot, Remove Remote Services).
- Updated doc.go with a modern overview of the library and SoundTouch service features.
- Fixed several tests to align with new method signatures and behavior changes.
2026-02-14 14:24:46 +01:00
Tobias Gesellchen
dcf2e29c16
Fix linting issues and refactor for improved code quality
2026-02-14 12:39:39 +01:00
Tobias Gesellchen
9be1c7d588
Allow toggling HTTP interaction recording via CLI, environment, and Web UI
2026-02-14 12:39:39 +01:00
Tobias Gesellchen
133c07fefa
Improve visibility of multiple devices in recordings by adding original value comments to .http files
2026-02-14 12:39:39 +01:00
Tobias Gesellchen
ef90b4e848
Improve structure and re-usability of HTTP interaction recordings
2026-02-14 12:39:39 +01:00
Tobias Gesellchen
e47fa4c92c
Complete local Bose SoundTouch emulation service with guided migration UI
2026-02-14 00:14:29 +01:00
Tobias Gesellchen
1a39c14b35
Rename crypto package to certmanager to resolve golangci-lint naming conflict
...
- Renamed pkg/service/crypto to pkg/service/certmanager
- Updated package declaration from 'crypto' to 'certmanager'
- Fixed all import statements across the codebase
- Updated type references from *crypto.CertificateManager to *certmanager.CertificateManager
- Renamed files for consistency: crypto.go -> certmanager.go, crypto_test.go -> certmanager_test.go
- Resolves golangci-lint var-naming issue about conflicting with Go standard library package names
- All tests pass and linter reports 0 issues
2026-02-13 22:36:36 +01:00
Tobias Gesellchen
c9f648096e
Implement label-based CA certificate management and add timeout flags to curl commands
2026-02-13 22:36:36 +01:00
Tobias Gesellchen
c7e055eb51
fix: golangci-lint issues
2026-02-12 23:41:54 +01:00
Tobias Gesellchen
00d5bfcb69
feat: implement dual migration (XML and /etc/hosts) with custom CA and HTTPS support. Added automated /etc/hosts redirection, Root CA injection, built-in HTTPS listener, and enhanced management UI with diagnostic tests.
2026-02-12 23:41:54 +01:00
Tobias Gesellchen
f3162b7ed9
Add PlayNotification support for device-local PCM files and expose it via CLI
2026-02-10 08:23:33 +01:00
Tobias Gesellchen and GitHub
059498b16e
Add option to remove persistent remote_services ( #18 )
2026-02-08 00:04:20 +01:00
Tobias Gesellchen
44e48f7307
chore: apply final linter fixes and code quality improvements across the service layer
2026-02-07 22:36:50 +01:00
Tobias Gesellchen
6504c301f6
Fix golangci-lint issues: error checking, JSON encoding, variable shadowing, and code structure
...
- Fixed critical error checking (errcheck) for file operations, HTTP responses, JSON operations
- Added proper JSON encoding error handling (errchkjson) in HTTP handlers
- Fixed built-in redefinition by renaming max variable to maxETag
- Optimized range loops to avoid copying large structs (gocritic)
- Resolved variable shadowing issues in multiple functions (govet)
- Improved code structure with nesting reduction (gocritic)
- Enhanced test robustness with proper error handling
Remaining issues are primarily style/documentation related (revive comments).
2026-02-07 22:36:50 +01:00
Tobias Gesellchen
210fd587de
chore: run golangci-lint --fix and manually address remaining linting issues. Fixed bodyclose, errcheck, and contextcheck across the codebase.
2026-02-07 22:36:50 +01:00
Tobias Gesellchen
79ca666785
Merge Bose-SoundTouch-API (soundcork-go) into Bose-SoundTouch. Integrated service logic, created soundtouch-service command, embedded resources, updated docs, examples and CI/CD.
...
Commit history from `7204e619decc48df5dee91d18470934b50e389ac` to `f9b5ad3129831086b02bdf20a197ff4e2d098e2d`: https://github.com/gesellix/Bose-SoundTouch-API/compare/7204e619decc48df5dee91d18470934b50e389ac...f9b5ad3129831086b02bdf20a197ff4e2d098e2d
* f9b5ad3 - Tobias Gesellchen, 2026-02-07 : Rename module to gesellix/bose-soundtouch-api and update related files
* 5b3dbbb - Tobias Gesellchen, 2026-02-07 : docs: translate PLAN.md to English and fix preferredLanguage typo in marge.go
* 696b9c9 - Tobias Gesellchen, 2026-02-07 : feat(discovery): fetch serial number from speaker info if missing in discovery and update datastore tests
* 8ed78f0 - Tobias Gesellchen, 2026-02-07 : Consolidate proxy and main service on port 8000 and update related tests and UI
* 0e3abbb - Tobias Gesellchen, 2026-02-07 : feat(go): lowercase guessed hostnames for URL consistency
* ca1091f - Tobias Gesellchen, 2026-02-07 : feat(health): add health endpoint with VCS build information
* a432d53 - Tobias Gesellchen, 2026-02-07 : Rename mock token to soundcork-local-token and add documentation
* 3b5ee2f - Tobias Gesellchen, 2026-02-07 : Implement Phase 10: Stats API, Device Event Log, and advanced Marge functions
* bc96033 - Tobias Gesellchen, 2026-02-06 : chore
* c77864b - Tobias Gesellchen, 2026-02-06 : Document Golang header normalization behavior and ensure generic header casing preservation in proxy
* a54e7e7 - Tobias Gesellchen, 2026-02-06 : Ensure ETag header preserves casing (uppercase 'T') for case-sensitive devices
* 6265fbe - Tobias Gesellchen, 2026-02-06 : update dockerfile to be in sync with go.mod
* 5290bad - Tobias Gesellchen, 2026-02-06 : Implement proxy logging settings UI and complete Phase 8 quick wins (ETags, DataStore initialization)
* d7aa7f7 - Tobias Gesellchen, 2026-02-06 : Update PLAN.md with recent features and Phase 8 Upstream Parity tasks
* c8ae5e2 - Tobias Gesellchen, 2026-02-06 : Enhance Bose SoundTouch migration with proxying, remote services persistence, and improved diagnostics
* c53fa00 - Tobias Gesellchen, 2026-02-06 : Implement remote services persistence check and UI improvements for Bose SoundTouch migration
* ea5c348 - Tobias Gesellchen, 2026-02-02 : Ignore soundcork-go/data directory and include recent datastore fixes
* d162892 - Tobias Gesellchen, 2026-02-02 : Complete Phase 7: Automated Setup & UI refactoring. Implemented programmatic SSH/migration logic, added device discovery endpoints, created Web UI for speaker management, and refactored UI to use external HTML with Go embed.
* b528016 - Tobias Gesellchen, 2026-02-01 : Add GitHub workflow to publish Docker image to GHCR and update Dockerfile
* 2ee03da - Tobias Gesellchen, 2026-02-01 : Add GitHub Actions workflow for Go CI and update PLAN.md
* 439e2a9 - Tobias Gesellchen, 2026-02-01 : Refactor Go implementation: extract handlers and tests into dedicated files, add comprehensive unit and HTTP tests
* c0698fb - Tobias Gesellchen, 2026-02-01 : Add Docker telnet example and update IP consistency in documentation
* 028a02e - Tobias Gesellchen, 2026-02-01 : Fix older port number in README
* 264829d - Tobias Gesellchen, 2026-02-01 : Add setup-speaker.sh and update documentation to match issue #59
* 64306f9 - Tobias Gesellchen, 2026-02-01 : Implement device presets endpoint in Go
* b98a602 - Tobias Gesellchen, 2026-02-01 : Implement Phase 4: Datastore and Marge logic in Go
* b6e1bc9 - Tobias Gesellchen, 2026-02-01 : Implement Phase 3: BMX Streaming and Service Registry in Go
* f1b3dcf - Tobias Gesellchen, 2026-02-01 : Port core models and constants to Go
* 9eae655 - Tobias Gesellchen, 2026-02-01 : Implement static file serving for /media in Go
* cc73e50 - Tobias Gesellchen, 2026-02-01 : Fix Go service accessibility and improve Docker configuration
* e356bdd - Tobias Gesellchen, 2026-02-01 : Initialize Go migration: Phase 1 infrastructure, proxy-first routing, and root endpoint
2026-02-07 22:36:50 +01:00
Tobias Gesellchen
285f85efa2
feat: implement comprehensive music service account management with full golangci-lint compliance
...
This commit completes the music service account management implementation
and resolves all golangci-lint issues across the codebase.
Music Service Account Management:
• Add/remove accounts for all major streaming services (Spotify, Pandora, Amazon Music, Deezer, iHeartRadio)
• Support for network music libraries (NAS/UPnP/DLNA servers)
• Generic account management with service-specific convenience methods
• Full CLI integration with 14 account management commands
• Comprehensive test coverage with mock HTTP servers
• Complete API documentation and usage examples
New CLI Commands:
• account list - List configured accounts
• account add/remove - Generic account management
• account add-spotify/remove-spotify - Spotify Premium
• account add-pandora/remove-pandora - Pandora Music Service
• account add-amazon/remove-amazon - Amazon Music
• account add-deezer/remove-deezer - Deezer Premium
• account add-iheart/remove-iheart - iHeartRadio
• account add-nas/remove-nas - Network music libraries
New API Methods:
• SetMusicServiceAccount() / RemoveMusicServiceAccount() - Generic methods
• AddSpotifyAccount() / RemoveSpotifyAccount() - Convenience methods
• AddPandoraAccount() / RemovePandoraAccount() - Convenience methods
• AddAmazonMusicAccount() / RemoveAmazonMusicAccount() - Convenience methods
• AddDeezerAccount() / RemoveDeezerAccount() - Convenience methods
• AddIHeartRadioAccount() / RemoveIHeartRadioAccount() - Convenience methods
• AddStoredMusicAccount() / RemoveStoredMusicAccount() - Network libraries
golangci-lint Fixes (36 issues resolved):
• errcheck (3): Fixed unchecked w.Write() returns in tests
• gocritic (3): Rewrote if-else chains to switch statements
• gocyclo (6): Reduced cyclomatic complexity via helper function extraction
• govet (12): Removed unused test data and field assignments
• revive (6): Added package comments and fixed unused parameters
• staticcheck (2): Replaced deprecated strings.Title usage
• thelper (6): Added t.Helper() calls to test helper functions
• unused (1): Removed unused createTestApp() function
• whitespace/wsl_v5 (7): Fixed whitespace and formatting issues
Code Quality Improvements:
• All functions now have complexity < 15 (down from max 28)
• Consistent error handling and validation patterns
• Better separation of concerns with extracted helper functions
• Zero external dependencies added for simple fixes
• Comprehensive documentation with usage examples
• Full backward compatibility maintained
Files Added:
• pkg/models/account.go - Account management models
• pkg/models/account_test.go - Account model tests
• pkg/client/account_test.go - Account client tests
• cmd/soundtouch-cli/cmd_account.go - Account CLI commands
• examples/account-management/ - Complete usage example
• Updated docs/CLI-REFERENCE.md with account management section
The implementation provides a complete, production-ready music service
account management system with full CLI and programmatic API support.
2026-02-02 17:44:26 +01:00