Grapevine_Disease_Detection/vineye-admin
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
..
app feat(api/mobile): auth sync/me/sign-out + scans + bearer plugin 2026-05-01 12:02:45 +02:00
components add MyPlantsScreen + ScanDetailScreen + enriched admin + API mobile + project summary 2026-04-09 03:19:39 +02:00
lib feat(api/mobile): auth sync/me/sign-out + scans + bearer plugin 2026-05-01 12:02:45 +02:00
prisma feat(mobile): UI overhaul + ML pipeline + Android build fixes 2026-04-30 21:00:03 +02:00
public add MyPlantsScreen + ScanDetailScreen + enriched admin + API mobile + project summary 2026-04-09 03:19:39 +02:00
.gitignore add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00
AGENTS.md add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00
CLAUDE.md add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00
components.json add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00
eslint.config.mjs add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00
middleware.ts feat(api/mobile): auth sync/me/sign-out + scans + bearer plugin 2026-05-01 12:02:45 +02:00
next.config.ts add MyPlantsScreen + ScanDetailScreen + enriched admin + API mobile + project summary 2026-04-09 03:19:39 +02:00
package.json add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00
pnpm-lock.yaml add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00
pnpm-workspace.yaml add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00
postcss.config.mjs add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00
prisma.config.ts add MyPlantsScreen + ScanDetailScreen + enriched admin + API mobile + project summary 2026-04-09 03:19:39 +02:00
README.md add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00
tsconfig.json add vineye-admin dashboard (Next.js) 2026-04-03 11:22:01 +02:00

This is a Next.js project bootstrapped with create-next-app.

Getting Started

First, run the development server:

npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev

Open http://localhost:3000 with your browser to see the result.

You can start editing the page by modifying app/page.tsx. The page auto-updates as you edit the file.

This project uses next/font to automatically optimize and load Geist, a new font family for Vercel.

Learn More

To learn more about Next.js, take a look at the following resources:

You can check out the Next.js GitHub repository - your feedback and contributions are welcome!

Deploy on Vercel

The easiest way to deploy your Next.js app is to use the Vercel Platform from the creators of Next.js.

Check out our Next.js deployment documentation for more details.