Commit Graph

1594 Commits

Author SHA1 Message Date
semantic-release 0f21479abc 0.92.0
Automatically generated by python-semantic-release
2026-03-08 11:14:23 +00:00
Christian Krakau-Louis 4109bf65d2 Merge pull request #509 from christianlouis/copilot/add-password-reset-functionality
fix(admin-users): restore missing @router.get decorator on get_user endpoint
2026-03-08 12:14:04 +01:00
github-actions[bot] f2d2aaa354 docs(changelog): update changelog [skip ci] 2026-03-08 11:13:43 +00:00
Christian Krakau-Louis f7c550eda7 Merge pull request #527 from christianlouis/copilot/fix-codeql-configuration-issue
ci: fix CodeQL JavaScript language identifier to match main branch config
2026-03-08 12:13:24 +01:00
copilot-swe-agent[bot] 3f8a95d808 ci: fix CodeQL javascript language identifier mismatch
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-08 11:11:34 +00:00
copilot-swe-agent[bot] 962ee09f30 Initial plan 2026-03-08 11:10:14 +00:00
copilot-swe-agent[bot] 9b8eb911c3 fix(admin-users): restore missing @router.get decorator on get_user endpoint
The @router.get("/{user_id:path}") decorator was accidentally dropped from the
get_user function when the /local/... routes were inserted above it in the
previous PR. Without the decorator the function was never registered as a GET
handler, so GET /api/admin/users/<id> matched the PUT/DELETE catch-all routes
and Starlette correctly returned 405 Method Not Allowed instead of 200/403.

Adding the decorator back restores the GET endpoint and fixes the 5 tests that
were failing with 405.

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-08 11:07:37 +00:00
github-actions[bot] d5af0903e2 chore(release): update build metadata files [skip ci] 2026-03-08 11:02:39 +00:00
semantic-release 6c07d70d93 0.91.0
Automatically generated by python-semantic-release
2026-03-08 11:02:37 +00:00
Christian Krakau-Louis db40e85856 Merge pull request #510 from christianlouis/copilot/extend-sql-backup-restore
feat(backup): extend backup/restore to PostgreSQL and MySQL/MariaDB
2026-03-08 12:02:17 +01:00
github-actions[bot] 97616beb11 chore(release): update build metadata files [skip ci] 2026-03-08 10:58:59 +00:00
semantic-release b7bf4f352d 0.90.3
Automatically generated by python-semantic-release
2026-03-08 10:58:56 +00:00
Christian Krakau-Louis da47283e0a Merge pull request #513 from christianlouis/copilot/fix-email-template-issue
fix(email): create missing email template and decouple delivery SMTP from auth SMTP
2026-03-08 11:58:40 +01:00
github-actions[bot] 42dc335747 chore(release): update build metadata files [skip ci] 2026-03-08 10:58:35 +00:00
semantic-release 4de739c566 0.90.2
Automatically generated by python-semantic-release
2026-03-08 10:58:32 +00:00
Christian Krakau-Louis a3218583c6 Merge pull request #514 from christianlouis/copilot/update-pdfa-archival-status
fix(tasks): PDF/A archival status stuck in_progress after finalize_document_storage succeeds
2026-03-08 11:58:14 +01:00
github-actions[bot] 70e188125b chore(release): update build metadata files [skip ci] 2026-03-08 10:53:13 +00:00
semantic-release 52b3f15329 0.90.1
Automatically generated by python-semantic-release
2026-03-08 10:53:10 +00:00
Christian Krakau-Louis 7e2d392791 Merge pull request #511 from christianlouis/copilot/fix-login-button-redirect
fix(auth): prevent post-login redirect to /api/auth/whoami
2026-03-08 11:52:16 +01:00
copilot-swe-agent[bot] ff1310c23e fix(tasks): remove erroneous in_progress log that regressed finalize_document_storage status when PDF/A archival is enabled
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-08 10:10:46 +00:00
copilot-swe-agent[bot] 58c9b5d7f0 fix(email): create missing email template and decouple email destination settings
- Create app/templates/email/default.html (fixes 'default.html not found' error)
- Add DEST_EMAIL_* settings to app/config.py (decoupled from shared EMAIL_* settings)
- Update upload_to_email task to use dest_email_* settings exclusively
- Update _should_upload_to_email() to check dest_email_* settings
- Update config validator, providers, and settings_service for dest_email_*
- Update .env.demo and docs/ConfigurationGuide.md
- Update all tests to use dest_email_* settings where appropriate"

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-08 10:10:18 +00:00
copilot-swe-agent[bot] d36ba88de7 feat(auth): password reset, forgot username, and admin user management for local accounts
- Add /forgot-password and /forgot-username page routes and templates
- Update login page label to "Username or Email" (both already accepted by backend)
- Add "Forgot password?" and "Forgot username?" links to login page
- Add POST /api/auth/forgot-username endpoint + send_forgot_username_email() utility
- Add admin endpoints: PATCH /local/{id}, POST /local/{id}/send-password-reset, POST /local/{id}/set-password
- Update admin_users.html with Edit, Password, and Reset action buttons + modals
- Add 23 tests; fix code review issues (import style, display_name clearing behaviour)
- Update docs/API.md and docs/UserGuide.md

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-08 10:06:08 +00:00
copilot-swe-agent[bot] a0f5ba1799 feat(backup): extend backup and restore to PostgreSQL and MySQL/MariaDB
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-08 09:56:58 +00:00
copilot-swe-agent[bot] 9b45ba62ba Initial plan 2026-03-08 09:53:39 +00:00
copilot-swe-agent[bot] 3aa5364e0c fix(auth): return 401 for API paths in require_login to prevent wrong post-login redirect
The common.js fetch('/api/auth/whoami') probe on every page load was
overwriting the redirect_after_login session key with the API endpoint URL.
After login, users were sent to the JSON endpoint instead of the original page.

Fix: require_login now returns HTTP 401 for any /api/* path, consistent
with REST conventions, and never stores API URLs as the post-login redirect.

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-08 09:51:23 +00:00
copilot-swe-agent[bot] 4857203d08 Initial plan 2026-03-08 09:49:29 +00:00
copilot-swe-agent[bot] 44ea43f9cf chore: update plan to include forgot-username and login label clarification
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-08 09:44:59 +00:00
copilot-swe-agent[bot] 33a02633b7 Initial plan 2026-03-08 09:42:28 +00:00
copilot-swe-agent[bot] 8d65f09400 Initial plan 2026-03-08 09:41:06 +00:00
copilot-swe-agent[bot] aa7d5d7c7c Initial plan 2026-03-08 09:39:11 +00:00
github-actions[bot] 0b28e33fae chore(release): update build metadata files [skip ci] 2026-03-08 09:05:43 +00:00
semantic-release 6a14a7956f 0.90.0
Automatically generated by python-semantic-release
2026-03-08 09:05:40 +00:00
Christian Krakau-Louis bd9da65511 Merge pull request #504 from christianlouis/copilot/add-watch-folder-support 2026-03-08 10:05:10 +01:00
github-actions[bot] c69dc1b8c1 chore(release): update build metadata files [skip ci] 2026-03-08 09:05:01 +00:00
semantic-release 8996715c0c 0.89.1
Automatically generated by python-semantic-release
2026-03-08 09:04:59 +00:00
Christian Krakau-Louis ada6c368e4 Merge pull request #506 from christianlouis/copilot/fix-admin-user-buttons-functionality 2026-03-08 10:04:43 +01:00
github-actions[bot] 0854e901ac chore(release): update build metadata files [skip ci] 2026-03-08 09:04:40 +00:00
semantic-release 31b4d9387b 0.89.0
Automatically generated by python-semantic-release
2026-03-08 09:04:37 +00:00
Christian Krakau-Louis 5e6f44e6bf Merge pull request #507 from christianlouis/copilot/add-backup-and-restore-functionality 2026-03-08 10:04:18 +01:00
semantic-release 0955765525 0.88.2
Automatically generated by python-semantic-release
2026-03-08 09:04:16 +00:00
Christian Krakau-Louis b710a90796 Merge pull request #508 from christianlouis/copilot/fix-local-user-login-issue 2026-03-08 10:03:58 +01:00
github-actions[bot] 0942609d03 chore(release): update build metadata files [skip ci] 2026-03-08 08:08:54 +00:00
semantic-release 7f20dc7782 0.88.1
Automatically generated by python-semantic-release
2026-03-08 08:08:52 +00:00
Christian Krakau-Louis 39c0464fe8 Merge pull request #505 from christianlouis/copilot/update-signup-page-functionality 2026-03-08 09:08:36 +01:00
copilot-swe-agent[bot] 1877fc0000 fix(backup): address code review feedback - accessibility, CSRF, docs, imports
- Move `import os` to top-level in app/views/backup.py
- Fix docstring in BackupRecord model to remove non-existent 'location' field
- Replace browser confirm() dialogs with accessible modal dialog (role=dialog, aria-modal, aria-labelledby)
- Add csrfToken() helper that validates token presence instead of silently falling back to empty string
- Fix aria-live region to remain in DOM (screen-reader friendly) rather than using x-show
- Add Backup & Restore section to docs/ConfigurationGuide.md with retention table
- Add backup env vars to .env.demo with comments

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-07 22:08:47 +00:00
copilot-swe-agent[bot] 2dd1ca0197 feat(backup): add database backup/restore with scheduled retention and admin dashboard
- Add BackupRecord model for tracking backup archives
- Add migration 021_add_backup_records
- Add backup configuration settings (backup_enabled, backup_dir, backup_remote_destination, backup_remote_folder, backup_retain_hourly/daily/weekly)
- Add backup_tasks.py with create_backup, cleanup_old_backups, and helpers
- Register hourly/daily/weekly Celery beat schedules
- Add /api/admin/backup/* REST endpoints (list, create, download, restore, delete, cleanup)
- Add /admin/backup dashboard view and template
- Add backup link to admin dropdown navigation in base.html
- Add backup settings to SETTING_METADATA in settings_service.py
- Add comprehensive test suite (39 tests passing)

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-07 22:03:27 +00:00
copilot-swe-agent[bot] b95f552ed2 fix(auth): prevent None==None admin credential bypass creating phantom admin user
When ADMIN_USERNAME/ADMIN_PASSWORD env vars are not configured, settings
values are None. Python's `None == None` evaluates to True, so any login
request omitting those form fields was authenticated as admin — creating a
phantom 'None@local.docuelevate' profile with admin rights and business plan.

Guard the admin credential check to require both values to be truthy
(non-None, non-empty) before attempting the comparison.

Adds three regression tests covering: both None, both empty-string, and
only password None scenarios.

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-07 21:36:31 +00:00
copilot-swe-agent[bot] c73c9484b8 Initial plan 2026-03-07 21:23:51 +00:00
copilot-swe-agent[bot] 56f346ac20 fix(ui): replace Tailwind v3-only peer toggles with Alpine.js-driven toggles in admin users modal
The "Block this user" and "Complimentary plan" toggle switches were always
greyed out because the app loads Tailwind CSS v2.2.19 from CDN, but the
toggles used Tailwind v3-only features (peer, peer-checked:*, after:content-[''],
arbitrary value syntax like after:top-[2px], etc.).

Replaced both toggles with button[role=switch] elements driven by Alpine.js
@click handlers and :class bindings — fully compatible with Tailwind v2.

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-07 21:22:58 +00:00
copilot-swe-agent[bot] 9a9efae19e feat(watch-folders): add cloud provider watch folders (Dropbox, Drive, OneDrive, Nextcloud, S3, WebDAV)
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-07 21:22:33 +00:00