da83c91a5b
feat: add side-by-side item comparison for duplicate Part Numbers
...
New Component: ItemComparisonModal.tsx
- Shows existing vs new item side-by-side
- Highlights fields that are different (in yellow)
- Options to Update item or Skip (local-only save)
- Shows existing item ID and comparison details
Backend Changes:
- Updated error message to say 'Part Number' not 'barcode'
- 409 response includes existing item data for comparison
- Clear, user-friendly conflict messaging
Frontend Changes:
- New state for comparison modal (newItem, existingItem, existingId)
- handleOnboardingComplete() shows modal on 409 conflict
- handleComparisonUpdate() calls updateItem() API
- handleComparisonSkip() saves locally without syncing
- Better error handling distinguishes 409 from other failures
Workflow:
1. User imports item with Part Number that already exists
2. System shows comparison modal
3. User can:
- Update (merges new data into existing)
- Skip (saves locally, doesn't sync to cloud)
2026-04-17 12:35:42 +03:00
ade8dcde78
fix: prevent duplicate item creation with barcode conflict detection
...
Backend:
- Added UNIQUE constraint check on barcode before item creation
- Returns 409 Conflict with user-friendly message if duplicate exists
- Prevents sqlite3.IntegrityError crashes
Frontend:
- Improved error handling for cloud sync failures
- Detects 409 status code (duplicate barcode)
- Shows specific error message to user
- Gracefully falls back to local-only save
Example error message: 'Item already exists. Item with barcode P66093-002 already exists (ID: 42). Update it instead or use a different barcode.'
2026-04-17 12:29:53 +03:00
Daniel Bedeleanu
00ee4cf9c5
Build [v1.9.19]
2026-04-14 20:44:01 +03:00
Daniel Bedeleanu
994920bda2
Build [v1.7.0] - GitGuard - Infrastructure Hardening
2026-04-12 22:45:27 +03:00
Daniel Bedeleanu
2e5c666cc8
Build [v1.5.0] - Box Management & Label Printing
2026-04-12 21:30:50 +03:00
Daniel Bedeleanu
50ae3671c9
Build [v1.4.1] - Security hardening, PWA and UI refinements
2026-04-12 10:45:57 +03:00
Daniel Bedeleanu
f3d861b1a2
Build [v1.4.0] - Audit Dashboard & LDAP Restoration
2026-04-12 09:39:17 +03:00
Daniel Bedeleanu
c2bd8e44fb
fix: add Request parameter to extract_label for slowapi rate limiter
2026-04-11 14:37:28 +03:00
Daniel Bedeleanu
ccc69d92df
fix: translate final Romanian comment in items.py to English
2026-04-11 14:27:15 +03:00
Daniel Bedeleanu
9dbe0f8b6c
refactor: translate all docstrings and comments to English (STRICT ENGLISH POLICY complete)
2026-04-11 14:26:55 +03:00
Daniel Bedeleanu
e6ca33f2f0
feat: frontend JWT handling, rate limiting [H-02], CORS config
...
Frontend:
- Creiez frontend/lib/auth.ts cu saveToken, getToken, getAuthHeader, clearAuth
- Modific api.ts: axiosInstance cu interceptor Bearer token + 401 → /login redirect
- Modific login page: salveaza JWT token din response
Backend:
- [H-02] Integrez slowapi rate limiting: 10 req/minute pe /items/extract-label
- [M-01] CORS: ALLOWED_ORIGINS din env (dev fallback: localhost:3000, localhost:3002)
- [C-01] JWT_SECRET_KEY din env (dev fallback: ephemeral key)
docker-compose.yml:
- Adaug ALLOWED_ORIGINS env var (dev: localhost)
- Adaug JWT_SECRET_KEY env var cu fallback warning
Status:
- ✅ JWT backend: complet
- ✅ JWT frontend: token save + attach + 401 handling
- ✅ Rate limiting: 10/min pe extract-label
- ✅ CORS: configurable via env
Gata pentru dev + testing local.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 13:42:09 +03:00
Daniel Bedeleanu
9b6adad618
feat: implementare JWT Bearer authentication pe toți routers [C-01]
...
Implementare completă a autentificării Bearer token:
- Creiez backend/auth.py: funcții JWT (create_access_token, get_current_user, get_current_admin)
- Modific /users/login: returnează TokenResponse cu JWT token și expirare 8h
- Adaug Depends(get_current_user) pe toate endpoint-urile API
- [M-02] user_id extras din JWT token, nu din request body
- [L-01] Token cu exp claim pentru sesiuni frontend
Acces endpoints-uri:
- GET/POST /users/: authenticated users
- POST /users/: admin only
- PUT /users/{id}, DELETE /users/{id}, /ldap-config, /test-ldap: admin only
- Toți routers (items, operations, categories): authenticated users minimum
Modificări dependențe:
- Adaug: python-jose[cryptography]>=3.3.0, slowapi>=0.1.9 (pentru H-02 rate limiting)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 13:38:24 +03:00
Daniel Bedeleanu
247ea45408
security: audit complet + patch vulnerabilitati critice v1.3.5
...
Audit de securitate executat pe Backend (FastAPI) si Frontend (Next.js/Dexie).
12 vulnerabilitati identificate (4 CRITICE, 4 HIGH, 3 MEDIUM, 1 LOW).
Patch-uri aplicate direct:
- [C-02] Eliminat bypass autentificare pentru useri fara parola (users.py)
- [C-03] Parola default Admin inlocuita cu secrets.token_urlsafe(16) (users.py)
- [H-01] LDAP injection fix: escape_filter_chars pe username (users.py)
- [H-03] Validare MIME + limita 10MB pe /items/extract-label (items.py)
- [M-01] CORS fix: allow_origins din env ALLOWED_ORIGINS, nu wildcard (main.py)
- [M-03] Toate print() LDAP inlocuite cu log.debug() (users.py)
Raport complet: dev_docs/SECURITY_REPORT.md
Actiuni arhitecturale ramase (JWT enforcement, rate limiting): SESSION_STATE.md
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 13:20:05 +03:00
Daniel Bedeleanu
4136d49936
style: ui readability refactor v1.2.2 (removed uppercase, tracking, increased font sizes)
2026-04-11 11:22:40 +03:00
Daniel Bedeleanu
8a3783c7e9
Infrastructure: Implement master/dev/vX branching, save git path, and fix username casing
2026-04-10 21:51:22 +03:00
Daniel Bedeleanu
e4b0afb50d
feat: core inventory API and secure operation routers
2026-04-10 13:47:10 +03:00