feat(restore): cross-platform restore via dump engine rebuild (#606)

Restore previously required the dump's origin OS, overlaying keys onto locally-discovered browsers. It now rebuilds Chromium engines from the dump's vaults (v2 adds engine kind), so copied data or an archive zip decrypts on any OS.
This commit is contained in:
moonD4rk
2026-06-07 22:03:46 +08:00
parent cd0b2daaf3
commit 6d0efadb59
11 changed files with 496 additions and 189 deletions
+29
View File
@@ -39,3 +39,32 @@ func TestReadJSON_AcceptsCurrentVersion(t *testing.T) {
t.Errorf("Version = %q, want %q", parsed.Version, DumpVersion)
}
}
func TestDump_VaultKindRoundTrip(t *testing.T) {
d := NewDump()
d.Vaults = append(d.Vaults, Vault{
Browser: "chrome",
Kind: "chromium",
UserDataDir: "/p",
Profiles: []string{"Default"},
Keys: MasterKeys{V10: []byte{0x01}},
})
var buf bytes.Buffer
if err := d.WriteJSON(&buf); err != nil {
t.Fatalf("WriteJSON: %v", err)
}
parsed, err := ReadJSON(&buf)
if err != nil {
t.Fatalf("ReadJSON: %v", err)
}
if len(parsed.Vaults) != 1 {
t.Fatalf("Vaults len = %d, want 1", len(parsed.Vaults))
}
if parsed.Vaults[0].Kind != "chromium" {
t.Errorf("Vault.Kind round-trip: got %q, want %q", parsed.Vaults[0].Kind, "chromium")
}
if parsed.Vaults[0].Browser != "chrome" {
t.Errorf("Vault.Browser round-trip: got %q, want %q", parsed.Vaults[0].Browser, "chrome")
}
}