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

* 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.

* fix(restore): polish help text, drop dead check, dedup dump kinds

pflag treats backticked words in flag usage as the value placeholder,
so --data-zip rendered as "--data-zip archive" in help output.
This commit is contained in:
Roger
2026-06-12 20:53:00 +08:00
committed by GitHub
parent 8d8bd81790
commit bf96ba8c80
11 changed files with 493 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")
}
}