github-actions[bot]
d6fb78715a
docs(changelog): update changelog [skip ci]
2026-03-10 21:51:54 +00:00
Christian Krakau-Louis
40274f00d5
Merge pull request #582 from christianlouis/copilot/enhance-code-coverage-100
...
test(views): boost view module coverage — 27/29 files at 100%
2026-03-10 22:51:33 +01:00
github-actions[bot]
2375758a39
chore(release): update build metadata files [skip ci]
2026-03-10 21:51:21 +00:00
semantic-release
12c70b802a
0.115.0
...
Automatically generated by python-semantic-release
2026-03-10 21:51:18 +00:00
Christian Krakau-Louis
086793c05a
Merge pull request #579 from christianlouis/copilot/add-audit-logging-with-tamper-detection
...
fix(migrations): rebase audit_logs migration onto current main
2026-03-10 22:51:00 +01:00
Christian Krakau-Louis
f7dface365
Merge branch 'main' into copilot/add-audit-logging-with-tamper-detection
2026-03-10 22:41:26 +01:00
copilot-swe-agent[bot]
6e2e4a830f
fix(migrations): rebase audit_logs migration onto main's 027_ensure_shared_links_table
...
- Add 027_ensure_shared_links_table.py from main branch
- Renumber 027_add_audit_logs → 028_add_audit_logs
- Update down_revision to chain from 027_ensure_shared_links_table
- Restore all model imports in migrations/env.py (were dropped in previous PR)
- Restore shared_links in db_migrate.py _TABLE_ORDER
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-10 21:34:15 +00:00
github-actions[bot]
ba17067012
chore(release): update build metadata files [skip ci]
2026-03-10 09:28:50 +00:00
semantic-release
45713f2de9
0.114.1
...
Automatically generated by python-semantic-release
2026-03-10 09:28:47 +00:00
Christian Krakau-Louis
70e5391649
Merge pull request #589 from christianlouis/copilot/fix-expire-stale-shared-links
2026-03-10 10:28:28 +01:00
copilot-swe-agent[bot]
6fb1df1aad
test(views): boost coverage for 11 view modules toward 100%
...
Adds tests/test_views_coverage_boost.py with 37 tests covering:
- api_tokens, notifications, shared_links, share, plans views (template rendering)
- imap_accounts view (helper functions + route with mocked owner)
- integrations view (DB queries, tier logic, HTTP/generic exception handling)
- general view (multi-user subscription branch with signed session cookie)
- filemanager view (PB formatting, broken symlink stat errors in scan/walk)
- files view (pipeline step filtering, dedup toggle, ValueError in commonpath)
- help view (no-session branch, logged-in user Zammad widget population)
Coverage improvements (full suite):
- 27 of 29 view modules now at 100% (was 18 of 29)
- imap_accounts: 30.95% → 100%
- integrations: 82.09% → 100%
- filemanager: 96.63% → 100%
- help: 96% → 100%
- plans: 86.67% → 100%
- api_tokens/notifications/shared_links/share: 88-90% → 100%
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-10 00:31:28 +00:00
copilot-swe-agent[bot]
c8987d966b
test(views): add comprehensive coverage tests for 11 view modules
...
Adds tests/test_views_coverage_boost.py with 35 tests covering:
- api_tokens, notifications, shared_links, share, plans (template render)
- imap_accounts (helper functions + route with owner)
- integrations (DB queries, tier logic, error handling)
- general (multi-user subscription branch)
- filemanager (PB formatting, broken symlink stat errors)
- files (pipeline step filtering, dedup, ValueError in commonpath)
- help (no-session branch)
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-10 00:11:30 +00:00
copilot-swe-agent[bot]
289dcc375c
fix(db): add migration to create shared_links table for databases that skipped 025
...
Migration 025_add_shared_links was inserted into the Alembic chain
(between 024_add_api_tokens and 025_add_user_notifications) after some
databases had already been migrated past that point. Those databases
never had the shared_links table created, causing OperationalError when
the expire-shared-links scheduled task runs or when users try to create
shared links.
This commit:
- Adds migration 027_ensure_shared_links_table that idempotently creates
the table if it doesn't exist
- Updates migrations/env.py to import all models for autogenerate support
- Adds shared_links to db_migrate.py _TABLE_ORDER for proper migration
ordering
- Adds a regression test verifying the fix
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-10 00:01:33 +00:00
copilot-swe-agent[bot]
653c137222
fix(audit): address code review - header validation, touch targets, env.demo cleanup
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 23:33:43 +00:00
copilot-swe-agent[bot]
3b491ea84c
docs(audit): add SIEM configuration to docs, .env.demo, and settings metadata
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 23:29:12 +00:00
copilot-swe-agent[bot]
35db9f88de
feat(audit): add comprehensive audit logging with SIEM integration
...
- Add AuditLog model with append-only design (timestamp, user, action, resource, IP, details, severity)
- Add audit_service.py with record/query helpers and SIEM forwarding (Syslog RFC 5424, HTTP/webhook)
- Add /api/audit-logs REST endpoints with filtering and pagination
- Add /admin/audit-logs viewer UI with real-time filters
- Add SIEM config settings (syslog, HTTP for Splunk HEC/Logstash/Grafana Loki)
- Add Alembic migration 027_add_audit_logs
- Add navigation link in admin menu
- Add comprehensive tests (20 tests covering model, service, SIEM, API, view)
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 23:18:18 +00:00
copilot-swe-agent[bot]
73295cad33
Initial plan
2026-03-09 23:15:51 +00:00
copilot-swe-agent[bot]
9ee3249146
Initial plan
2026-03-09 23:06:22 +00:00
copilot-swe-agent[bot]
7685b787f2
Initial plan
2026-03-09 23:04:32 +00:00
github-actions[bot]
e709f2646c
chore(release): update build metadata files [skip ci]
2026-03-09 23:01:00 +00:00
semantic-release
d5ed512612
0.114.0
...
Automatically generated by python-semantic-release
2026-03-09 23:00:57 +00:00
Christian Krakau-Louis
5fd3f0661b
Merge pull request #577 from christianlouis/copilot/create-user-auth-workflow
...
fix(templates): remove orphan `</div>` in google_drive.html breaking HTML accessibility lint
2026-03-10 00:00:39 +01:00
copilot-swe-agent[bot]
256d9cb674
fix(templates): remove orphan </div> in google_drive.html causing HTML accessibility lint failure
...
The extra </div> at line 260 (before the {% endif %} closing the admin
auth-method block) was introduced when the per-user OAuth wizard PR
restructured the admin section. Removing it balances the div tree so
that the outer container div is properly closed by line 427.
djlint frontend/templates/ --lint now reports 0 errors across 58 files.
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 21:46:38 +00:00
github-actions[bot]
5d5784f069
chore(release): update build metadata files [skip ci]
2026-03-09 21:30:44 +00:00
semantic-release
91549c8f5e
0.113.0
...
Automatically generated by python-semantic-release
2026-03-09 21:30:41 +00:00
Christian Krakau-Louis
4555cdb7df
Merge pull request #576 from christianlouis/copilot/add-scheduled-batch-processing
...
feat: scheduled batch processing — 8 admin-managed jobs, DB-driven beat schedule, 100% coverage
2026-03-09 22:30:20 +01:00
copilot-swe-agent[bot]
0529ae53ff
fix: 100% coverage, WCAG accessibility fixes, and documentation updates for per-user OAuth wizards
...
Test coverage:
- Add config=None branch test for dropbox, onedrive, google_drive views (100% coverage)
- Add WATCH_FOLDER source-type test (folder_path vs folder key)
- Add integration-not-found fallback-to-admin-mode test
WCAG 2.1 AA fixes:
- Add aria-labelledby="modalTitle" to role="dialog" modals in setup templates
- Add aria-hidden="true" to decorative SVGs in callback templates
- Add role="status" aria-label="Loading" to spinner divs
- Add aria-live="polite" to processing-message and success/folder-selection regions
- Add role="alert" aria-live="assertive" to error containers
- Update "Return to Setup" link to preserve integration_id in user mode
Docs: update DropboxSetup.md, GoogleDriveSetup.md, OneDriveSetup.md with per-user OAuth flow section
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 20:19:19 +00:00
copilot-swe-agent[bot]
ec77c51cb5
fix: code standards audit — 100% coverage, Pydantic v2 model_config, asyncio.run(), targeted edge-case tests
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 19:00:13 +00:00
copilot-swe-agent[bot]
2d01e71afd
test(views): add user-mode coverage tests and fix dashboard helper duplication
...
- Add tests for user-mode with invalid JSON config (covers exception handling path)
- Add tests for user-mode with valid config (verifies folder path pre-population)
- Extract _watchFolderOAuthSource() helper to reduce isOAuthType/oauthLink duplication
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 18:32:04 +00:00
copilot-swe-agent[bot]
5bc1fac79c
feat(tasks): add 5 additional scheduled jobs (expire_shared_links, prune_processing_logs, prune_old_notifications, backfill_missing_metadata, sync_search_index)
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 18:25:26 +00:00
copilot-swe-agent[bot]
c71f33a214
feat(integrations): add per-user OAuth wizard with user-mode for Dropbox, OneDrive, Google Drive
...
- Add user_mode to dropbox/onedrive/google_drive setup views that loads integration config
- Show user-friendly auth wizard when integration_id is provided (user mode)
- In user mode: show integration name, current folder, back-to-integrations link
- In callback templates: only save credentials (not config) for user integrations
- In integrations dashboard: show Authorize/Re-Authorize button for all OAuth types
- Add WATCH_FOLDER OAuth support: detect source_type in config for auth button
- isOAuthType() and oauthLink() now accept full integration object
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 18:24:07 +00:00
copilot-swe-agent[bot]
c2d56d7475
feat(tasks): add scheduled batch processing infrastructure (model, migration, tasks, API, view, template)
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 18:01:34 +00:00
copilot-swe-agent[bot]
80b1b01beb
Initial plan
2026-03-09 17:58:17 +00:00
copilot-swe-agent[bot]
07d90758b8
Initial plan
2026-03-09 17:52:43 +00:00
github-actions[bot]
04d51bab22
chore(release): update build metadata files [skip ci]
2026-03-09 12:01:14 +00:00
semantic-release
8fa3e9bc4a
0.112.0
...
Automatically generated by python-semantic-release
2026-03-09 12:01:11 +00:00
Christian Krakau-Louis
2132e7e8d1
Merge pull request #575 from christianlouis/copilot/fix-imap-integration-ui-issues
...
feat(integrations): IMAP Gmail labels/delete controls, Watch Folder cloud sources, and comprehensive test coverage
2026-03-09 13:00:50 +01:00
copilot-swe-agent[bot]
9a342af609
fix(imap): normalize CRLF line endings to LF in imap_tasks.py
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 09:42:20 +00:00
copilot-swe-agent[bot]
1741ab1011
test(tasks): add comprehensive tests for per-user cloud scan functions and gmail_apply_labels
...
Add 68 new unit tests covering:
- _scan_user_s3_folder: 10 tests (bucket config, credentials, client creation,
pagination, download, cache, file types, delete, error handling)
- _scan_user_dropbox_folder: 9 tests (credentials, folder path, auth, listing,
download, cache, non-file entries, delete, download failure)
- _scan_user_google_drive_folder: 8 tests (credentials JSON, folder ID, auth,
download, cache, delete, download/listing failures)
- _scan_user_onedrive_folder: 10 tests (credentials, folder path, token exchange,
download, folders, cache, download URL, delete, download/listing failures)
- _scan_user_nextcloud_folder: 9 tests (settings, PROPFIND, XML parse, download,
self-entry, cache, delete, download failure, absolute href)
- _scan_user_webdav_folder: 9 tests (URL config, PROPFIND, XML parse, download,
directories, cache, delete, download failure, absolute href)
- Dispatch tests for google_drive, onedrive, nextcloud, webdav source types
- gmail_apply_labels forwarding and default-to-true in IMAP integration
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-03-09 09:29:43 +00:00
copilot-swe-agent[bot]
4acad71c8f
fix: address code review feedback - fix type hint and rename test
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 02:38:50 +00:00
copilot-swe-agent[bot]
8c62a6b714
test(integrations): add tests for gmail_apply_labels and cloud watch folder dispatch
...
docs(integrations): update UserGuide and ConfigurationGuide for new IMAP and Watch Folder features
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 02:35:30 +00:00
copilot-swe-agent[bot]
79fc11b452
test: add tests for gmail_apply_labels=False and cloud source type dispatching
...
Add test_gmail_labels_disabled_when_gmail_apply_labels_false to verify
that Gmail star/label operations are skipped when gmail_apply_labels=False.
Add four tests to TestPullUserIntegrationWatchFolders for cloud source
type dispatching: S3, Dropbox, unknown provider, and explicit local type.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-03-09 02:26:10 +00:00
copilot-swe-agent[bot]
e7d1289f1b
feat(integrations): add IMAP Gmail labels/delete and Watch Folder cloud source support
...
- Add delete_after_process and gmail_apply_labels checkboxes to IMAP integration UI
- Add source_type selector (Local/S3/Dropbox/Google Drive/OneDrive/Nextcloud/WebDAV) to Watch Folder UI
- Add per-source-type config and credential fields for watch folders
- Add delete_after_process checkbox to Watch Folder settings
- Fix field name mismatch (path → folder_path) in Watch Folder UI
- Update pull_inbox() to accept and respect gmail_apply_labels parameter
- Update _pull_user_integration_imap() to read gmail_apply_labels from config
- Add per-user cloud scanning functions for S3, Dropbox, Google Drive, OneDrive, Nextcloud, WebDAV
- Update _pull_user_integration_watch_folders() to dispatch based on source_type
- Update IMAP and WATCH_FOLDER config shape documentation in models.py
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 02:15:03 +00:00
copilot-swe-agent[bot]
61e402f785
Initial plan
2026-03-09 01:52:58 +00:00
github-actions[bot]
5f548e29fa
chore(release): update build metadata files [skip ci]
2026-03-09 01:47:12 +00:00
semantic-release
aea9e227db
0.111.1
...
Automatically generated by python-semantic-release
2026-03-09 01:47:09 +00:00
Christian Krakau-Louis
b71b18d184
Merge pull request #574 from christianlouis/copilot/fix-cors-header-test-error
...
fix(migrations): resolve duplicate Alembic heads causing test INTERNALERROR
2026-03-09 02:46:51 +01:00
copilot-swe-agent[bot]
c374ba3ae9
fix(migrations): resolve duplicate Alembic heads causing test failures
...
Two migration files (025_add_shared_links and 025_add_user_notifications)
both had down_revision pointing to 024_add_api_tokens, creating multiple
migration heads. This caused alembic stamp/upgrade head to fail with
'Multiple heads are present; please specify a single target revision'
whenever init_db() ran (e.g. in TestClient fixtures).
Fix: chain 025_add_user_notifications from 025_add_shared_links so the
migration history is linear:
024_add_api_tokens → 025_add_shared_links → 025_add_user_notifications
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-09 01:11:26 +00:00
copilot-swe-agent[bot]
32e73727ad
Initial plan
2026-03-09 00:47:56 +00:00
github-actions[bot]
e4157e3373
chore(release): update build metadata files [skip ci]
2026-03-09 00:06:00 +00:00