Remove old config copies from updates
Settings -> Upkeep -> Backup & restore lists the config.json.bak-* files that update leaves behind and removes one or all of them; they hold the same secrets as a backup. Removing needs a signed-in user and is logged. After a successful update only the newest 3 copies are kept, and a copy that would overwrite an older one (version unknown, or the same version twice) gets the time appended. The backup card now also names preshared keys and authenticator app secrets. The update notice uses the existing compareVersions instead of its own.
This commit is contained in:
@@ -351,6 +351,30 @@ func TestAPI(t *testing.T) {
|
||||
bearer("POST", "/tokens", 403, map[string]string{"name": "more", "scope": "rw"})
|
||||
bearer("DELETE", "/tokens/"+tok["id"].(string), 403)
|
||||
bearer("GET", "/backup", 403)
|
||||
bearer("GET", "/update-backups", 403)
|
||||
bearer("DELETE", "/update-backups", 403)
|
||||
|
||||
// Config copies made by update: listed newest first, removed one by
|
||||
// one or all at once; nothing else in the folder can be removed.
|
||||
for i, v := range []string{"v0.3.2", "v0.4.0"} {
|
||||
f := filepath.Join(dir, "config.json.bak-"+v)
|
||||
_ = os.WriteFile(f, []byte("{}"), 0o600)
|
||||
_ = os.Chtimes(f, time.Now(), time.Now().Add(time.Duration(i-2)*time.Hour))
|
||||
}
|
||||
list := call("GET", "/update-backups", nil, 200)["backups"].([]any)
|
||||
if len(list) != 2 || list[0].(map[string]any)["version"] != "v0.4.0" {
|
||||
t.Fatalf("update backups: %v", list)
|
||||
}
|
||||
call("DELETE", "/update-backups/config.json", nil, 400)
|
||||
call("DELETE", "/update-backups/stats.json", nil, 400)
|
||||
call("DELETE", "/update-backups/config.json.bak-v9.9.9", nil, 400)
|
||||
call("DELETE", "/update-backups/config.json.bak-v0.3.2", nil, 200)
|
||||
if r := call("DELETE", "/update-backups", nil, 200); r["removed"] != float64(1) {
|
||||
t.Fatalf("remove all: %v", r)
|
||||
}
|
||||
if _, err := os.Stat(filepath.Join(dir, "config.json")); err != nil {
|
||||
t.Fatal("config.json is gone:", err)
|
||||
}
|
||||
|
||||
call("DELETE", "/peers/"+id, nil, 200)
|
||||
if len(store.Get().Peers) != 0 {
|
||||
|
||||
Reference in New Issue
Block a user