Grapevine_Disease_Detection/vineye-admin/app/api
Yanis 792e969c00 feat(api/mobile): auth sync/me/sign-out + scans + bearer plugin
Connect the React Native app to the admin backend so users and scans flow
into the panel and bans take effect on the device.

- Activate the bearer() plugin in lib/auth.ts so mobile clients can pass
  the better-auth session token via Authorization: Bearer header
- Add requireMobileAuth() helper in lib/auth-guard.ts that resolves the
  session, re-fetches the user from DB (banned flag is on User, not in
  the Session payload) and returns 403 with banned/bannedReason for
  banned accounts
- Extend CORS in middleware.ts to allow POST + Authorization header on
  /api/mobile/* (preflight was failing before)
- New routes:
  POST /api/mobile/auth/sync       — passwordless mobile auth via
    deterministic password derived from sha256(email + deviceId + pepper).
    Tries signIn first, falls back to signUp on USER_NOT_FOUND. Returns
    409 when the email exists with a different deviceId.
  GET  /api/mobile/auth/me         — current user enriched with
    banned/bannedReason/role/xp/level
  POST /api/mobile/auth/sign-out   — best-effort session revocation
  POST /api/mobile/scans           — create a scan, resolves diseaseSlug
    to diseaseId, never accepts an imageUrl from the device (V1 keeps
    photos local-only)
  GET  /api/mobile/scans           — own scans, 50 most recent

Validated end-to-end via curl: signUp → me → repeat sync (idempotent) →
post scan → ban via DB → me reflects banned: true → POST scans returns
403 + banned/bannedReason.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 12:02:45 +02:00
..
alerts add MyPlantsScreen + ScanDetailScreen + enriched admin + API mobile + project summary 2026-04-09 03:19:39 +02:00
auth/[...all] add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00
diseases add MyPlantsScreen + ScanDetailScreen + enriched admin + API mobile + project summary 2026-04-09 03:19:39 +02:00
guides add MyPlantsScreen + ScanDetailScreen + enriched admin + API mobile + project summary 2026-04-09 03:19:39 +02:00
mobile feat(api/mobile): auth sync/me/sign-out + scans + bearer plugin 2026-05-01 12:02:45 +02:00
scans add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00
users add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00