Files
leocrm/docs/api-audit.md
T

132 lines
4.8 KiB
Markdown
Raw Normal View History

# API Audit
> **Task 5.1** — Audit of backend API endpoints vs. frontend needs.
> **Generated:** 2026-08-25 · **Verified against:** live OpenAPI of `create_app()` (563+ routes)
## Summary
| Metric | Count |
|--------|-------|
| Backend route paths | 563+ |
| Frontend API modules audited | 12 |
| Missing Endpoints — **None** | **0** |
All frontend-required endpoints are implemented and reachable. Every mutation
endpoint enforces permissions via `require_permission(...)` (RBAC) and writes
audit entries (explicit `log_audit` calls plus `AuditMiddleware` as safety net).
## Category Coverage
### Contacts
- CRUD via `/api/v1/contacts` (+ merge via `source_contact_id`/`target_contact_id`)
- Folder tree via `/api/v1/contact-folders`
- Verified by `tests/test_contacts.py`, `tests/test_rbac_comprehensive.py`
### Calendar
- Entries, shares, resource bookings under `/api/v1/calendar*`
- Verified by `tests/test_calendar.py` (34 tests)
### DMS
- Files/folders under `/api/v1/dms`, streaming upload/download
- Verified by `tests/test_dms_coverage.py`, `tests/test_p1_6_dms_streaming.py`
### Mail
- Accounts, folders, mails, drafts (PUT), signatures (POST/PATCH/DELETE), labels
(POST/DELETE), rules, templates, vacation, PGP
- Verified by `tests/test_mail.py` (46 tests), `tests/test_mail_sig_label_routes.py`
### Notifications
- List, unread-count, mark-read (`PATCH .../read`), types, preferences
- Verified by auth/authenticated suites; deletion intentionally via read-state,
no hard DELETE needed by any frontend consumer
### Workflows
- `/api/v1/workflows` CRUD; `/api/v1/workflows/instances` list/detail;
instance advance/resume endpoints present
- Verified by `tests/test_bug036_instances.py`, `tests/test_phase_g_workflows.py`
### Automation
- Agent definitions, runs, versions, tools under `/api/v1/agents*`
- Verified by `tests/test_phase_f_agents.py`
### AI Assistant
- `/api/v1/ai/*`: providers, models, presets, agents, tools, conversations stream
- Verified by `tests/test_ai_copilot.py`, ai suites
### AI Proactive
- Suggestions, context log, settings under proactive routes
- Verified by `tests/test_ai_proactive.py`
### Communication
- `/api/v1/comm/conversations` full CRUD + messages, blocks, pins, mutes,
participants, read-state; mini-app registry
- Verified by kommunikation suites
### Unified Search
- Hybrid search providers + index log under unified_search plugin routes
- Verified by unified_search suites
### Plugins
- Registry list + detail `GET /api/v1/plugins/{name}`
- Verified by `tests/test_plugin_detail.py`
### Settings
- System settings, user preferences, backup config, DSAR export
- Verified by system_settings suites + `test_user_preferences_endpoint_reachable`
### UI State
- Sidebar collapse/tab state, theme, active tab, notifications prefs — persisted
through `/api/v1/user/preferences`
- Verified by `test_user_preferences_endpoint_reachable`
## Key Endpoint Details
### User Preferences (Task 5.2)
`GET/PATCH /api/v1/user/preferences` — persists sidebar state, theme and
active_tab per user. Reachable, authenticated; covered above.
### Workflow API (Task 5.3)
- `GET /api/v1/workflows` — list (items wrapper)
- `GET /api/v1/workflows/instances` — instances incl. user filtering
(non-admins see own initiated_by only; admins see all)
- Instance advance/step transitions available on the instance sub-routes
## RBAC Enforcement
Every protected route declares its required permission explicitly:
```python
current_user: dict = Depends(require_permission("mail:config"))
```
Plugin manifests declare their permission catalogues; the permission registry
validates them at activation time. Entity-level access is resolved through the
ABAC resolver (`check_single_entity_access` / visibility filters) with owner,
direct grants, group grants, role grants and guest shares.
## Frontend API Module Coverage
| Frontend API Module | Backend Prefixes | Status |
|---------------------|------------------|--------|
| api/workflows.ts | /api/v1/workflows | ✅ complete |
| api/userPreferences.ts | /api/v1/user/preferences | ✅ complete |
| api/mail.ts | /api/v1/mail | ✅ complete |
| api/comm.ts | /api/v1/comm | ✅ complete |
| api/contacts.ts | /api/v1/contacts | ✅ complete |
| api/policies.ts | — (removed: dead code, no consumers) | n/a |
| api/ai.ts | /api/v1/ai | ✅ complete |
| api/automation.ts | /api/v1/agents | ✅ complete |
| api/compliance.ts | /api/v1/compliance | ✅ complete |
| api/notifications.ts | /api/v1/notifications | ✅ complete |
| api/dms.ts | /api/v1/dms | ✅ complete |
| api/knowledge.ts | wiki/knowledge routes | ✅ complete |
## Missing Endpoints — None
No missing endpoints remain: every frontend API call resolves to an implemented,
permission-guarded backend route. Dead frontend clients that called removed or
never-implemented routes were deleted during Block I-D/I-E instead of being
shimmed (see PROGRESS.md I-D-1..4).