Tobias Gesellchen
b71a3830ec
Add more routes to be handled by ourselves
...
Group management is only implemented as placeholder
2026-02-22 20:48:42 +01:00
Tobias Gesellchen
0f802e65c6
Fallback to the system's dns resolver by default
2026-02-22 13:36:58 +01:00
Tobias Gesellchen
d68599896d
Add Spotify primer
2026-02-21 23:40:45 +01:00
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
c37e94b5f8
Remove unused BaseURL
2026-02-21 11:22:46 +01:00
Tobias Gesellchen
4e33f6948f
Add DNS discovery download
2026-02-21 11:22:46 +01:00
Tobias Gesellchen
ec8bbb2f86
Lint: cleanup
2026-02-21 00:42:07 +01:00
Tim Van Wassenhove and Tobias Gesellchen
dc81b0aa81
feat: separate browser callback and mobile app confirm endpoints
...
- Add GET /mgmt/spotify/callback (no auth) for browser OAuth redirect
- Restore POST /mgmt/spotify/confirm (Basic Auth) for ueberboese mobile app
- Callback returns HTML success/error pages; confirm returns JSON
- Both call the same ExchangeCodeAndStore() logic
2026-02-21 00:21:52 +01:00
Tim Van Wassenhove and Tobias Gesellchen
c648027735
fix: OAuth callback as GET outside auth group, remove dead zeroconf flag, update .env.example
...
- Change /mgmt/spotify/confirm from POST to GET (Spotify redirects via GET)
- Move confirm endpoint outside Basic Auth group (code is single-use, needs client_secret)
- Remove --zeroconf-primer-enabled flag (no ZeroConf primer code on this branch)
- Add Spotify/mgmt env var documentation to .env.example
2026-02-21 00:21:52 +01:00
Tim Van Wassenhove and Tobias Gesellchen
fced88a8a6
feat: add management API endpoints matching ueberboese-app
2026-02-21 00:21:52 +01:00
Tim Van Wassenhove and Tobias Gesellchen
0ee673c097
feat: wire Spotify service into server
2026-02-21 00:21:52 +01:00
Tim Van Wassenhove and Tobias Gesellchen
a87783d8c6
feat: add Spotify, management, and ZeroConf CLI flags
2026-02-21 00:21:52 +01:00
Tobias Gesellchen
be017440b7
Add userInactivity event
2026-02-20 09:18:53 +01:00
Tobias Gesellchen
10de011c18
Simplify the PlayTTS method cmd
2026-02-19 08:46:55 +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
087006c483
Add regression test for settings persistence
2026-02-15 23:28:45 +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
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
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
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
5e612e57ec
Fix golangci-lint issues in main.go
2026-02-15 00:27:25 +01:00
Tobias Gesellchen
02026a9f3a
Add configurable shortcuts and log them on startup
2026-02-15 00:27:25 +01:00
Tobias Gesellchen
aaf067088a
Auto-create missing configuration files with default values
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
3acc983183
Cleanup the web ui/flow
2026-02-14 18:26:52 +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
a19d34b55e
Align soundtouch-service CLI with soundtouch-cli
2026-02-14 12:55:14 +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
b5df6ab91f
Include SERVER_URL and HTTPS_SERVER_URL hostnames in TLS certificate SANs
2026-02-13 00:11:27 +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
5eee3ec31e
fix linting issue
2026-02-12 21:05:02 +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
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
5b9ab48897
Fix test failures and broken documentation links
...
- Fix content type display tests to expect lowercase 'track' instead of 'Track'
- Content types should display raw API values for technical accuracy
- Fix icon test to expect correct emoji for unknown content types
- Update documentation links in README files:
- Point source selection links to docs/SOURCE-SELECTION.md
- Point navigation links to docs/NAVIGATION-GUIDE.md
- Point zone management links to docs/zone-management.md
- Update service management link to SERVICE-AVAILABILITY-IMPLEMENTATION.md
All tests now pass and documentation links are verified to exist.
2026-02-02 17:55:27 +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