Commit Graph

53 Commits

Author SHA1 Message Date
copilot-swe-agent[bot] 69de187aab fix: add Alembic migration for notification_configs columns and create /logs and /admin/logs pages
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/fccf042a-a3d9-4eff-a897-9bb3650629cc

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 21:17:55 +00:00
copilot-swe-agent[bot] 412e7bc6f5 fix: make NotificationConfigBase.name optional with default 'My Notification' to match DB default
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/7640aaa6-61f4-4c65-8eb7-f33c2d3eb755

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 19:34:38 +00:00
copilot-swe-agent[bot] 896329ccb7 Fix black lint, fix /processing-runs 404s, add semantic release and GitOps deploy
Agent-Logs-Url: https://github.com/christianlouis/InboxConverge/sessions/3fdf6219-3e1f-4867-b74d-efb6e4fe7e72

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 19:17:11 +00:00
Christian Krakau-Louis b824095bf5 Merge branch 'main' into copilot/add-apprise-alerting-capabilities 2026-03-26 19:39:27 +01: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] 0bc08b9825 feat: add Apprise alerting capabilities with user and admin notification channels
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/858e72a6-5282-4ce8-b38a-db4b9e2e6f65

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 18:25:21 +00:00
copilot-swe-agent[bot] 9314c38775 chore: address review follow-ups
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:24:00 +00:00
Christian Krakau-Louis 56c62f8e6c Merge pull request #87 from christianlouis/copilot/add-logging-and-reporting-capabilities
feat: Deep processing logs & reporting with GDPR-compliant masking
2026-03-26 19:20:59 +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] fd45c838fc feat: Add logging and reporting capabilities with GDPR compliance
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/d6e65ca9-f07f-43a2-bac2-09eb44588ded

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 18:12:22 +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] bbd2febfc1 Add Apprise alerting capabilities (backend)
- Add name + apprise_url columns to NotificationConfig model
- Add AdminNotificationConfig model for system-wide alert channels
- Create NotificationService with send_user_notification,
  send_admin_notification, and test_notification helpers
- Replace stub notifications.py with full CRUD + /test endpoint
- Add admin notification config CRUD + /test to admin.py
- Update NotificationConfig schemas: name required, apprise_url
  optional, config optional (default {})
- Add AdminNotificationConfig* schemas
- Integrate send_user_notification into process_mail_account task
  for Gmail revocation, forwarding failures, and exceptions
- Update CHANGELOG.md

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

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 18:06:05 +00:00
copilot-swe-agent[bot] 3dcb700e68 Fix: auto-promote ADMIN_EMAIL user to superuser on application startup
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/1cafe07b-4978-4609-992d-59bffb30b208

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 17:14:03 +00:00
copilot-swe-agent[bot] ca87abce0a feat: add Prometheus metrics and Grafana dashboard for system health monitoring
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/11ac4536-eaad-44fe-920c-e8306918f06f

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 16:31:23 +00:00
copilot-swe-agent[bot] d4aa353383 B2C/B2B split: DEFAULT_USER_TIER, ALLOWED_DOMAINS, zero-price filter, InboxRescue branding & pricing page
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/98c1f90b-0287-4908-a0be-ad066c453cc5

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 16:10:39 +00:00
copilot-swe-agent[bot] 53334402aa wip: plan for B2C/B2B split requirements
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/98c1f90b-0287-4908-a0be-ad066c453cc5

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 16:04:29 +00:00
copilot-swe-agent[bot] 7971d3f76a Fix subscription limits; seed Free/Good/Better/Best default plans
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/98c1f90b-0287-4908-a0be-ad066c453cc5

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 16:00:56 +00:00
copilot-swe-agent[bot] 979b7b6cec Add admin interface, auto-promote admin email, fix sender name
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/98c1f90b-0287-4908-a0be-ad066c453cc5

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-26 15:53:24 +00:00
copilot-swe-agent[bot] 30d24c96f2 Fix offset-naive/offset-aware datetime subtraction in process_mail_account
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/ff7ce94c-aeb6-4577-a87c-77fcdcb414f7
2026-03-26 13:00:57 +00:00
Christian Krakau-Louis c404afa539 Merge branch 'main' into copilot/fix-mailbox-parameter-editing 2026-03-26 11:47:37 +01:00
Christian Krakau-Louis aa3f188b6f Merge pull request #81 from christianlouis/copilot/add-debug-functionality-gmail-integration
security: upgrade python-jose 3.3.0 → 3.4.0 (algorithm confusion with OpenSSH ECDSA keys)
2026-03-26 11:45:20 +01:00
copilot-swe-agent[bot] 8cf0d101bf Make all mailbox fields editable; pre-populate username from API response
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/20fa7a89-23e5-462c-8b4d-9c6cdb4d0501
2026-03-25 23:06:04 +00:00
copilot-swe-agent[bot] 5c40415590 Add Gmail debug email functionality
- GmailService: add get_or_create_label() and inject_debug_email() methods
- providers.py: add POST /providers/gmail/debug-email endpoint
- api.ts: add GmailDebugEmailResponse interface and gmailApi.sendDebugEmail()
- settings/page.tsx: add Send Debug Email button with success/error feedback
- Update CHANGELOG.md and docs/TODO.md

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/c609ede7-b9d7-4ab1-acdb-8d29164066cc
2026-03-25 23:00:47 +00:00
copilot-swe-agent[bot] 20170f2f2d Fix mailbox edit form: pre-populate fields, prevent credential overwrite, lock immutable settings
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/20fa7a89-23e5-462c-8b4d-9c6cdb4d0501
2026-03-25 23:00:00 +00:00
copilot-swe-agent[bot] fb9b3893c4 Fix Exception terminating connection in Celery workers by disposing engine after each task
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/3960b056-8c90-407f-8024-c8abd2e479fb
2026-03-25 22:52:14 +00:00
copilot-swe-agent[bot] b46fabd8cd feat: expand Gmail OAuth scopes, unify Google callback URL, store Gmail creds on login
- Add gmail.readonly to GMAIL_SCOPES (gmail_service) and GMAIL_API_SCOPES (providers)
  so users().getProfile() no longer returns 403 insufficientPermissions
- Consolidate Gmail scope list: GMAIL_SCOPES in gmail_service.py is the single
  source of truth; auth.py and providers.py now import and spread it
- Add include_granted_scopes=true to both Gmail and login authorize URLs so
  scope additions take effect for previously-connected users
- Add state=gmail_connect to the Gmail authorize URL; the shared /auth/callback
  page routes to gmailApi.saveCallback() when this state is present, otherwise
  falls through to the normal login flow
- Google Sign-In authorize URL now requests all six scopes (openid, email,
  profile + 3 Gmail scopes) with access_type=offline, prompt=consent, and
  include_granted_scopes=true
- POST /auth/google now stores Gmail credentials automatically after sign-in
  (non-fatal: login succeeds even if credential storage fails)
- Settings Connect Gmail button now uses /auth/callback instead of
  /auth/gmail-callback - only ONE redirect URI needed in Google Cloud Console
- URL-encode scope parameter in both authorize URL builders
- Update auth_service._register_google scope to include all Gmail scopes
- Update CHANGELOG.md and docs/TODO.md

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/d6e2de8b-088d-46f3-8127-137245c3ecdd
2026-03-25 19:53:46 +00:00
copilot-swe-agent[bot] caa8eecd0a feat: Gmail OAuth flow, per-user SMTP, message dedup, account disable toggle
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/b77800ca-b452-4427-b0bf-63403e906916
2026-03-25 11:34:52 +00:00
copilot-swe-agent[bot] a15216c630 feat: add account toggle, message dedup tracking, SMTP per-user and Gmail OAuth flow plan
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/b77800ca-b452-4427-b0bf-63403e906916
2026-03-25 11:20:22 +00:00
copilot-swe-agent[bot] fbfb4f0f41 Fix DBAPIError: use DateTime(timezone=True) and timezone-aware defaults in database models
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/608dd6ae-4c0c-4076-a2e3-dec62c9923f3
2026-03-24 19:05:38 +00:00
copilot-swe-agent[bot] 1f2aa54e43 fix: disable asyncpg prepared statement cache to prevent ProgrammingError at startup
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/e0178422-af66-4a2c-9cfe-13d750965c1a
2026-03-24 16:09:42 +00:00
copilot-swe-agent[bot] c7686a49ea fix: auto-create DB tables at startup to fix UndefinedTableError on first boot
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/148f7d4a-586e-4c3a-9d56-187b41daf277
2026-03-24 15:38:49 +00:00
Christian Krakau-Louis c8786753ff Merge pull request #60 from christianlouis/code-health-unused-imports-models-init-5127216271700083315
🧹 [code health improvement] Silence unused imports in models/__init__.py and fix frontend ESLint dependency
2026-03-23 17:28:52 +01:00
Christian Krakau-Louis a85ecd713f Merge pull request #59 from christianlouis/perf-optimize-provider-preset-lookup-10373218421313288605
 Optimize provider preset lookup by ID
2026-03-23 17:28:41 +01:00
google-labs-jules[bot] 3a58410c6a 🧹 [code health improvement] Silence unused imports in models/__init__.py and fix frontend ESLint dependency
- Updated `backend/app/models/__init__.py` to use explicit re-exports (e.g., `from app.models.database_models import User as User`) to satisfy static analysis tools (PEP 484).
- Alphabetized the imports and `__all__` list in `backend/app/models/__init__.py` for better maintainability.
- Fixed a broken dependency specification in `frontend/package.json` where `eslint` was set to `^10` (which does not exist yet), downgrading it to `^9` to resolve a CI blocker.

🎯 **What:** The code health issue addressed is "unused imports" in `models/__init__.py` being flagged by static analysis tools, and an invalid ESLint version in the frontend.
💡 **Why:** This improves maintainability and silences linting noise while maintaining the package's public API. Correcting the ESLint version was necessary to unblock CI.
 **Verification:** Confirmed via code review and manual inspection. The explicit re-export pattern is the standard, idiomatic way to handle this in Python.
 **Result:** Cleaner backend code and a functional frontend CI environment.

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-23 16:19:01 +00:00
google-labs-jules[bot] dd70a16443 Optimize provider preset lookup by ID
Replaced O(n) list iteration with O(1) dictionary lookup in the `get_provider_preset` endpoint.
A mapping (`PROVIDER_PRESETS_MAP`) is initialized at module load time to enable constant-time retrieval.

💡 **What:** Optimized retrieval of mail provider presets.
🎯 **Why:** To improve efficiency and scalability of the lookup process.
📊 **Measured Improvement:** Baseline (list lookup) took ~0.54s for 1M iterations, while optimized (dict lookup) took ~0.12s, resulting in a ~77% performance improvement for lookups.

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-23 16:18:50 +00:00
Christian Krakau-Louis 513b62fa6d Merge pull request #58 from christianlouis/security-fix-cors-methods-15224374223607102322
🔒 Restrict overly permissive CORS allow_methods
2026-03-23 17:06:18 +01:00
google-labs-jules[bot] a9c2d37336 Restrict overly permissive CORS allow_methods in backend/app/main.py.
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-23 14:36:57 +00:00
google-labs-jules[bot] 7f04af53f2 🧹 [code health improvement] Silence unused imports in models/__init__.py
Updated `backend/app/models/__init__.py` to use explicit re-exports (e.g., `from app.models.database_models import User as User`) to satisfy static analysis tools and improve code health. This follows PEP 484 and silences "unused import" warnings while maintaining the public API for the models package.

🎯 **What:** The code health issue addressed is unused imports in `models/__init__.py` being flagged by static analysis tools.
💡 **Why:** This improves maintainability and silences noise in linting reports without breaking the package's public API.
 **Verification:** Confirmed via code review and manual inspection that models are still correctly exported and correctly used in other parts of the codebase.
 **Result:** The codebase is now cleaner and follows Python best practices for package exports.

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-23 14:36:24 +00:00
copilot-swe-agent[bot] 2d3b1065b5 Address code review feedback: improve logging, fix redundant check, clarify docs
- Log exceptions at warning level in ConfigService (not debug)
- Include exc_info=True for startup seed failure logging
- Remove redundant `is_secret is not None` guard
- Clarify ★ markers in README environment variables docs

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:43:11 +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] 5fd0914b07 fix: replace passlib with direct bcrypt calls to fix bcrypt 5.x incompatibility
passlib 1.7.4 is incompatible with bcrypt>=5.0.0. When passlib initializes
its bcrypt backend, it calls detect_wrap_bug() with a >72-byte test password.
bcrypt 5.0.0 raises ValueError for such passwords, crashing the initialization
before any user code runs.

Fix: replace passlib[bcrypt] with direct bcrypt==4.3.0 usage:
- security.py: use bcrypt.hashpw()/checkpw() instead of CryptContext
- requirements.txt: replace passlib[bcrypt]==1.7.4 with bcrypt==4.3.0

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/a2327bbe-cc06-4c1f-9010-380fb0fd7d67
2026-03-23 11:07:25 +00:00
copilot-swe-agent[bot] 27c50e49cf Fix all mypy and eslint errors, add copilot lint instructions
Backend (mypy - 56 errors fixed):
- database.py: Fix async generator return type to AsyncGenerator
- database_models.py: Add type annotations for SQLEnum columns
- middleware.py: Use explicit Optional for exempt_paths parameter
- mail_processor.py: Fix type narrowing in fetch_emails, add Dict type annotation for KNOWN_PROVIDERS
- users.py, auth.py, providers.py, tasks.py: Add type: ignore comments for SQLAlchemy Column assignment patterns

Frontend (eslint - 3 errors, 2 warnings fixed):
- login/page.tsx: Replace any with unknown + type narrowing, prefix unused vars with underscore
- register/page.tsx: Replace any with unknown + type narrowing

Add .github/copilot-instructions.md with lint-check requirements

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/dac7ab78-fe27-4fe4-890f-32c6c1c6d881
2026-03-23 10:48:16 +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] 681e0582f6 Address code review: fix imports, salt hashing, conditional delivery message
- Move asyncio import to module level in gmail_service.py
- Move datetime import to module level in providers.py
- Use hashlib.sha256 for per-user salt generation (no truncation risk)
- Make delivery method message conditional in AddMailAccountModal

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:05:41 +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