Tobias Gesellchen
d18b67d80f
Remove device-local Spotify primer
2026-02-21 23:40:45 +01:00
Tobias Gesellchen
8642ecfc5c
Prepare Spotify primer
2026-02-21 23:40:45 +01:00
Tobias Gesellchen
7d140b3e2a
Fix TestMigrationAndCA by enhancing mock SSH client
...
This commit updates the mock SSH client in the handler tests to support the recently added verification steps. It now correctly handles stateful responses for /etc/hosts and properly responds to file existence and CA trust checks.
2026-02-16 20:17:25 +01:00
Tobias Gesellchen
69210638e5
Add verification steps to speaker migration process
...
This update adds explicit verification checks after applying changes via XML, Hosts, and ResolvConf migration methods. The service now verifies that configuration files are correctly updated on the device before considering the migration successful, preventing unreliable states.
2026-02-16 20:17:25 +01:00
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
ab2bf0731a
Add DNS-based discovery and migration via /etc/resolv.conf
2026-02-16 12:18:06 +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
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
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
505e6dd760
Refactor data storage to use account-based hierarchy and update Web UI
2026-02-15 15:36:01 +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
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
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 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