Commit Graph
12 Commits
Author SHA1 Message Date
Niccolò Saggese e2ce7fa38e Merge remote-tracking branch 'upstream/main' into fix/363-geocode-proxy
# Conflicts:
#	SECURITY.md
#	server/providers/places/google.js
2026-10-05 09:26:08 +02:00
Sameh KhamisandClaude Opus 5.5 9b4ccbff62 fix(server): gate Google text search against cross-site requests
/api/google/text-search spends the same Google quota as nearby-places but
was not behind the cross-site gate. It now refuses cross-site requests
before calling Google, and a test covers both paid Google routes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-02 20:16:39 -07:00
bb74071dc2 fix(server): throttle the cost-bearing proxies by default
The OpenAI endpoints (/api/realtime/token, /api/openai/hud-summary) now
allow 30 requests per minute per client IP and the Google Places endpoints
120, the caps the Pinokio build already ships. GEV_RATELIMIT_OPENAI_PER_MIN
and GEV_RATELIMIT_GOOGLE_PER_MIN still override them and exactly 0 disables
them; an unreadable value falls back to the default rather than to
unlimited.

Salvaged from #683 onto current main.

Co-authored-by: Sameh Khamis <[email protected]>
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-02 19:57:29 -07:00
7aa9bbd3be fix(server): gate cost/log endpoints against cross-site requests and ship a full CSP
The cost-bearing endpoints (/api/realtime/token, /api/openai/hud-summary,
/api/google/nearby-places) and the voice debug log refuse cross-site browser
requests: a foreign or opaque Origin, a Sec-Fetch-Site other than
same-origin/none, or proxy forwarding headers. Loopback tools without an
Origin and the LAN opt-in keep working. The dev and preview servers send one
shared Content-Security-Policy, and embed-mode framing rewrites only the
frame-ancestors directive of it.

Salvaged from #242 onto current main.

Co-authored-by: Sameh Khamis <[email protected]>
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-02 19:56:42 -07:00
Niccolò Saggese 771c9e5632 fix(search): bound and sanitize the geocode proxy
- reject blank viewport-bias components before Number() reads them as 0
- give the upstream call a 10s deadline and a 256 KiB capped body read
- return fixed public text on failure instead of the upstream message
2026-09-21 11:56:33 +02:00
Niccolò Saggese c5b1d41cba fix(search): geocode through the server, not the browser
- Google's Geocoding web service refuses referrer-restricted keys, so the
  browser call forced GOOGLE_MAPS_API_KEY to ship unrestricted
- add /api/google/geocode and /api/google/reverse-geocode, using the server
  key like Places and Street View already do
- the browser key now needs the Map Tiles API only
2026-09-21 11:30:49 +02:00
Sameh Khamis 8b36c28b06 refactor: compose configurable geocoding and route services 2026-09-13 21:23:13 -07:00
Sameh Khamis 24d2582516 fix(cctv): release snapshot readers and verify provider error paths 2026-09-12 16:37:04 -07:00
Bilawal Sidhu 3d956177ab fix(providers): validate before limiting and tighten capped image reads
Apply shared Places validation, owned image chunks, and response-header deadline tests to the provider modules.
2026-09-12 16:35:11 -07:00
Prajwal Raj 3b19af4076 fix: reject out-of-range coordinates in Google text search
Adapt the coordinate bounds check contributed in public PR #46 to the Places provider.
2026-09-12 16:33:51 -07:00
Sameh Khamis 7e6d89d8f5 style: format extracted place and route modules 2026-09-11 19:57:22 -07:00
Sameh Khamis 2793d7a8df refactor: extract place-search and routing provider modules 2026-09-11 19:56:48 -07:00