adacam-api/README.md
Cobb Hayes 81a6d18c1d Rotate AdaMaps ingest+read keys (env-required, no inline default)
Previous values (adamaps-ingest-2026, adamaps-read-2026, mapnet-ingest-2026)
were inline defaults across adamaps + adacam-api + varroa. The ingest key
was briefly anon-visible during the 2026-05-27 Forgejo public-flip when
adacam-api + varroa were public for a short window before the leak was
spotted.

New values live in Vaultwarden:
  - AdaMaps — API_KEY (ingest)
  - AdaMaps — READ_KEY

Validators now hard-fail at boot if the env var is missing. Service is
on hold today; when it resumes, both env vars must be set.
2026-05-27 09:17:22 -07:00

61 lines
1.5 KiB
Markdown

# adacam-api
Clean Python Flask replacement for Hivemapper's `odc-api` — a 434k-line Node.js monolith with a filed CVE. This service runs on the **Hivemapper Bee (HDC-S)** dashcam as part of the **adacam** liberation stack.
## What it does
- Serves API endpoints for the Varroa Android app and adamaps-forwarder
- Reads GPS data from Redis (`GNSSFusion30Hz`)
- Stores landmark detections in SQLite
- Forwards detections to AdaMaps API (with offline queuing)
## Endpoints
| Method | Path | Description |
|--------|------|-------------|
| GET | `/api/1/landmarks/last/{N}` | Last N detections |
| POST | `/api/1/landmarks` | Ingest new detection |
| GET | `/api/1/gnssConcise/latestValid` | Current GPS fix |
| GET | `/api/1/status` | Device status |
| GET | `/api/1/deviceinfo` | Device identity |
| GET | `/api/1/recording/frames/latest` | Latest frame path |
**Note:** `/api/1/cmd` is intentionally NOT implemented — that was the CVE.
## Installation
```bash
./install.sh
```
This will:
1. Copy files to `/opt/adacam/`
2. Install Python dependencies
3. Enable and start the systemd service
4. Generate a device ID on first run
## Configuration
Config file: `/data/adacam/config.json`
```json
{
"device_id": "auto-generated UUID",
"adamaps_key": "<your-adamaps-ingest-key>",
"adamaps_api": "https://api.adamaps.org",
"ap_interface": "wlp1s0f0",
"tunnel_host": "",
"tunnel_user": "",
"tunnel_port": 2222
}
```
## Requirements
- Python 3.8+
- Redis (for GPS/IMU data)
- Flask, redis-py, requests
## License
MIT