mirror of
https://github.com/narrrl/proton-drive-linux.git
synced 2026-11-03 16:41:26 +01:00
A two-password account signed in with its login password as the mailbox password, so the key chain never unlocked and the daemon retried forever. Login now asks for the mailbox password and checks it against the account (proton-sdk 0.8 `unlock`), so a typo is a retry. The password is never stored: the keyring blob keeps the per-key passphrases instead, and for a two-password account only when the user opts in (`--remember`, or the "Keep unlocked on this computer" switch). By default they live in the kernel keyring for the login session and the account is locked after a reboot until `pdfs unlock` or the app supplies them again. - core: kernelkey module, Error::Locked / WrongMailboxPassword, unlock, lock, key_state, ready; blobs written by 3.0.x are migrated on first start; token refresh updates only the tokens in the stored blob - cli: `pdfs unlock [--remember]`, `pdfs lock [--forget]`; status and diagnose report the key state; the daemon waits while locked and is marked non-dumpable - gui: mailbox password dialog at sign-in and on open, locked tray state - po: all catalogs translated - bump to 3.1.0, depend on proton-sdk and proton-drive-rs 0.8.0 Refs #26.
64 lines
2.5 KiB
TOML
64 lines
2.5 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = ["crates/pdfs-core", "crates/pdfs-fuse", "crates/pdfs-cli", "crates/pdfs-gui"]
|
|
|
|
[workspace.package]
|
|
version = "3.1.0"
|
|
edition = "2024"
|
|
license = "MIT"
|
|
authors = ["Nils Pukropp <contact@narl.io>"]
|
|
rust-version = "1.96"
|
|
repository = "https://github.com/narrrl/proton-drive-linux"
|
|
homepage = "https://proton-drive.narl.io"
|
|
readme = "README.md"
|
|
keywords = ["proton", "drive", "fuse", "sync", "linux"]
|
|
categories = ["filesystem", "command-line-utilities"]
|
|
|
|
[workspace.dependencies]
|
|
proton-sdk = { version = "0.8.0" }
|
|
proton-drive-rs = { version = "0.8.0" }
|
|
|
|
# Internal crates.
|
|
pdfs-core = { path = "crates/pdfs-core" }
|
|
pdfs-fuse = { path = "crates/pdfs-fuse" }
|
|
|
|
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "fs", "io-util", "time", "signal"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
base64 = "0.23"
|
|
zeroize = "1"
|
|
thiserror = "2"
|
|
anyhow = "1"
|
|
# Non-poisoning mutexes. A handler that panics while holding a lock must not
|
|
# wedge every later acquisition of it: `Workers` catches the unwind to keep the
|
|
# pool alive, and `std::sync::Mutex` would defeat that by poisoning the state
|
|
# the recovered worker needs.
|
|
parking_lot = "0.12"
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
directories = "6"
|
|
ignore = "0.4"
|
|
sha2 = "0.11"
|
|
# Google Takeout exports are zip sets; the importer reads their central
|
|
# directories and streams entries out without extracting to disk first.
|
|
zip = { version = "8", default-features = false, features = ["deflate"] }
|
|
# Proton's photo duplicate detection is keyed on the plaintext SHA-1, so an
|
|
# import has to speak SHA-1 whatever its age.
|
|
sha1 = "0.11"
|
|
# Thumbnail generation for photos the server has none for. Decoders only for the
|
|
# formats a camera or phone actually produces — the rest of the crate's codecs
|
|
# would be dead weight in the daemon.
|
|
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp", "gif", "tiff", "bmp", "rayon"] }
|
|
rusqlite = { version = "0.40", features = ["bundled"] }
|
|
# keyring 4 split into `keyring-core` plus per-platform stores. The libdbus
|
|
# Secret Service store is the one keyring 3's `sync-secret-service` wrapped, and
|
|
# with no `target` it matches items v3 wrote, so existing logins survive.
|
|
keyring-core = "1"
|
|
dbus-secret-service-keyring-store = { version = "1", features = ["crypto-rust"] }
|
|
clap = { version = "4", features = ["derive"] }
|
|
rpassword = "7"
|
|
async-trait = "0.1"
|
|
futures = "0.3"
|
|
fuser = "0.18"
|
|
libc = "0.2"
|