Commit Graph

39 Commits

Author SHA1 Message Date
Christian Krakau-Louis 592495c1af Merge pull request #171 from christianlouis/copilot/ensure-emails-are-retried
fix: retry failed email forwards; only mark/delete successfully forwarded messages
2026-04-07 13:09:32 +02:00
copilot-swe-agent[bot] 74ef362833 fix: remove duplicate MailProcessor import in test_mail_processor_imap.py
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/15ec037d-0e37-4adb-8249-149dd5375121

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-04-07 10:46:50 +00:00
Christian Krakau-Louis b8aec18add Merge pull request #172 from christianlouis/copilot/fix-deprecated-pydantic-methods
fix: replace deprecated Pydantic .dict() with .model_dump() and fix db.add() AsyncMock warnings
2026-04-07 12:44:37 +02:00
copilot-swe-agent[bot] 31dc059274 fix: replace deprecated .dict() with .model_dump() and fix db.add() AsyncMock warnings
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/ac39d3f7-d4c3-4417-8c33-8e6340a27281

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-04-07 10:38:27 +00:00
copilot-swe-agent[bot] 3dd71cd61d fix: restore missing forward_email signature and reformat with black
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/3c4ae596-6052-4a61-9edd-b668a6cda32e

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-04-07 10:38:00 +00:00
copilot-swe-agent[bot] ff7b50d944 fix: retry failed forwarded emails; only post-process successfully forwarded messages
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/e1fb16dc-0187-4ab9-901a-e0a76de64599

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-04-07 10:32:38 +00:00
Christian Krakau-Louis 4c6fc339d2 Merge branch 'main' into copilot/ensure-full-test-coverage 2026-04-07 12:28:35 +02:00
copilot-swe-agent[bot] 7afa33f375 style: reformat test_gdpr.py and test_gmail_labels.py to fix black CI check
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/63618a76-39b3-43af-b7a8-be2ae3d3ec8a

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-04-05 19:23:22 +00:00
copilot-swe-agent[bot] 149ff3d997 fix: address CodeQL URL substring sanitization false positives in tests
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/8cb47b1c-b744-4212-8b6d-8132d6642d98

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-04-05 15:12:32 +00:00
copilot-swe-agent[bot] 58f9ad72ed test: add 150 new unit tests covering auth, users, notifications, logs, settings, GDPR, and Gmail label utilities
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/8cb47b1c-b744-4212-8b6d-8132d6642d98

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-04-05 15:10:38 +00:00
copilot-swe-agent[bot] c3ee2fc821 test: expand gmail_service.py unit test coverage (10 new tests)
Add tests for uncovered branches:
- inject_email HttpError handling
- get_or_create_label: existing label, create new, HttpError, generic error
- inject_debug_email full flow + dedup of test label
- get_refreshed_token: token changed vs unchanged
- service property lazy initialization via build()

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-29 01:01:33 +00:00
copilot-swe-agent[bot] 4d1451ecde test: add 23 unit tests for provider endpoints
Cover all 9 endpoints in providers.py:
- Provider presets (list all, get by ID, not found)
- Gmail credential CRUD (create, update, get, delete)
- Import labels update
- Gmail authorize URL (success, not configured)
- Debug email (success, no credentials, injection failure)
- OAuth callback (new/update cred, not configured, token exchange
  failure, missing access token, verification failure)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-29 00:45:50 +00:00
copilot-swe-agent[bot] 65318b8c1b Add unit tests for mail account endpoints (30 tests)
Comprehensive test coverage for backend/app/api/v1/endpoints/mail_accounts.py:
- CRUD operations (create, list, get, update, delete)
- Subscription limit enforcement and superuser bypass
- Account toggle with ERROR→ACTIVE status reset
- Pull-now with disabled account guard
- Test connection (new and existing) with decrypt failure handling
- Auto-detect mail settings
- Paginated processing runs and logs

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-29 00:37:44 +00:00
copilot-swe-agent[bot] 4d07d04c63 Add comprehensive unit tests for auth endpoints
22 tests covering:
- Helper functions (_domain_of, _check_domain_allowed, _default_tier, _is_admin_email)
- POST /register (success, duplicate email, domain restriction)
- POST /login (success, user not found, wrong password, inactive, admin auto-promotion)
- POST /google (existing user, new user, unverified email, domain restriction)
- GET /google/authorize-url (correct URL construction)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-29 00:30:38 +00:00
Christian Krakau-Louis 815629910b Merge branch 'main' into copilot/improve-test-coverage-tasks 2026-03-29 01:15:40 +01:00
Christian Krakau-Louis ddad290e82 Merge branch 'main' into copilot/improve-test-coverage-tasks 2026-03-29 01:11:22 +01:00
Christian Krakau-Louis 3cd7a781f6 Merge branch 'main' into copilot/improve-test-coverage-admin-file 2026-03-29 01:10:45 +01:00
copilot-swe-agent[bot] e52f00bc16 Move model imports to module level per code review feedback
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/519609d2-8cd4-44e8-96b0-4e9aaa76b45a

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-29 00:06:19 +00:00
copilot-swe-agent[bot] da9d822afa Add 87 unit tests for admin endpoints (24% → 100% coverage), fix conftest.py fixtures
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/d17e4b46-03fd-450a-af61-1870011377b4

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-29 00:06:02 +00:00
copilot-swe-agent[bot] 983ce75264 Add 40 unit tests for backend/app/workers/tasks.py (9% → 96% coverage)
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/519609d2-8cd4-44e8-96b0-4e9aaa76b45a

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-29 00:04:40 +00:00
copilot-swe-agent[bot] eb47594e53 Add 46 unit tests for mail_processor.py: POP3, forwarding, connection testing, and IMAP edge cases (coverage 42%→98%)
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/4dd19cb3-dd43-4b00-be39-493fa3a35458

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-29 00:03:58 +00:00
copilot-swe-agent[bot] da05016143 Fix IMAP emails appearing empty: accept bytearray from aioimaplib literals
aioimaplib stores RFC822 literal data as bytearray in response.lines,
not bytes. The extraction loop checked isinstance(line, bytes) which
returns False for bytearray, silently dropping every email body and
causing all IMAP emails (T-Online, GMX, etc.) to appear empty.

Fix: accept (bytes, bytearray) and convert to bytes() immediately so
the rest of the pipeline is unaffected. Two new regression tests mirror
the real aioimaplib behaviour by passing bytearray as the literal.

Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/341f5c82-70f8-438d-91ca-8e906a06c400

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-28 22:08:04 +00:00
copilot-swe-agent[bot] 0720901265 fix: drop empty emails, clear stale errors on success, harden IMAP extraction
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/d50e7f06-4c6f-4caa-b5dd-329068e8096c

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-28 21:42:19 +00:00
copilot-swe-agent[bot] 062739a9a1 Fix IMAP UID SEARCH crash and RFC 3501 flag parentheses
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/a44d5455-25ea-49b9-8310-4efd6d467e84

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-28 21:00:44 +00:00
copilot-swe-agent[bot] 3c8bb4bfb6 style: apply black formatting to test_mail_processor_imap.py
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/2f63c66a-f2dd-41f4-aba4-b89b66f9e11b

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-28 20:28:33 +00:00
copilot-swe-agent[bot] 454452a0b6 fix: use UID-based IMAP commands and batch STORE operations to fix T-Online BYE errors
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/d01a05d3-31e1-4aca-b75d-c4e63b7e5af0

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-28 20:20:43 +00:00
Christian Krakau-Louis 64b8e788ce Merge pull request #90 from christianlouis/copilot/add-google-import-labels
Add configurable Gmail import labels with opinionated defaults
2026-03-26 19:36:57 +01:00
copilot-swe-agent[bot] 5711a56569 feat: add configurable gmail import labels
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/4d504045-2740-4bab-b51e-960fe4dafe4b

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 18:20:09 +00:00
copilot-swe-agent[bot] 92d67369e9 feat: rename project to InboxConverge with configurable contact details
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/82f2f361-3513-44e6-991b-db1a19902772

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 18:06:46 +00:00
copilot-swe-agent[bot] 744618fefe Fix test_app_title to match renamed app InboxRescue
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/1411bfd7-f8c6-4e93-8182-a6885ef511d8

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 16:16:28 +00:00
copilot-swe-agent[bot] 702650376e Add database-backed configuration (AppSetting model, ConfigService, settings API)
- Add AppSetting model for key-value settings storage in PostgreSQL
- Create ConfigService with DB-first, env-var-fallback resolution
- Add admin-only /api/v1/settings CRUD endpoints
- Update tasks.py to use ConfigService for SMTP config
- Seed default settings on application startup
- Add 24 unit tests for ConfigService (all passing)

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/ce88d4a8-d8c2-49b3-95a1-30592105a769
2026-03-23 13:35:52 +00:00
copilot-swe-agent[bot] f439f887d0 fix: address multiple code quality improvements across backend and frontend
Backend fixes:
- Fix JWT sub claim: encode as str(user.id), decode with int() cast (python-jose requirement)
- Replace all deprecated datetime.utcnow() with datetime.now(timezone.utc)
- Replace deprecated FastAPI @app.on_event() with modern lifespan context manager
- Replace deprecated Pydantic class Config with model_config = ConfigDict(...)
- Replace deprecated Pydantic .dict() with .model_dump()
- Fix overly broad except (GmailInjectionError, Exception) → except Exception
- Remove unused GmailInjectionError import
- Fix TokenPayload schema sub field type from int to str

Frontend:
- Create frontend/src/lib/api.ts — API client module with auth, user, mail accounts, processing runs APIs
- Add !frontend/src/lib/ to .gitignore negation

Tests:
- Add 3 new JWT tests (sub string encoding, access token type, refresh token type)
- Update test_token_payload_schema for string sub claim
- All 128 tests pass

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/e0b13eb0-8de7-4f02-81e4-e202cbba4608
2026-03-23 13:09:23 +00:00
copilot-swe-agent[bot] d66af4d8ef feat: Milestone 1 Security & Infrastructure improvements
- Add Dependabot configuration for pip, npm, GitHub Actions, Docker
- Update copilot instructions to require TODO.md and CHANGELOG.md updates
- Add unit tests for middleware, security, app factory, and schemas (125 total tests, 57% coverage)
- Update TODO.md with current progress
- Update CHANGELOG.md with all changes

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/2f15a52f-6812-4586-9d5c-a144226c842b
2026-03-23 11:23:37 +00:00
copilot-swe-agent[bot] a918421945 Fix all 33 ruff linting errors causing CI failures
- Remove unused imports (F401) across 17 files
- Fix f-strings without placeholders (F541) in 3 files
- Add noqa: E712 to SQLAlchemy == True comparisons (valid ORM pattern)
- Preserve alembic side-effect import with noqa: F401

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/99c3a25f-3479-473d-ac95-9faaa0ddd55b
2026-03-23 10:38:39 +00:00
copilot-swe-agent[bot] bcbef88803 Fix CI failures: add backend/conftest.py for module resolution and run black formatting
- Add backend/conftest.py that inserts the backend directory into sys.path,
  fixing ModuleNotFoundError when pytest runs from the backend/ directory
  (as CI does with `cd backend && pytest tests/`)
- Run black formatter on all 28 backend files that needed reformatting
- All 53 tests pass with both `pytest tests/` and `python -m pytest tests/`

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/beb47db2-da25-416a-8fb0-c1452a3b22a7
2026-03-23 10:24:28 +00:00
copilot-swe-agent[bot] b05d489563 Fix pre-existing bugs: PBKDF2 import, test function names, salt truncation
- Fix cryptography import: PBKDF2 -> PBKDF2HMAC
- Fix test_security.py: use CredentialEncryption class instead of non-existent functions
- Fix salt generation to include user_id in differentiation
- Remove unavailable poplib3 dependency
- All 53 tests pass

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/de3ef930-a980-4958-8a9d-a2c802918e81
2026-03-22 19:03:22 +00:00
copilot-swe-agent[bot] 40150da3a9 Add Gmail API injection, provider presets, delivery method, and frontend wizard
- Add gmail_service.py with Gmail API users.messages.insert() for direct email injection
- Add DeliveryMethod enum and GmailCredential model to database models
- Add delivery_method field to MailAccount schema and model
- Create providers.py endpoint with 12 provider presets (Gmail, GMX, WEB.DE, Outlook, Yahoo, AOL, T-Online, 1&1/IONOS, Freenet, Posteo, mail.de, iCloud)
- Expand MailServerAutoDetect with 30+ domain mappings
- Update Celery tasks to prefer Gmail API injection, with SMTP fallback
- Add ProviderWizard.tsx frontend component for quick provider setup
- Update AddMailAccountModal.tsx with wizard integration
- Add Google API Python client libraries to requirements.txt
- Add Gmail API config settings
- Add unit tests for Gmail service and provider presets

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/de3ef930-a980-4958-8a9d-a2c802918e81
2026-03-22 19:00:30 +00:00
copilot-swe-agent[bot] da4d501acb fix: Address code review feedback - datetime, event_loop, and readability
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-06 22:05:09 +00:00
copilot-swe-agent[bot] e64f0f2705 feat: Add security hardening, agentic coding infrastructure, and test framework
- Add SECRET_KEY and ENCRYPTION_KEY validation on startup
- Implement security headers middleware (X-Frame-Options, CSP, HSTS)
- Add CSRF protection middleware
- Create comprehensive GitHub issue templates and PR template
- Add Makefile with common development tasks
- Configure pre-commit hooks (black, ruff, mypy, bandit, detect-secrets)
- Create docs/CODING_PATTERNS.md with best practices
- Create docs/ERRORS.md documenting all error codes
- Add Architecture Decision Records (ADR) for Celery and Fernet encryption
- Create CHANGELOG.md for version tracking
- Set up pytest test infrastructure with fixtures and factories
- Add sample unit tests for security and config validation
- Create CI/CD workflows (test, lint, security)
- Add comprehensive TODO.md with milestones and progress tracking

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-02-06 22:01:11 +00:00