copilot-swe-agent[bot]
743627ecc2
feat(models): add UserIntegration model, encrypt IMAP passwords, add integrations API
- Add IntegrationDirection/IntegrationType constants and UserIntegration SQLAlchemy model
with owner_id, direction, integration_type, name, config (JSON), credentials (encrypted),
is_active, last_used_at, last_error, created_at, updated_at fields
- Fix UserImapAccount password encryption: encrypt_value() on create/update,
decrypt_value() in IMAP tasks and test-connection endpoint (backward compatible)
- Add Alembic migration 023_add_user_integrations
- Add app/api/integrations.py: CRUD + credentials endpoint with owner-scoped access
- Register integrations router in app/api/__init__.py
- Add 39 tests in tests/test_api_integrations.py covering model, CRUD, encryption
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-08 15:02:38 +00:00
..
2025-03-26 16:27:36 +00:00
2026-02-26 14:21:58 +00:00
2026-03-08 15:02:38 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-03-06 15:32:43 +00:00
2026-02-13 09:12:11 +00:00
2026-03-08 11:19:22 +00:00
2026-02-23 22:12:08 +00:00
2026-02-26 23:24:26 +00:00
2026-03-01 13:46:15 +00:00
2026-02-10 15:53:11 +00:00
2026-02-14 00:05:57 +00:00
2026-02-13 09:10:52 +00:00
2026-02-12 03:21:41 +00:00
2026-02-23 23:24:27 +00:00
2026-02-13 09:10:52 +00:00
2026-02-23 09:33:48 +00:00
2026-02-12 03:21:41 +00:00
2026-03-01 17:31:56 +00:00
2026-02-13 09:10:52 +00:00
2026-02-26 09:16:49 +00:00
2026-02-14 00:17:16 +00:00
2026-02-13 09:10:52 +00:00
2026-03-08 11:44:30 +00:00
2026-03-08 13:01:14 +00:00
2026-03-08 15:02:38 +00:00
2026-02-22 16:02:00 +00:00
2026-02-23 09:33:48 +00:00
2026-02-26 12:04:38 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-23 21:14:08 +00:00
2026-03-07 10:58:39 +00:00
2026-03-07 15:06:48 +00:00
2026-02-14 00:16:21 +00:00
2026-03-01 13:46:15 +00:00
2026-02-25 15:24:42 +00:00
2026-02-13 09:10:52 +00:00
2026-02-22 20:56:58 +00:00
2026-03-08 11:54:56 +00:00
2026-02-12 03:21:41 +00:00
2026-02-08 08:16:54 +00:00
2026-02-22 14:24:27 +00:00
2026-02-13 09:10:52 +00:00
2026-03-08 11:11:21 +00:00
2026-03-08 11:11:21 +00:00
2026-03-08 12:11:07 +00:00
2026-03-07 13:15:15 +00:00
2026-03-01 13:46:43 +00:00
2026-03-01 14:41:29 +00:00
2026-02-14 00:16:21 +00:00
2026-03-02 18:23:44 +00:00
2026-02-12 03:21:41 +00:00
2026-02-23 20:23:06 +00:00
2026-02-23 12:54:34 +00:00
2026-02-14 00:12:30 +00:00
2026-02-25 21:08:24 +00:00
2026-03-08 11:11:21 +00:00
2026-02-21 09:40:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-03-02 14:01:26 +00:00
2026-02-22 20:56:58 +00:00
2026-02-13 09:10:52 +00:00
2026-02-23 23:23:28 +00:00
2026-02-13 09:10:52 +00:00
2026-02-27 01:04:42 +00:00
2026-03-08 11:11:21 +00:00
2026-02-13 22:39:34 +00:00
2026-03-08 13:48:17 +00:00
2026-02-25 13:59:49 +00:00
2026-03-01 14:40:19 +00:00
2026-03-02 10:25:34 +00:00
2026-03-06 10:13:40 +00:00
2026-03-06 10:02:04 +00:00
2026-03-06 10:02:04 +00:00
2026-03-01 18:36:38 +00:00
2026-03-01 07:51:07 +00:00
2026-03-02 13:27:34 +00:00
2026-02-13 16:12:39 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-14 00:16:21 +00:00
2026-02-23 23:23:28 +00:00
2026-02-13 16:51:07 +00:00
2026-03-06 10:38:58 +00:00
2026-02-12 03:21:41 +00:00
2026-03-07 15:18:07 +00:00
2026-02-13 09:10:52 +00:00
2026-03-01 17:31:56 +00:00
2026-02-27 00:51:14 +00:00
2026-02-15 10:24:48 +00:00
2026-02-27 16:38:10 +00:00
2026-02-22 15:25:48 +00:00
2026-02-15 10:28:44 +00:00
2026-02-13 23:40:31 +00:00
2026-02-26 23:50:46 +00:00
2026-03-08 11:11:21 +00:00
2026-02-13 09:10:52 +00:00
2026-03-01 14:28:51 +00:00
2026-02-22 16:12:58 +00:00
2026-03-08 13:15:14 +01:00
2026-02-14 00:05:57 +00:00
2026-02-14 00:16:21 +00:00
2026-02-12 17:32:17 +00:00
2026-02-13 09:10:52 +00:00
2026-03-05 21:48:13 +00:00
2026-02-13 09:10:52 +00:00
2026-02-16 15:56:19 +00:00
2026-02-09 20:56:35 +00:00
2026-02-12 03:21:41 +00:00
2026-02-13 09:10:52 +00:00
2026-02-24 18:02:19 +00:00
2026-02-24 19:25:41 +01:00
2026-02-24 18:17:22 +00:00
2026-03-07 11:12:21 +00:00
2026-03-06 10:00:33 +00:00
2026-02-13 09:10:52 +00:00
2026-02-27 00:51:14 +00:00
2026-02-25 15:24:42 +00:00
2026-02-13 09:10:52 +00:00
2026-02-27 00:47:58 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-09 15:14:40 +00:00
2026-03-01 18:38:07 +00:00
2026-02-22 15:25:48 +00:00
2026-03-01 17:37:41 +00:00
2026-02-28 12:57:50 +00:00
2026-02-13 16:51:07 +00:00
2026-03-08 11:11:21 +00:00
2026-02-23 12:28:59 +00:00
2026-02-24 18:17:22 +00:00
2026-02-16 15:47:20 +00:00
2026-02-25 15:24:42 +00:00
2026-03-02 16:37:28 +00:00
2026-02-12 03:21:41 +00:00
2026-03-06 10:40:58 +00:00
2026-03-06 10:42:09 +00:00
2026-02-13 09:10:52 +00:00
2026-02-23 23:09:55 +00:00
2026-03-08 12:05:17 +00:00
2026-03-07 20:53:42 +00:00
2026-03-05 22:00:22 +00:00
2026-02-25 13:03:21 +00:00
2026-03-08 11:11:21 +00:00
2026-02-13 16:51:07 +00:00
2026-02-13 23:33:25 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-03-08 11:11:21 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 23:45:11 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-02-17 04:35:00 +00:00
2026-02-17 11:40:34 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 16:51:07 +00:00
2026-02-13 09:10:52 +00:00
2026-02-13 09:10:52 +00:00
2026-03-08 11:53:45 +00:00
2026-03-07 20:52:44 +00:00
2026-02-09 20:55:53 +00:00
2026-03-07 15:03:11 +00:00
2026-03-08 12:15:39 +00:00
2026-02-13 09:10:52 +00:00
2026-02-12 03:21:41 +00:00
2026-02-24 00:04:42 +00:00
2026-03-07 11:14:49 +00:00
2026-02-25 15:15:24 +00:00
2026-02-14 00:16:21 +00:00
2026-03-07 20:33:10 +00:00
2026-02-17 12:01:40 +00:00
2026-03-08 11:41:33 +00:00
2026-02-12 03:21:41 +00:00
2026-03-08 11:41:18 +00:00
2026-03-01 13:46:15 +00:00
2026-02-24 00:04:42 +00:00
2026-03-01 17:41:50 +00:00
2026-03-08 11:57:37 +00:00
2026-03-01 17:40:54 +00:00
2026-03-08 12:19:29 +00:00
2026-03-01 20:42:57 +00:00
2026-02-23 10:01:07 +00:00