## Summary
### Security fixes (10 vulnerabilities)
- **SSRF:** block private/internal URLs in image cache, RSS feed, and CalDAV URL inputs
- **Auth:** require login for `GET /api/images/<id>` (was fully unauthenticated)
- **Auth:** restrict Ollama model pull/delete to admin users only
- **Info disclosure:** remove email addresses from `/api/users/search` response
- **OAuth:** skip email-based account linking when `email_verified` is false/absent
- **Config:** hard startup error when default `SECRET_KEY` is used with `SECURE_COOKIES=true`
- **Rate limiting:** document proxy header requirement; add startup warning if `TRUST_PROXY_HEADERS` not set
- **XSS:** remove `src`/`alt` from global DOMPurify `ADD_ATTR` allowlist
### MCP bug fixes
- **`fable_add_task_log`:** was sending `{"body": ...}` — API expects `{"content": ...}`
- **`fable_create_project`:** `status` parameter was silently ignored; now threaded through route and service
- **`fable_create_milestone`:** `status` parameter was silently ignored; now threaded through route and service
## Test plan
- [ ] `GET /api/images/1` without session returns 401
- [ ] Adding a `file://` or internal URL as an RSS feed returns 400
- [ ] Non-admin user cannot pull or delete Ollama models
- [ ] User search response contains no email field
- [ ] OAuth login with unverified email does not link to existing account
- [ ] `fable_add_task_log` MCP tool successfully appends a log entry
- [ ] `fable_create_project` with `status="archived"` creates an archived project
- [ ] `fable_create_milestone` with `status="done"` creates a done milestone
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Security fixes (10 vulnerabilities)
GET /api/images/<id>(was fully unauthenticated)/api/users/searchresponseemail_verifiedis false/absentSECRET_KEYis used withSECURE_COOKIES=trueTRUST_PROXY_HEADERSnot setsrc/altfrom global DOMPurifyADD_ATTRallowlistMCP bug fixes
fable_add_task_log: was sending{"body": ...}— API expects{"content": ...}fable_create_project:statusparameter was silently ignored; now threaded through route and servicefable_create_milestone:statusparameter was silently ignored; now threaded through route and serviceTest plan
GET /api/images/1without session returns 401file://or internal URL as an RSS feed returns 400fable_add_task_logMCP tool successfully appends a log entryfable_create_projectwithstatus="archived"creates an archived projectfable_create_milestonewithstatus="done"creates a done milestone🤖 Generated with Claude Code