mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 02:14:01 +00:00
Pin camera sources by parsed URL
Camera catalog image URLs were pinned by string prefix, so a URL that only began with the agency's directory before dot segments or an encoded separator were resolved still counted as inside it. The pin now parses the URL and requires the same scheme, the exact host, no credentials, the default port and a normalized path inside the pinned directory. Redirects on a pinned host must stay inside the same directory. Document the response format checks and API response headers alongside the existing server hardening notes.
This commit is contained in:
1 parent
0ad75095a7
commit
3e80afe713
8 files changed
+241
-31
No files matched your search
@@ -30,6 +30,15 @@ time. This clears obsolete contacts and settles startup without manufacturing
|
||||
position timestamps. Stale, incomplete and malformed empty results retain the
|
||||
existing recovery behavior.
|
||||
|
||||
Every `/api` response on the dev and preview servers carries
|
||||
`Content-Security-Policy: default-src 'none'; sandbox` and
|
||||
`X-Content-Type-Options: nosniff`. `apiResponseHeadersPlugin` sets them ahead of
|
||||
the Host check, so errors, partial responses, Host refusals and unknown routes
|
||||
are covered too; a route's own policy is sent as an additional policy, never in
|
||||
place of it. The app document's policy is unchanged. The GBFS proxy relays only
|
||||
bodies that parse as JSON, re-serialized as `application/json; charset=utf-8`;
|
||||
anything else answers 502.
|
||||
|
||||
Catalog source contracts and their consuming layers are declared in
|
||||
`src/app/sourceComposition.js`. Omitted or null acquisition sources preserve layer
|
||||
registration and serialization, report unavailable, and are refused by the existing
|
||||
@@ -812,6 +821,13 @@ standalone entry supplies application-owned scene, ground and activation service
|
||||
Each layer owns its state and visibility listener; destruction cancels source
|
||||
reads and pending initialization. Malformed health responses retain prior health.
|
||||
Existing catalog fallback, camera poses, frame pacing and coverage controls remain.
|
||||
CCTV frames and the Street View fallback accept only JPEG, PNG, GIF, WebP and
|
||||
AVIF, sent under the canonical type; any other type falls through to the next
|
||||
fallback. Live media must match its feed kind (`video/mp4`, `video/webm`, or
|
||||
`multipart/x-mixed-replace` with a boundary) before health reports it connected,
|
||||
and follows redirects only on the camera's origin. Catalog image URLs, and
|
||||
redirects on those hosts, are pinned by parsed URL to the agency's image
|
||||
directory. Every `/api/cctv` route uses the same-site gate.
|
||||
|
||||
Traffic owns its rendered-surface observer only while enabled, removes it on disable/destroy, and caches surface identity without allocating on unchanged frames.
|
||||
|
||||
|
||||
Reference in new issue
Block a user