Save remote setup bindings to disk

This commit is contained in:
Joe Julian
2026-04-06 20:32:51 -07:00
parent f6aff3e255
commit 400278ce0c
2 changed files with 40 additions and 2 deletions
+3
View File
@@ -1581,6 +1581,9 @@ func (u *ui) persistSyncDialogRemoteBinding(baseURL, remotePath string) error {
if err != nil { if err != nil {
return err return err
} }
if err := u.state.Save(); err != nil {
return err
}
u.selectedVaultRemoteProfileID = binding.RemoteProfileID u.selectedVaultRemoteProfileID = binding.RemoteProfileID
u.selectedVaultRemoteCredentialEntryID = binding.CredentialEntryID u.selectedVaultRemoteCredentialEntryID = binding.CredentialEntryID
u.selectedVaultRemoteSyncMode = binding.SyncMode u.selectedVaultRemoteSyncMode = binding.SyncMode
+37 -2
View File
@@ -5924,7 +5924,13 @@ func TestUIOpenRemoteSyncSetupDialogPrefillsCurrentVaultSetupFlow(t *testing.T)
func TestUISelectedLocalVaultRemoteSyncSummaryMentionsSetup(t *testing.T) { func TestUISelectedLocalVaultRemoteSyncSummaryMentionsSetup(t *testing.T) {
t.Parallel() t.Parallel()
u := newUIWithSession("desktop", &session.Manager{}) dir := t.TempDir()
u := newUIWithSession("desktop", &session.Manager{}, statePaths{
DefaultSaveAsPath: filepath.Join(dir, "vault.kdbx"),
RecentVaultsPath: filepath.Join(dir, "recent-vaults.json"),
RecentRemotesPath: filepath.Join(dir, "recent-remotes.json"),
UIPreferencesPath: filepath.Join(dir, "ui-prefs.json"),
})
if got := u.selectedLocalVaultRemoteSyncSummary("/vaults/family.kdbx"); got != "Open this vault to set up a WebDAV sync target for it." { if got := u.selectedLocalVaultRemoteSyncSummary("/vaults/family.kdbx"); got != "Open this vault to set up a WebDAV sync target for it." {
t.Fatalf("selectedLocalVaultRemoteSyncSummary() = %q, want setup guidance", got) t.Fatalf("selectedLocalVaultRemoteSyncSummary() = %q, want setup guidance", got)
@@ -6003,7 +6009,13 @@ func TestUIRemoteSyncSetupPersistsBindingAfterSuccessfulPush(t *testing.T) {
})) }))
defer server.Close() defer server.Close()
u := newUIWithSession("desktop", &session.Manager{}) dir := t.TempDir()
u := newUIWithSession("desktop", &session.Manager{}, statePaths{
DefaultSaveAsPath: filepath.Join(dir, "vault.kdbx"),
RecentVaultsPath: filepath.Join(dir, "recent-vaults.json"),
RecentRemotesPath: filepath.Join(dir, "recent-remotes.json"),
UIPreferencesPath: filepath.Join(dir, "ui-prefs.json"),
})
u.masterPassword.SetText(key.Password) u.masterPassword.SetText(key.Password)
u.vaultPath.SetText(currentPath) u.vaultPath.SetText(currentPath)
if err := u.openVaultAction(); err != nil { if err := u.openVaultAction(); err != nil {
@@ -6038,6 +6050,29 @@ func TestUIRemoteSyncSetupPersistsBindingAfterSuccessfulPush(t *testing.T) {
if got := u.recentRemotes[0].LocalVaultPath; got != currentPath { if got := u.recentRemotes[0].LocalVaultPath; got != currentPath {
t.Fatalf("recentRemotes[0].LocalVaultPath = %q, want %q", got, currentPath) t.Fatalf("recentRemotes[0].LocalVaultPath = %q, want %q", got, currentPath)
} }
var reopened session.Manager
if err := reopened.Open(currentPath, key); err != nil {
t.Fatalf("reopened.Open(currentPath) error = %v", err)
}
reopenedModel, err := reopened.Current()
if err != nil {
t.Fatalf("reopened.Current() error = %v", err)
}
profiles := reopenedModel.RemoteProfiles
if len(profiles) != 1 {
t.Fatalf("len(reopened.RemoteProfiles) = %d, want 1 persisted profile", len(profiles))
}
if profiles[0].BaseURL != server.URL || profiles[0].Path != "vaults/other.kdbx" {
t.Fatalf("reopened.RemoteProfiles[0] = %#v, want persisted setup target", profiles[0])
}
cred, err := reopenedModel.EntryByID(u.selectedVaultRemoteCredentialEntryID)
if err != nil {
t.Fatalf("reopened.EntryByID(saved credential) error = %v", err)
}
if cred.Username != "tjulian" || cred.Password != "token-1" {
t.Fatalf("reopened saved credential = %#v, want tjulian/token-1", cred)
}
} }
func TestUISaveCurrentRemoteBindingActionPersistsBindingIntoVault(t *testing.T) { func TestUISaveCurrentRemoteBindingActionPersistsBindingIntoVault(t *testing.T) {