Christian Krakau-Louis
9d0b12efea
feat: persist DMARC aggregate metadata
2026-05-23 14:17:09 +02:00
Christian Krakau-Louis
1f954c9e08
feat: add forensic report parsing storage
2026-05-23 12:52:54 +02:00
Christian Krakau-Louis
521dbc92d0
feat: add Cloudflare DNS integration
...
Closes #31
2026-05-23 01:17:59 +02:00
Christian Krakau-Louis
947428afb6
harden notification settings
2026-05-23 00:56:49 +02:00
Christian Krakau-Louis
77fd0f9552
feat: add cached DNS checks
2026-05-22 23:30:12 +02:00
Christian Krakau-Louis
af66c93829
feat: add alert history
2026-05-22 23:18:32 +02:00
Christian Krakau-Louis
c1b81d3e06
feat: add mail import detail events
2026-05-22 20:11:56 +02:00
Christian Krakau-Louis
4fc69602b3
feat: add mail source import history
2026-05-22 19:29:49 +02:00
copilot-swe-agent[bot]
531dc968a8
feat: integrate Logto OIDC for user authentication
...
- Add Logto OIDC integration (app/core/logto.py): CookieStorage adapter,
create/decode session token helpers, sync_logto_user upsert
- New auth endpoints (/api/v1/auth): sign-in, callback, sign-out, me
- AuthRedirectMiddleware: protects HTML pages, redirects to /setup when
Logto is unconfigured, to /login otherwise
- Update require_admin_auth: accepts dmarq_session cookie JWT first,
then API key, then Bearer JWT (fully backward compatible)
- Update User model: add logto_id, username, picture, created_at, updated_at;
make hashed_password nullable for Logto-only users; is_superuser default=True
- New Alembic migration d4e5f6a7b8c9 for the above schema changes
- Add LOGTO_ENDPOINT / LOGTO_APP_ID / LOGTO_APP_SECRET / LOGTO_REDIRECT_URI
settings with logto_configured property
- Create login.html (Sign in with Logto button) and setup.html (step-by-step
configuration guide)
- Update base.html: user menu with avatar/name and sign-out via Alpine.js
fetch to /api/v1/auth/me
- Update settings.html: remove localStorage adminApiKey; session cookie is
sent automatically by browser; add 401 → /login redirect
- Update requirements.txt: replace fastapi-users additions with logto + aiohttp
- Add test_auth.py: 18 new tests covering session tokens, CookieStorage,
sync_logto_user, /me, /sign-in (503), /sign-out cookie clearing
- Fix test_security_extra.py: pass Request mock to require_admin_auth;
add new test_valid_session_cookie_returns_auth_context
Agent-Logs-Url: https://github.com/christianlouis/dmarq/sessions/b448f585-7646-40f8-ae2d-9986c361e3fd
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-30 10:09:50 +00:00
copilot-swe-agent[bot]
241713083b
Add persistent settings system with database backend and comprehensive UI
...
- New Setting ORM model (key-value store with category, value_type, audit fields)
- Alembic migration to create the settings table
- Settings API endpoints: GET/PUT /api/v1/settings/{key}, GET /api/v1/settings (list+filter), POST /api/v1/settings/bulk
- Default seeding (17 sensible defaults across general/dmarc/dns/cloudflare/notifications categories)
- Secret redaction for cloudflare.api_token and notifications.smtp_password
- Updated settings.html: General, DMARC Policy Defaults, DNS Resolver, Cloudflare Integration, Email Notifications sections
- All forms wired to the API via Alpine.js with flash feedback
- 12 new tests for the settings model and endpoints
Agent-Logs-Url: https://github.com/christianlouis/dmarq/sessions/19dbc6cd-07cb-406e-b3b6-411f7721f737
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-30 07:58:51 +00:00
copilot-swe-agent[bot]
25b3567414
feat: implement Gmail API mail source with OAuth2, ingestion tracking, and UI
...
Agent-Logs-Url: https://github.com/christianlouis/dmarq/sessions/0c63851e-a69a-4a76-8dd8-25618e825b8c
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-29 19:34:03 +00:00
copilot-swe-agent[bot]
6d9392e5e7
feat: refactor IMAP config to DB, add multi-account mail sources admin UI
...
Agent-Logs-Url: https://github.com/christianlouis/dmarq/sessions/f141cd3b-8d0a-4c7e-b479-ee973c209c11
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-29 16:18:15 +00:00
copilot-swe-agent[bot]
70dc77011a
Fix ModuleNotFoundError for asyncpg by normalizing async DB URLs to psycopg2
...
Agent-Logs-Url: https://github.com/christianlouis/dmarq/sessions/d1890838-1770-4d5f-886f-f210df761fae
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-29 16:03:18 +00:00
copilot-swe-agent[bot]
2192944acf
fix: add Alembic migration setup to resolve missing script_location error
...
Agent-Logs-Url: https://github.com/christianlouis/dmarq/sessions/bfb1bb7e-b0da-45b8-b034-b2331488905e
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-29 11:37:18 +00:00