Restore TODO.md and move TODO content out of README (#58)
All checks were successful
check / check (push) Successful in 4s
All checks were successful
check / check (push) Successful in 4s
Reviewed-on: #58 Co-authored-by: sneak <sneak@sneak.berlin> Co-committed-by: sneak <sneak@sneak.berlin>
This commit was merged in pull request #58.
This commit is contained in:
90
README.md
90
README.md
@@ -893,95 +893,7 @@ linted, tested, and compiled.
|
||||
|
||||
## TODO
|
||||
|
||||
### Completed: Code Quality (Phase 1 of MVP)
|
||||
- [x] Rename Processor → Webhook, Webhook → Entrypoint in code
|
||||
([#12](https://git.eeqj.de/sneak/webhooker/issues/12))
|
||||
- [x] Embed templates via `//go:embed`
|
||||
([#7](https://git.eeqj.de/sneak/webhooker/issues/7))
|
||||
- [x] Use `slog.LevelVar` for dynamic log level switching
|
||||
([#8](https://git.eeqj.de/sneak/webhooker/issues/8))
|
||||
- [x] Simplify configuration to prefer environment variables
|
||||
([#10](https://git.eeqj.de/sneak/webhooker/issues/10))
|
||||
- [x] Remove redundant `godotenv/autoload` import
|
||||
([#11](https://git.eeqj.de/sneak/webhooker/issues/11))
|
||||
- [x] Implement authentication middleware for protected routes
|
||||
([#9](https://git.eeqj.de/sneak/webhooker/issues/9))
|
||||
- [x] Replace Bootstrap with Tailwind CSS + Alpine.js
|
||||
([#4](https://git.eeqj.de/sneak/webhooker/issues/4))
|
||||
|
||||
### Completed: Core Webhook Engine (Phase 2 of MVP)
|
||||
- [x] Implement webhook reception and event storage at `/webhook/{uuid}`
|
||||
- [x] Build event processing and target delivery engine
|
||||
- [x] Implement HTTP target type (fire-and-forget with max_retries=0,
|
||||
retries with exponential backoff when max_retries>0)
|
||||
- [x] Implement database target type (store events in per-webhook DB)
|
||||
- [x] Implement log target type (console output)
|
||||
- [x] Implement Slack target type (Slack/Mattermost incoming webhook
|
||||
notifications with pretty-printed payloads)
|
||||
- [x] Webhook management pages (list, create, edit, delete)
|
||||
- [x] Webhook request log viewer with pagination
|
||||
- [x] Entrypoint and target management UI
|
||||
|
||||
### Completed: Per-Webhook Event Databases
|
||||
- [x] Split into main application DB + per-webhook event DBs
|
||||
- [x] Per-webhook database lifecycle management (create on webhook
|
||||
creation, delete on webhook removal)
|
||||
- [x] `WebhookDBManager` component with lazy connection pooling
|
||||
- [x] Event-driven delivery engine (channel notifications + timer-based retries)
|
||||
- [x] Self-contained delivery tasks: in the ≤16KB happy path, the engine
|
||||
delivers without reading from any database — target config, event
|
||||
headers, and body are all carried inline in the channel notification.
|
||||
The engine only touches the DB to record results (success/failure).
|
||||
Large bodies (≥16KB) are fetched from the per-webhook DB on demand.
|
||||
- [x] Database target type marks delivery as immediately successful
|
||||
(events are already in the per-webhook DB)
|
||||
- [x] Parallel fan-out: all targets for an event are delivered via
|
||||
the bounded worker pool (no goroutine-per-target)
|
||||
- [x] Circuit breaker for HTTP targets with retries: tracks consecutive
|
||||
failures per target, opens after 5 failures (30s cooldown),
|
||||
half-open probe to test recovery
|
||||
|
||||
### Completed: Security Hardening
|
||||
- [x] Security headers middleware (HSTS, CSP, X-Frame-Options,
|
||||
X-Content-Type-Options, Referrer-Policy, Permissions-Policy)
|
||||
([#34](https://git.eeqj.de/sneak/webhooker/issues/34))
|
||||
- [x] Session regeneration on login to prevent session fixation
|
||||
([#38](https://git.eeqj.de/sneak/webhooker/issues/38))
|
||||
- [x] Request body size limits on form endpoints
|
||||
([#39](https://git.eeqj.de/sneak/webhooker/issues/39))
|
||||
|
||||
### Remaining: Core Features
|
||||
- [ ] Per-webhook rate limiting in the receiver handler
|
||||
- [ ] Webhook signature verification (GitHub, Stripe formats)
|
||||
- [x] CSRF protection for forms
|
||||
([#35](https://git.eeqj.de/sneak/webhooker/issues/35))
|
||||
- [x] SSRF prevention for HTTP delivery targets
|
||||
([#36](https://git.eeqj.de/sneak/webhooker/issues/36))
|
||||
- [x] Login rate limiting (per-IP brute-force protection)
|
||||
([#37](https://git.eeqj.de/sneak/webhooker/issues/37))
|
||||
- [ ] Session expiration and "remember me"
|
||||
- [ ] Password change/reset flow
|
||||
- [ ] API key authentication for programmatic access
|
||||
- [ ] Manual event redelivery
|
||||
- [ ] Analytics dashboard (success rates, response times)
|
||||
- [ ] Delivery status and retry management UI
|
||||
|
||||
### Remaining: Event Maintenance
|
||||
- [ ] Automatic event retention cleanup based on `retention_days`
|
||||
|
||||
### Remaining: REST API
|
||||
- [ ] RESTful CRUD for webhooks, entrypoints, targets
|
||||
- [ ] Event viewing and filtering endpoints
|
||||
- [ ] Event redelivery endpoint
|
||||
- [ ] OpenAPI specification
|
||||
|
||||
### Future
|
||||
- [ ] Email delivery target type
|
||||
- [ ] SNS, S3, Slack delivery targets
|
||||
- [ ] Data transformations (e.g., webhook-to-Slack message formatting)
|
||||
- [ ] JSONL file delivery with periodic S3 upload
|
||||
- [ ] Webhook event search and filtering
|
||||
- [ ] Multi-user with role-based access
|
||||
See [TODO.md](TODO.md).
|
||||
|
||||
## License
|
||||
|
||||
|
||||
Reference in New Issue
Block a user