v1.2.0
Added
- About page with version info, feature overview, and tech stack
- Trailer playback buttons on dashboard recently added cards
- Dedicated recently added page with infinite scroll (linked from dashboard "Show All")
- `User-Agent: MediaHub/1.0` header on all outgoing API requests
- Invite registration rate limiting (3 attempts / 15 min)
Changed
- All inline event handlers (`onclick`, `onsubmit`) replaced with `addEventListener` for CSP compliance
- CSP script policy upgraded from `'unsafe-inline'` to nonce-based protection
- Remember-me and MFA cookie duration reduced from 30 days to 7 days
- MFA always required on explicit login (removed mfa_remember bypass)
- Cookie `sameSite` set to `lax`; `secure` flag auto-enabled in production
- Settings page uses "Seerr" terminology instead of "Overseerr / Jellyseerr"
Fixed
- MFA bypass vulnerability - mfa_remember cookie could skip MFA on login
- Settings reveal (eye) buttons blocked by CSP nonce policy
- Trailer buttons blocked by CSP on detail, search, trending, and recently added pages
- Path traversal guard on avatar deletion
- Avatar upload validates magic bytes (JPEG/PNG/WebP only)
- Media detail and trending pages validate ID params as positive integers
- Media sync service checks content-type before parsing JSON responses
- Failed login attempts now logged with IP address
Security
- Full security audit and hardening (OWASP Top 10)
- Method spoofing disabled (`allowMethodSpoofing: false`)
- Nonce-based CSP for all inline scripts across all pages