docs: update SESSION_STATE cu status [C-01] JWT auth COMPLET

Backend-ul are autentificație JWT completa pe toți routers-ii.
Frontend-ul trebuie actualizat pentru a trimite token în header.
Rate limiting (H-02) și CORS final rămân pending.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Daniel Bedeleanu
2026-04-11 13:38:45 +03:00
parent 9b6adad618
commit e9ada00497

View File

@@ -6,37 +6,66 @@
**Branch:** dev
### Current Status
**Security Audit COMPLETAT.** Auditul de securitate a fost executat complet. Au fost identificate 12 vulnerabilități (4 CRITICE, 4 HIGH, 3 MEDIUM, 1 LOW). Patch-urile aplicabile direct au fost implementate. Raportul complet se găsește în `dev_docs/SECURITY_REPORT.md`.
**[C-01] JWT Bearer Authentication IMPLEMENTAT COMPLET.**
Auditul de securitate s-a finalizat cu succes. 6 vulnerabilități au fost patch-ate direct în codul din commits anterioare. Implementarea JWT autentificării Bearer este COMPLETĂ — toți routers-ii necesită acum token autentificat.
**Stare codului:**
- ✅ Backend: JWT auth funcțional pe toți routers-ii
- ✅ Autentificare: `/users/login` returnează token JWT cu expirare 8h
- ✅ user_id: extras din JWT token, NU din request body
- ⏳ Frontend: NU ACTUALIZAT ÎNCĂ — trebuie să salveze token și să îl trimit în header `Authorization: Bearer <token>`
### Technical Context
- Raport complet: `dev_docs/SECURITY_REPORT.md`
- Fișiere modificate în acest session: `backend/main.py`, `backend/routers/users.py`, `backend/routers/items.py`
- `.env` **NU** a fost niciodată committed în git — cheia Gemini API este în siguranță local.
Commits în sesiune:
1. `247ea454` — Security audit + 6 patch-uri directe (C-02, C-03, H-01, H-03, M-01, M-03)
2. `9b6adad6` — [C-01] JWT Bearer auth pe toți routers-ii
### Patch-uri aplicate (direct în cod)
| ID | Fix |
|----|-----|
| C-02 | Eliminat bypass autentificare fără parolă (`users.py`) |
| C-03 | Parola Admin seed înlocuită cu `secrets.token_urlsafe(16)` (`users.py`) |
| H-01 | LDAP injection fix cu `escape_filter_chars` (`users.py`) |
| H-03 | Validare MIME + limită 10MB pe upload imagini (`items.py`) |
| M-01 | CORS fix: `allow_origins` din env `ALLOWED_ORIGINS` în loc de `"*"` (`main.py`) |
| M-03 | Toate `print()` LDAP înlocuite cu `log.debug()` (`users.py`) |
Fișiere modificate:
- `backend/auth.py` (NOU) — JWT logic
- `backend/main.py` — CORS fix
- `backend/routers/users.py` — LDAP injection fix, JWT login
- `backend/routers/items.py` — MIME validation, auth enforcement
- `backend/routers/operations.py` — auth enforcement, user_id din token
- `backend/routers/categories.py` — auth enforcement
- `backend/schemas.py` — TokenResponse schema
- `backend/requirements.txt` — +python-jose, +slowapi
### Task Status
| Task | Status |
|------|--------|
| Security audit complet | ✅ |
| 6 patch-uri directe | ✅ |
| [C-01] JWT auth backend | ✅ |
| [C-04] Rotire API key | ❌ (mașina nu e partajată — skip) |
| [H-02] Rate limiting (slowapi) | ⏳ Pendding — instalat în requirements, NU integrat |
| Frontend token handling | ⏳ NECESAR — frontend trebuie updatat |
| ALLOWED_ORIGINS env config | ⏳ Necesar în docker-compose.yml |
### Next Steps / Blockers (Pentru următorul AI)
**ATENȚIE: Aplicația NU este pregătită pentru producție fără aceste task-uri:**
1. **[C-01] PRIORITATE MAXIMĂ — Implementare JWT Bearer Auth** pe toate endpoint-urile.
- Niciunul dintre endpoint-urile API nu verifică autentificarea.
- Necesită: creare `get_current_user` dependency, modificarea tuturor router-elor.
- Efort estimat: ~4h
**URGENT — Frontend Update:**
Frontend-ul NU este actualizat pentru JWT. Trebuie:
1. La login, salvează `access_token` din ResponseLogin (localStorage/sessionStorage/cookie sigur)
2. Adaug header `Authorization: Bearer <token>` la TOATE cereri API (Axios interceptor)
3. La expirare token (401 Unauthorized): redirect la login
4. Testa login → API call cu token → logout
2. **[C-04] Rotire cheie Gemini API** — Cheia din `.env` este reală. Deși nu e în git, trebuie rotită preventiv după orice share al mașinii.
**Rate Limiting [H-02]:**
- `slowapi` instalat în requirements.txt, dar NU integrat
- Aplică: `@limiter.limit("10/minute")` pe `/items/extract-label`
3. **[H-02] Rate limiting pe `/items/extract-label`** — Instalare `slowapi`, 10 req/min per IP.
**CORS & Deployment:**
- `ALLOWED_ORIGINS` hardcodat în main.py pentru dev (localhost:3000, localhost:3002)
- Pentru producție: adaug în `docker-compose.yml` variabila `ALLOWED_ORIGINS` cu origini reale
4. **[M-02] user_id din JWT token** — Nu din request body (depinde de C-01).
**Verificare finală:**
- JWT_SECRET_KEY: Se generează ephemeral dacă lipsește. Pentru PRODUCȚIE: set explicit în `.env`
- Token expirare: 8 ore (480 min) — e OK, poate fi configurat via env
5. **[L-01] JWT cu expirare** pentru sesiunile frontend (depinde de C-01).
---
6. **Configurare ALLOWED_ORIGINS** în `docker-compose.yml` — Adăugare variabila de mediu cu originile reale de producție.
**GATA PENTRU:**
- ✅ Development local (JWT enforce, auth required)
- ❌ Producție (fără frontend update + rate limiting + CORS final)