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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user