Enhance the coverage and robustness of the `generate_api_token` helper
in `app/api/api_tokens.py` by introducing three unit tests.
The new tests verify:
- The exact character length of the generated string based on `TOKEN_BYTES`.
- The character set strictly adheres to URL-safe characters and the expected `TOKEN_PREFIX`.
- `secrets.token_urlsafe` is explicitly called with `TOKEN_BYTES`.
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Adds `--` separator to `rclone copy`, `mkdir`, and `link` commands in `upload_with_rclone.py`. This explicitly tells rclone to stop processing options and treat subsequent arguments strictly as positional arguments, preventing malicious user-controlled paths (starting with `-`) from being executed as arbitrary command flags.
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Adds a specific unit test `test_hash_token_known_value` to `tests/test_api_tokens.py` to assert that the `hash_token` pure function accurately computes the expected PBKDF2 digest for a known input string. This provides a hard check against any accidental regressions to the cryptographic hashing logic, iteration counts, or salt values used.
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Extracted file chunk saving and duplicate detection logic into separate helper functions (`_save_upload_file_chunks` and `_check_for_exact_duplicate`) to improve readability and maintainability of the `ui_upload` endpoint in `app/api/files.py`.
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
The function handling the `/google-drive/save-settings` endpoint was incorrectly named `save_dropbox_settings`, likely due to a copy-paste error. This commits renames it to `save_google_drive_settings` and updates all the tests referencing it.
Tested using standard procedures, although test execution resulted in missing dependency errors due to lack of network access in the environment.
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Adds test coverage for the 500 Internal Server Error path when deleting
a saved search fails due to a database error. The 404 path was already
covered, so this brings full coverage to the deletion error handling in
app/api/saved_searches.py.
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Added the `--` argument before positional arguments in rclone subprocess calls (link, mkdir, copy) in `app/tasks/upload_with_rclone.py`. This ensures that filenames or destinations starting with a hyphen are treated as paths rather than unintended command-line flags.
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Refactor `app/api/audit_logs.py` to use the `Annotated` type hint pattern while maintaining default values for dependencies using module-level singletons.
- Resolves B008: Function-call in default argument.
- Maintains compatibility with decorators (e.g., `@require_login`) that call the function without explicitly providing the `db` argument.
- Uses standard FastAPI patterns for query parameters with constant defaults.
- No changes to API runtime behavior.
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
- Add NODE_NO_WARNINGS=1 to all eas.json build profiles (development,
preview, production) to suppress [DEP0169] url.parse() deprecation
warnings emitted by EAS CLI when the build image's system Node is 22+
- Add NODE_NO_WARNINGS=1 env to both EAS Cloud Workflow jobs
(.eas/workflows/create-builds.yml) with explanatory comments
- Fix outdated Node.js prerequisite in docs/MobileApp.md (was "18 or
later", now "20.19.4 or later" with nvm guidance)
- Add troubleshooting sections in docs/MobileApp.md and mobile/README.md
covering both the "Session expired Local session" error (Apple ID
session expiry + App Store Connect API key recommendation) and the
[DEP0169] Node.js deprecation warning
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Replace all hardcoded English strings in the admin file manager
template with _() translation calls and add 47 new admin_files.*
keys to en.json.
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Add 108 admin_plans.* translation keys to en.json and update
admin_plans.html to use _() for all static text and window.__i18nAdminPlans
for dynamic Alpine.js / JavaScript strings.
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
- Rewrite README.md to reflect current state of the project:
- Updated Overview with all 12 storage, 7 AI, 6 OCR providers
- Comprehensive Features section (mobile, CLI, browser ext, pipelines, etc.)
- Updated Workflow with all ingestion channels and distribution targets
- Expanded Documentation index with all doc links organized by category
- Updated Tech Stack table (Meilisearch, MkDocs, Expo, etc.)
- Added Kubernetes/Helm quick start
- Added status-view screenshot
- Updated dependency licenses table
- Updated docs/UserGuide.md with cross-references to Mobile App, CLI,
Browser Extension, and API docs
- Expanded docs/Troubleshooting.md from 175 to 300+ lines with new
sections for Search, Pipelines, Mobile App, CLI, Performance, and
updated all existing sections with current information
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
Add 119 new admin_users.* translation keys to en.json and update
admin_users.html to use _() for all static HTML strings, inline
Alpine.js x-text translations, and a window.__i18nAdminUsers block
for JavaScript alert/status messages."
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>