Implements shared auth token reuse.
This commit is contained in:
12
Tasks.md
12
Tasks.md
@@ -70,7 +70,6 @@ This document defines the complete project roadmap and task tracking system for
|
|||||||
|
|
||||||
| ID | Title | Status | Type |
|
| ID | Title | Status | Type |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| [NUT-016](#nut-016) | Implement Shared Auth Token Reuse | Triage | Integration |
|
|
||||||
| [NUT-017](#nut-017) | Implement Multi-Account Switching (GUI + CLI) | Triage | Integration |
|
| [NUT-017](#nut-017) | Implement Multi-Account Switching (GUI + CLI) | Triage | Integration |
|
||||||
| [NUT-018](#nut-018) | Implement Packaging for macOS, Windows, Linux | Triage | Chore |
|
| [NUT-018](#nut-018) | Implement Packaging for macOS, Windows, Linux | Triage | Chore |
|
||||||
| [NUT-019](#nut-019) | Implement Homebrew/Winget/Chocolatey Manifests | Triage | Chore |
|
| [NUT-019](#nut-019) | Implement Homebrew/Winget/Chocolatey Manifests | Triage | Chore |
|
||||||
@@ -93,6 +92,7 @@ This document defines the complete project roadmap and task tracking system for
|
|||||||
| [NUT-013](#nut-013) | Implement GUI File Queue + Drag-and-Drop | Fixed | Feature |
|
| [NUT-013](#nut-013) | Implement GUI File Queue + Drag-and-Drop | Fixed | Feature |
|
||||||
| [NUT-014](#nut-014) | Implement GUI Credential Management UI | Fixed | Feature |
|
| [NUT-014](#nut-014) | Implement GUI Credential Management UI | Fixed | Feature |
|
||||||
| [NUT-015](#nut-015) | Implement GUI Upload Progress Bars | Fixed | Feature |
|
| [NUT-015](#nut-015) | Implement GUI Upload Progress Bars | Fixed | Feature |
|
||||||
|
| [NUT-016](#nut-016) | Implement Shared Auth Token Reuse | Fixed | Integration |
|
||||||
| [NUT-021](#nut-021) | Support Headless & SSH Remote Authentication Modes | Fixed | Feature |
|
| [NUT-021](#nut-021) | Support Headless & SSH Remote Authentication Modes | Fixed | Feature |
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -402,19 +402,19 @@ Add per-file and total progress bars to the GUI.
|
|||||||
- NUT-013
|
- NUT-013
|
||||||
|
|
||||||
|
|
||||||
<a id="nut-016" class="task" data-status="triage" data-task-type="integration"></a>
|
<a id="nut-016" class="task" data-status="done" data-task-type="integration"></a>
|
||||||
### Implement Shared Auth Token Reuse
|
### Implement Shared Auth Token Reuse
|
||||||
**ID:** NUT-016
|
**ID:** NUT-016
|
||||||
**Status:** Triage
|
**Status:** Fixed
|
||||||
**Type:** Integration
|
**Type:** Integration
|
||||||
|
|
||||||
**Description:**
|
**Description:**
|
||||||
Ensure both CLI and GUI reuse the same credential store and cached tokens.
|
Ensure both CLI and GUI reuse the same credential store and cached tokens.
|
||||||
|
|
||||||
**Requirements:**
|
**Requirements:**
|
||||||
- [ ] Shared credential backend
|
- [x] Shared credential backend
|
||||||
- [ ] Shared token cache
|
- [x] Shared token cache
|
||||||
- [ ] Unified config format
|
- [x] Unified config format
|
||||||
|
|
||||||
**Dependencies:**
|
**Dependencies:**
|
||||||
- NUT-006
|
- NUT-006
|
||||||
|
|||||||
@@ -345,4 +345,42 @@ mod tests {
|
|||||||
let deserialized: StoredAccount = serde_json::from_str(&json).unwrap();
|
let deserialized: StoredAccount = serde_json::from_str(&json).unwrap();
|
||||||
assert_eq!(deserialized, account);
|
assert_eq!(deserialized, account);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_unified_config_accounts_parsing() {
|
||||||
|
let json_data = r#"[
|
||||||
|
{
|
||||||
|
"id": "alice@cloud.example.com",
|
||||||
|
"label": "Work",
|
||||||
|
"username": "alice",
|
||||||
|
"server_url": "https://cloud.example.com",
|
||||||
|
"is_default": true,
|
||||||
|
"fallback_password": "app-password-token"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "bob@personal.nextcloud.com",
|
||||||
|
"label": "Personal",
|
||||||
|
"username": "bob",
|
||||||
|
"server_url": "https://personal.nextcloud.com",
|
||||||
|
"is_default": false
|
||||||
|
}
|
||||||
|
]"#;
|
||||||
|
|
||||||
|
let accounts: Vec<StoredAccount> = serde_json::from_str(json_data).unwrap();
|
||||||
|
assert_eq!(accounts.len(), 2);
|
||||||
|
assert_eq!(accounts[0].id, "alice@cloud.example.com");
|
||||||
|
assert_eq!(accounts[0].label.as_deref(), Some("Work"));
|
||||||
|
assert!(accounts[0].is_default);
|
||||||
|
assert_eq!(accounts[0].fallback_password.as_deref(), Some("app-password-token"));
|
||||||
|
|
||||||
|
assert_eq!(accounts[1].id, "bob@personal.nextcloud.com");
|
||||||
|
assert_eq!(accounts[1].label.as_deref(), Some("Personal"));
|
||||||
|
assert!(!accounts[1].is_default);
|
||||||
|
assert_eq!(accounts[1].fallback_password, None);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_keyring_constants() {
|
||||||
|
assert_eq!(KEYRING_SERVICE_NAME, "me.majinnaibu.nut");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user