05/19 Update documents

This commit is contained in:
2026-05-19 12:43:08 -04:00
parent 1a51fbb673
commit 2049f06b05
2 changed files with 118 additions and 2 deletions
+97
View File
@@ -746,3 +746,100 @@ The `[PassKeeper] decorateFields: host=…, matched=0 of 0 items` log from
`content.js` is a routine debug message (not an error): the content script found `content.js` is a routine debug message (not an error): the content script found
no stored credentials matching the current hostname, which is expected on the vault no stored credentials matching the current hostname, which is expected on the vault
page itself. page itself.
---
## Roadmap / To-Do
Features planned for future implementation. Ordered by priority within each category.
### High priority — user-facing
**1. One-time share links**
Generate a time-limited, single-use encrypted link to share a credential with someone who has no PassKeeper account. The decryption key lives in the URL fragment (never sent to server). Auto-expires and self-destructs after first view.
- New DB table: `share_links` (token, enc_data, iv, enc_key_fragment_hash, expires_at, used_at)
- Public route: `GET /s/<token>` — serves a minimal HTML page
- Client derives key from URL fragment, decrypts, displays once
- No auth required for recipient
**2. Custom fields**
Let users add arbitrary key-value pairs to any item type. Fields stored encrypted inside `plain.custom_fields: [{label, value}]` — no schema change needed.
- Add "Add field" button in item modal
- Renders as label + value rows; value masked by default for sensitive fields
- Searchable via expanded `handleSearch`
**3. Trusted devices**
After successful login + MFA, mark the browser as trusted for N days — MFA skipped on subsequent logins from that device.
- Store a signed `trusted_device` cookie (HMAC of device fingerprint + user_id + expiry)
- Server verifies on login; if valid, skip MFA challenge
- User can revoke trusted devices in Account Settings
### Medium priority — security / UX
**4. Email notifications**
Send email on security events: new login from unknown IP, MFA disabled, master password changed, emergency access requested.
- Requires SMTP config in `.env` (`SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASSWORD`, `SMTP_FROM`)
- Use Flask-Mail or smtplib directly
- User can opt out per event type in Account Settings
**5. Audit log improvements**
Current audit log is a raw list. Add:
- Filter by action type and date range
- Export to CSV
- Pagination (currently loads all at once)
**6. Access from unknown IP alert**
On login, compare client IP against last-seen IPs for the user. If new, flag in the audit log and (if email configured) send a notification.
### Lower priority — platform
**7. Vault item attachments**
Encrypt files client-side (AES-256-GCM), store as base64 blobs attached to vault items.
- New DB table: `vault_attachments` (item_id, enc_data, iv, filename_enc, iv_filename, size, created_at)
- Client-side size limit (e.g. 5 MB per file, 25 MB per vault)
- Download: decrypt in browser, trigger download via Blob URL
**8. Collections / nested folders**
Group folders into top-level collections (e.g. "Work", "Personal").
- New DB table: `collections` (user_id, name)
- `folders.collection_id` FK
- Sidebar renders collection → folder → items hierarchy
**9. iOS AutoFill Extension**
Expose PassKeeper as an iOS Credential Provider so it fills in Safari and other apps natively.
- Requires iOS Credential Provider Extension target in Xcode
- Shares encrypted vault data with the extension via App Groups
- Ties into the existing JQC iOS project infrastructure
**10. Extension — TOTP QR capture**
Detect 2FA setup QR codes on screen during account registration flows.
- Content script watches for `<img>` or `<canvas>` elements containing `otpauth://` URIs
- Prompts user to save the TOTP secret to the matching vault item
**11. Admin panel** (multi-user deployments)
- User management (invite, disable, delete)
- Per-user storage and audit log review
- Requires role column on `users` table
### Infrastructure
**12. Backup verification cron**
Extend `backup.cron` to run a weekly restore test into a throwaway DB, verifying backup integrity automatically.
**13. Health check endpoint**
`GET /health` — returns `{"status": "ok", "db": "ok", "version": "x.y.z"}`. Used by uptime monitors (UptimeRobot, etc.).
---
## CI Pipeline
`.gitea/workflows/ci.yml` runs on every push to `main`, `master`, `dev`.
**Jobs:**
1. `lint-python` — flake8 (F821 and real errors; style noise suppressed)
2. `syntax-check``ast.parse` all `app/` Python files
3. `migration-check` — single Alembic head, no duplicate revision IDs
4. `js-syntax``node -e "new Function(...)"` on all vault/extension JS files
5. `build-extension` — produces `passkeeper-extension-chrome.zip` and `passkeeper-extension-firefox.zip` as artifacts (30-day retention)
**Runner:** self-hosted host-mode runner on the production server. Requires `python3`, `pip3`, `node`, `zip` on the host. No Docker needed.
+19
View File
@@ -292,3 +292,22 @@ bash scripts/backup_db.sh
## Licence ## Licence
MIT — see `LICENSE`. MIT — see `LICENSE`.
---
## Roadmap
| # | Feature | Notes |
|---|---------|-------|
| 1 | **One-time share links** | Single-use encrypted link for non-account recipients; key in URL fragment |
| 2 | **Custom fields** | Arbitrary key-value pairs per item; stored in encrypted blob |
| 3 | **Trusted devices** | Skip MFA for N days on trusted browsers |
| 4 | **Email notifications** | Alert on login from new IP, MFA changes, password change |
| 5 | **Audit log improvements** | Filter by type/date, CSV export, pagination |
| 6 | **Vault item attachments** | Client-side encrypted file attachments per item |
| 7 | **Collections / nested folders** | Group folders into top-level collections |
| 8 | **iOS AutoFill Extension** | Native credential filling in Safari and iOS apps |
| 9 | **Extension TOTP QR capture** | Detect and save TOTP secrets during 2FA setup |
| 10 | **Admin panel** | User management for multi-user deployments |
| 11 | **Backup verification cron** | Weekly automated restore test |
| 12 | **Health check endpoint** | `GET /health` for uptime monitors |