package main import ( "fmt" "os" "path/filepath" ) // Compatibility cleanup belongs to the shared reset path, never the UI. // Current frontends are stateless. Keep this for upgrades from SQLite builds. func cleanupLegacyFrontendState() error { for _, path := range []string{"/var/lib/teraweb/frontend.db", "/var/lib/tera-clone-demo-web/teraclone.db"} { if err := removeLegacyDatabase(path); err != nil { return err } } return nil } func removeLegacyDatabase(path string) error { parent := filepath.Dir(path) resolved, err := filepath.EvalSymlinks(parent) if os.IsNotExist(err) { return nil } if err != nil { return err } if resolved != parent { return fmt.Errorf("refusing redirected frontend state directory: %s", parent) } for _, suffix := range []string{"", "-wal", "-shm", "-journal"} { target := path + suffix info, err := os.Lstat(target) if os.IsNotExist(err) { continue } if err != nil { return err } if !info.Mode().IsRegular() { return fmt.Errorf("refusing non-regular frontend state: %s", target) } if err := os.Remove(target); err != nil { return err } } return nil }