fix(fuse,core,cli,gui): say when the keyring refuses the refreshed sign-in

A rotation the keyring refused was retried and kept in the kernel
keyring, but only the log said so, and a reboot before the keyring took
it still signed the user out.

`Response::Status` carries `tokens_unsaved` while one waits. The tray
says "Sign-in not saved — unlock your keyring" and needs attention, the
app's status says the same, `pdfs status` prints a Keyring line and
`pdfs diagnose` warns. New strings are translated in every catalog
(B61).
This commit is contained in:
nvrl committed 2026-10-09 12:22:02 +02:00
1 parent 3458e2e72d
commit 2b6c37f543
17 files changed
+616 -438

No files matched your search

+10
View File
@@ -750,6 +750,16 @@ pub fn stored_session_is_newer() -> bool {
}
}
/// Whether a session in this process holds refreshed tokens the keyring has
/// not taken yet. They are retried and kept in the kernel keyring meanwhile,
/// which a reboot clears, so the user is asked to unlock the keyring (B61).
pub fn tokens_unsaved() -> bool {
TOKEN_SINKS
.lock()
.values()
.any(|sink| sink.state.lock().unsaved.is_some())
}
/// Where each live session in this process writes its rotated tokens, by
/// session id, for [`persist`] to find.
static TOKEN_SINKS: parking_lot::Mutex<BTreeMap<String, Arc<TokenSink>>> =
+5
View File
@@ -1964,6 +1964,11 @@ pub enum Response {
/// connection brings it back: only signing in again does.
#[serde(default)]
session_expired: bool,
/// True while the keyring refuses the session's refreshed tokens. The
/// daemon keeps retrying; until it succeeds, a reboot signs the user
/// out.
#[serde(default)]
tokens_unsaved: bool,
},
/// A human-readable success message.
Ok { message: String },