Repository navigation
chore: point the app at thorsp.net instead of the DDNS hostname - #29
Merged
Merged
Conversation
Telemetry, feedback and the overrides manifest now call thorsp.net. Same nginx, same certificate (it covers thorsp.ddns.net, thorsp.net and www.thorsp.net), same WAN address - just a real domain rather than a DDNS hostname. ⚠ thorsp.ddns.net cannot be retired. Every build already in the field has that hostname compiled in and will keep calling it forever, so it has to keep resolving and serving. This only changes where *new* releases point. Verified against the live server through the real client code: the overrides manifest fetch returns both overrides with their quality variants, the feedback GET returns 200, and a telemetry ping returns 200. Also documents in CLAUDE.md which paths are public and which are restricted: the admin surface (/login, /feedback-dashboard, /feedback-detail/, /user/, /feedback/image/) is now LAN + WireGuard only, while the client API paths stay deliberately public. The feedback dashboard had never had the restriction the other two dashboards did, so its login form and every user's feedback were reachable from the internet - and a logged-in session can post replies that reach users as if from the operator. Confirmed from an off-network machine before and after: 302 then 403, with /overrides, /feedback/<install_id> and /override-file/ still 200. 289 tests, full dry-run set.
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No bump tag — should not cut a release.
Telemetry, feedback and the overrides manifest now call
thorsp.net. Same nginx, same certificate (SAN coversthorsp.ddns.net,thorsp.net,www.thorsp.net), same WAN address — just a real domain instead of a DDNS hostname.Every build already in the field has that hostname compiled in and will keep calling it forever. This only changes where new releases point. Both names must keep resolving and serving indefinitely.
Verified against the live server, through the real client code
fetch_overrides()GET /feedback/<install_id>POST /pingAlso: an exposure fix (nginx, not in this diff)
While checking this I found the feedback dashboard had never received the
allow 192.168.0.0/24 … deny allblock that/dashboardand/overrides-dashboardhave. Its login form and every user's feedback were reachable from the internet — and a logged-in session can post replies that reach users as if from you.Measured from an off-network machine (my first attempt from the Pi hairpinned through the router and gave a false all-clear):
/ytw-telemetry/feedback-dashboard/ytw-telemetry/login/ytw-telemetry/feedback-detail/14/ytw-telemetry/user/…/ytw-telemetry/feedback/image/…/ytw-telemetry/overrides/ytw-telemetry/feedback/<install_id>/ytw-telemetry/override-file/…The
/feedback/prefix is shared between the admin image route and the app's own API, so only/feedback/image/is restricted — nginx picks the longest matching prefix, leavingPOST /feedback,GET /feedback/<install_id>andPOST /feedback/<id>/replypublic. Confirmed by posting a real user reply from off-network: 200, and the bridge mirrored it into the Discord thread.CLAUDE.md now records which paths are public and which are restricted.
🤖 Generated with Claude Code