Skip to content

chore: point the app at thorsp.net instead of the DDNS hostname - #29

Merged
ThorSPB merged 1 commit into
mainfrom
chore/client-uses-thorsp-net
Aug 22, 2026
Merged

ThorSPB merged 1 commit into
mainfrom
chore/client-uses-thorsp-net

Conversation

@ThorSPB

@ThorSPB ThorSPB commented Aug 22, 2026

Copy link
Copy Markdown
Owner

No bump tag — should not cut a release.

Telemetry, feedback and the overrides manifest now call thorsp.net. Same nginx, same certificate (SAN covers thorsp.ddns.net, thorsp.net, www.thorsp.net), same WAN address — just a real domain instead of a DDNS hostname.

⚠️ thorsp.ddns.net can never be retired

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

call result
fetch_overrides() 2 overrides, both with 1080p + 720p variants
GET /feedback/<install_id> 200
POST /ping 200

Also: 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 all block that /dashboard and /overrides-dashboard have. 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):

path before after
/ytw-telemetry/feedback-dashboard 302 403
/ytw-telemetry/login 200 403
/ytw-telemetry/feedback-detail/14 302 403
/ytw-telemetry/user/… — 403
/ytw-telemetry/feedback/image/… — 403
/ytw-telemetry/overrides 200 200
/ytw-telemetry/feedback/<install_id> 200 200
/ytw-telemetry/override-file/… 200 200

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, leaving POST /feedback, GET /feedback/<install_id> and POST /feedback/<id>/reply public. 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

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.
@ThorSPB
ThorSPB merged commit 0387a47 into main Aug 22, 2026
5 checks passed
@ThorSPB
ThorSPB deleted the chore/client-uses-thorsp-net branch August 22, 2026 10:28
@ThorSPB ThorSPB mentioned this pull request Aug 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant