Skip to content

API: device auth and secure measurement sync (F0+F1)#1

Merged
robozor merged 2 commits into
mainfrom
feature/auth-sync
Jun 13, 2026
Merged

API: device auth and secure measurement sync (F0+F1)#1
robozor merged 2 commits into
mainfrom
feature/auth-sync

Conversation

@robozor

@robozor robozor commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Co přináší

Skeleton API (F0), autorizace (F1) a bezpečná synchronizace měření z mobilu.

Stack

Django 5 + django-ninja + psycopg3 + PostgreSQL · docker-compose
(MeteorPointer-DB + MeteorPointer-API) · CI (ruff + pytest) + GHCR release.

Aplikace (backend/apps/)

  • devices — anonymní Ed25519 identita zařízení, jednorázová recovery fráze
    (ukládá se jen hash), evidence souhlasu (verze + sha256 + locale + čas),
    revokace, mazání dat i celé identity.
  • auth_apichallenge → podepsaný nonce → krátkodobé JWT.
  • ingestingest-first / parse-later. POST /v1/reports jen ověří JWT a
    uloží syrový payload do landing tabulky, vrátí 202. Idempotentní na
    (device, client_key) → opakování při výpadku spojení je bezpečné. Parser je
    záměrně odložený (zpracování měření řešíme zvlášť).
  • legal — servíruje kanonické CC0 texty souhlasu + sha256.

Odolnost vůči slabému připojení

  • Dávkový upload (offline fronta jedním requestem)
  • Idempotence přes client_key → bezpečné retry do 202
  • 202 = durabilně přijato; chyba parseru nemůže shodit upload

Testy

End-to-end: consent → register → token → batch sync vč. idempotence.
Vše zelené, ruff čistý (ověřeno v Dockeru proti Postgresu).

Mimo rozsah (záměrně)

Parser raw_ingestReport, web login (device flow), mobilní klient
(větev Autorizace), web FE.

🤖 Generated with Claude Code

robozor and others added 2 commits June 13, 2026 20:18
F0 skeleton + F1 authorization + robust upload synchronisation.

- Django 5 + django-ninja + psycopg3 + PostgreSQL; docker-compose
  (MeteorPointer-DB + MeteorPointer-API); CI (ruff+pytest) + GHCR release.
- devices: anonymous Ed25519 device identity, one-time recovery phrase,
  consent recording (version+sha256), revoke, data/account deletion.
- auth_api: challenge -> signed nonce -> short-lived JWT.
- ingest: ingest-first/parse-later. POST /v1/reports only authenticates and
  stores the raw payload in a landing table, returns 202; idempotent per
  (device, client_key) so dropped-connection retries are safe. Parsing is
  deliberately deferred.
- legal: serves canonical CC0 consent docs with sha256.

Tests cover the full consent -> register -> token -> batch sync flow incl.
idempotency. All green; ruff clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@robozor robozor merged commit 84eb830 into main Jun 13, 2026
1 check passed
@robozor robozor deleted the feature/auth-sync branch June 13, 2026 18:31
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