Repository navigation
Keychain password storage and selectable window frame styles - #37
Merged
Merged
Conversation
added 5 commits
October 13, 2026 19:03
Saved SSH/FTP/S3 passwords sat in plaintext in profiles.json. A new "Store passwords in the OS keychain" toggle (Settings → Connections) moves them into Keychain / Credential Manager under `profile-password:<id>`; the file keeps only the rest of the profile. - Toggling moves existing passwords both ways, writing the file before deleting keychain entries (or after writing entries) so a failure never drops a password. - Keychain writes are recorded in the faro.db manifest so the encrypted backup still carries them. - Setting persists in faro.db; the profile store reads it at launch and the CLI honours it too.
The custom title bar always drew Windows-style controls on the right. Settings → Appearance → Window frame now picks the layout: - Windows (default, unchanged): flush full-height buttons on the right. - macOS: close / minimize / zoom traffic lights on the left, glyphs appear on hover. - Linux: small rounded headerbar buttons on the right. Look-only; the window behaves the same in all three. Pop-out terminal windows keep their own title bar.
- SSH key passphrases join saved passwords in the keychain (purpose `profile-passphrase:<id>`); the setting now covers both. - A keychain read failure at launch no longer aborts startup. The affected profiles load without their secret, the app shows a warning naming them, and their keychain entry is never written or deleted until restart. - Turning the setting off is refused while any secret is unreadable, so a failed read can't be written back to the file empty and then lost.
With no saved setting, a fresh install (no profiles.json yet) starts with saved passwords in the keychain. Existing installs keep plain text, so nothing moves out of profiles.json without an explicit toggle. The resolved value is written back to faro.db so the UI and backend agree.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Keychain storage for saved passwords and key passphrases (security)
profiles.jsoninto the OS keychain (macOS Keychain, Windows Credential Manager, Linux keyutils). The file keeps no secret.faro.dbmanifest, so encrypted backups still include them.profiles.jsonyet) start with the keychain on. Existing installs keep their current plain-text file until the toggle is changed.faro-clihonours the same setting.Window frame styles (UI)
Testing
cargo test -p faro --lib: 270 passed, 27 ignored. The ignored keychain round-trip test touches the real OS keychain, so it stays opt-in.profiles.jsonin keychain mode, purpose mapping for each auth kind, and the install-age default.npx tsc --noEmit: clean.Not yet verified
Review notes
profiles.jsonand are now covered by the same setting.