Support Android share-driven credential lookup
This commit is contained in:
@@ -8390,6 +8390,9 @@ func TestDefaultStatePathsUsesProvidedStateDir(t *testing.T) {
|
||||
if got := paths.PendingSharedVaultNamePath; got != filepath.Join(base, "pending-shared-vault-name.txt") {
|
||||
t.Fatalf("PendingSharedVaultNamePath = %q, want %q", got, filepath.Join(base, "pending-shared-vault-name.txt"))
|
||||
}
|
||||
if got := paths.PendingSharedLookupPath; got != filepath.Join(base, "pending-shared-lookup.txt") {
|
||||
t.Fatalf("PendingSharedLookupPath = %q, want %q", got, filepath.Join(base, "pending-shared-lookup.txt"))
|
||||
}
|
||||
}
|
||||
|
||||
func TestImportedVaultDestinationUsesIncomingFilenameInsideDefaultDirectory(t *testing.T) {
|
||||
@@ -8520,6 +8523,95 @@ func TestUIConsumesPendingSharedVaultImportOnStartup(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestUIConsumesPendingSharedLookupOnStartupWhenVaultIsAlreadyOpen(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
dir := t.TempDir()
|
||||
paths := 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"),
|
||||
PendingSharedLookupPath: filepath.Join(dir, "pending-shared-lookup.txt"),
|
||||
}
|
||||
if err := os.WriteFile(paths.PendingSharedLookupPath, []byte("https://bellagio.example.invalid/login\n"), 0o600); err != nil {
|
||||
t.Fatalf("WriteFile(PendingSharedLookupPath) error = %v", err)
|
||||
}
|
||||
|
||||
u := newUIWithSession("phone", &uiSession{model: vault.Model{
|
||||
Entries: []vault.Entry{
|
||||
{ID: "bellagio-login", Title: "Bellagio", URL: "https://bellagio.example.invalid/login", Path: []string{"Crew", "Internet"}},
|
||||
{ID: "vault-console", Title: "Vault Console", URL: "https://vault.example.invalid", Path: []string{"Crew", "Internet"}},
|
||||
},
|
||||
}}, paths)
|
||||
|
||||
if got := u.search.Text(); got != "bellagio.example.invalid" {
|
||||
t.Fatalf("search after pending shared lookup = %q, want %q", got, "bellagio.example.invalid")
|
||||
}
|
||||
if got := u.filteredTitles(); !slices.Equal(got, []string{"Bellagio"}) {
|
||||
t.Fatalf("filteredTitles() after pending shared lookup = %v, want [Bellagio]", got)
|
||||
}
|
||||
if _, err := os.Stat(paths.PendingSharedLookupPath); !errors.Is(err, os.ErrNotExist) {
|
||||
t.Fatalf("Stat(PendingSharedLookupPath) error = %v, want not exist", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalizePendingSharedLookupQueryExtractsURLFromTextSnippet(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
raw := "Meet the crew at https://bellagio.example.invalid/login before the vault opens."
|
||||
if got := normalizePendingSharedLookupQuery(raw); got != "bellagio.example.invalid" {
|
||||
t.Fatalf("normalizePendingSharedLookupQuery() = %q, want %q", got, "bellagio.example.invalid")
|
||||
}
|
||||
}
|
||||
|
||||
func TestUIAppliesPendingSharedLookupAfterOpeningVault(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
dir := t.TempDir()
|
||||
paths := 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"),
|
||||
PendingSharedLookupPath: filepath.Join(dir, "pending-shared-lookup.txt"),
|
||||
}
|
||||
if err := os.WriteFile(paths.PendingSharedLookupPath, []byte("https://bellagio.example.invalid/login\n"), 0o600); err != nil {
|
||||
t.Fatalf("WriteFile(PendingSharedLookupPath) error = %v", err)
|
||||
}
|
||||
|
||||
key := vault.MasterKey{Password: "correct horse battery staple"}
|
||||
vaultPath := filepath.Join(dir, "bellagio.kdbx")
|
||||
var encoded bytes.Buffer
|
||||
if err := vault.SaveKDBXWithKey(&encoded, vault.Model{
|
||||
Entries: []vault.Entry{
|
||||
{ID: "bellagio-login", Title: "Bellagio", URL: "https://bellagio.example.invalid/login", Path: []string{"Crew", "Internet"}},
|
||||
{ID: "vault-console", Title: "Vault Console", URL: "https://vault.example.invalid", Path: []string{"Crew", "Internet"}},
|
||||
},
|
||||
}, key); err != nil {
|
||||
t.Fatalf("SaveKDBXWithKey() error = %v", err)
|
||||
}
|
||||
if err := os.WriteFile(vaultPath, encoded.Bytes(), 0o600); err != nil {
|
||||
t.Fatalf("WriteFile(vaultPath) error = %v", err)
|
||||
}
|
||||
|
||||
u := newUIWithState("phone", &session.Manager{}, paths)
|
||||
if got := u.search.Text(); got != "" {
|
||||
t.Fatalf("search before open with pending shared lookup = %q, want empty", got)
|
||||
}
|
||||
u.vaultPath.SetText(vaultPath)
|
||||
u.masterPassword.SetText(key.Password)
|
||||
if err := u.openVaultAction(); err != nil {
|
||||
t.Fatalf("openVaultAction() with pending shared lookup error = %v", err)
|
||||
}
|
||||
if got := u.search.Text(); got != "bellagio.example.invalid" {
|
||||
t.Fatalf("search after open with pending shared lookup = %q, want %q", got, "bellagio.example.invalid")
|
||||
}
|
||||
if got := u.filteredTitles(); !slices.Equal(got, []string{"Bellagio"}) {
|
||||
t.Fatalf("filteredTitles() after open with pending shared lookup = %v, want [Bellagio]", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUICurrentShareableVaultPathUsesSelectedVaultPath(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user