From afb27816df62cd102c307d9550d414e159c1ddba Mon Sep 17 00:00:00 2001 From: roboogg133 Date: Sat, 2 Aug 2025 12:38:36 -0300 Subject: [PATCH] hard --- cmd/packets/main.go | 207 +++++++++++++++++++++---------------------- internal/internal.go | 13 ++- 2 files changed, 112 insertions(+), 108 deletions(-) diff --git a/cmd/packets/main.go b/cmd/packets/main.go index 3bbca07..7c8d9f0 100644 --- a/cmd/packets/main.go +++ b/cmd/packets/main.go @@ -454,23 +454,19 @@ func Install(packagepath string, serial uint) error { } defer f.Close() - stat, _ := f.Stat() - - totalsize := stat.Size() - - counter := &CountingReader{R: f} - zs, err := zstd.NewReader(f) if err != nil { return err } + defer zs.Close() tr := tar.NewReader(zs) bar := progressbar.NewOptions64( - totalsize, + -1, progressbar.OptionSetDescription("[2/2] Unpacking ..."), progressbar.OptionSetWriter(os.Stdout), + progressbar.OptionClearOnFinish(), ) for { hdr, err := tr.Next() @@ -513,13 +509,12 @@ func Install(packagepath string, serial uint) error { return err } - _, err = io.Copy(io.MultiWriter(out), tr) + n, err := io.Copy(out, tr) out.Close() if err != nil { return err } - - bar.Set(int(counter.Total)) + bar.Add64(n) err = os.Chmod(absPath, os.FileMode(hdr.Mode)) if err != nil { @@ -562,7 +557,7 @@ func Install(packagepath string, serial uint) error { ioObject.RawSetString("lines", lua.LNil) ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen)) - if err := L.DoFile(manifest.Hooks.Install); err != nil { + if err := L.DoFile(filepath.Join(cfg.Config.DataDir, name, manifest.Hooks.Install)); err != nil { log.Panic(err) } @@ -994,120 +989,121 @@ func Sync(url string) error { fmt.Printf("Ooops... Data directory has been changed on %s do you want to move the packages from (%s), to (%s)\n", filepath.Join(PacketsDir, "config.toml"), cfg.Config.LastDataDir, cfg.Config.DataDir) fmt.Println("What you want to do?") fmt.Println("[y] Yes [n] No, [x] Ignore it and stop to show this message (not recommended)") - } - var answer string - fmt.Scanln(&answer) - switch answer { - case "n": - fmt.Println("Just ignoring...") + var answer string + fmt.Scanln(&answer) - case "x": - f, err := os.OpenFile(filepath.Join(PacketsDir, "config.toml"), os.O_WRONLY, 0644) - if err != nil { - return err - } + switch answer { + case "n": + fmt.Println("Just ignoring...") - cfg.Config.LastDataDir = cfg.Config.DataDir - - encoder := toml.NewEncoder(f) - - err = encoder.Encode(cfg) - if err != nil { - return err - } - f.WriteString("\n\n# BE CAREFULL CHANGING BIN_DIR, BECAUSE THE BINARIES DON'T MOVE AUTOMATICALLY\n#NEVER CHANGE lastDataDir\n") - os.Remove(cfg.Config.LastDataDir) - - case "y": - if err := os.MkdirAll(cfg.Config.DataDir, 0755); err != nil { - return err - } - - bar := progressbar.NewOptions64(-1, - progressbar.OptionSetDescription("Moving ..."), - ) - - err := filepath.WalkDir(cfg.Config.LastDataDir, func(last string, d fs.DirEntry, walkErr error) error { - if walkErr != nil { - return walkErr - } - - if last == cfg.Config.LastDataDir { - return nil - } - - rel, err := filepath.Rel(cfg.Config.LastDataDir, last) + case "x": + f, err := os.OpenFile(filepath.Join(PacketsDir, "config.toml"), os.O_WRONLY, 0644) if err != nil { return err } - dest := filepath.Join(cfg.Config.DataDir, rel) - if d.IsDir() { - return os.MkdirAll(dest, 0755) + cfg.Config.LastDataDir = cfg.Config.DataDir + + encoder := toml.NewEncoder(f) + + err = encoder.Encode(cfg) + if err != nil { + return err + } + f.WriteString("\n\n# BE CAREFULL CHANGING BIN_DIR, BECAUSE THE BINARIES DON'T MOVE AUTOMATICALLY\n#NEVER CHANGE lastDataDir\n") + os.Remove(cfg.Config.LastDataDir) + + case "y": + if err := os.MkdirAll(cfg.Config.DataDir, 0755); err != nil { + return err } - return os.Rename(last, dest) + bar := progressbar.NewOptions64(-1, + progressbar.OptionSetDescription("Moving ..."), + ) - }) - if err != nil { - return err - } + err := filepath.WalkDir(cfg.Config.LastDataDir, func(last string, d fs.DirEntry, walkErr error) error { + if walkErr != nil { + return walkErr + } - f, err := os.OpenFile(filepath.Join(PacketsDir, "config.toml"), os.O_WRONLY, 0644) - if err != nil { - return err - } + if last == cfg.Config.LastDataDir { + return nil + } - cfg.Config.LastDataDir = cfg.Config.DataDir + rel, err := filepath.Rel(cfg.Config.LastDataDir, last) + if err != nil { + return err + } + dest := filepath.Join(cfg.Config.DataDir, rel) - encoder := toml.NewEncoder(f) + if d.IsDir() { + return os.MkdirAll(dest, 0755) + } - err = encoder.Encode(cfg) - if err != nil { + return os.Rename(last, dest) + + }) + if err != nil { + return err + } + + f, err := os.OpenFile(filepath.Join(PacketsDir, "config.toml"), os.O_WRONLY, 0644) + if err != nil { + return err + } + + cfg.Config.LastDataDir = cfg.Config.DataDir + + encoder := toml.NewEncoder(f) + + err = encoder.Encode(cfg) + if err != nil { + bar.Finish() + return err + } + f.WriteString("\n\n# BE CAREFULL CHANGING BIN_DIR, BECAUSE THE BINARIES DON'T MOVE AUTOMATICALLY\n#NEVER CHANGE lastDataDir\n") + os.Remove(cfg.Config.LastDataDir) bar.Finish() - return err - } - f.WriteString("\n\n# BE CAREFULL CHANGING BIN_DIR, BECAUSE THE BINARIES DON'T MOVE AUTOMATICALLY\n#NEVER CHANGE lastDataDir\n") - os.Remove(cfg.Config.LastDataDir) - bar.Finish() - default: - if err := os.MkdirAll(cfg.Config.DataDir, 0755); err != nil { - return err - } - - bar := progressbar.NewOptions64(-1, - progressbar.OptionSetDescription("Moving ..."), - ) - - err := filepath.WalkDir(cfg.Config.LastDataDir, func(last string, d fs.DirEntry, walkErr error) error { - if walkErr != nil { - return walkErr + default: + if err := os.MkdirAll(cfg.Config.DataDir, 0755); err != nil { + return err } - if last == cfg.Config.LastDataDir { - return nil - } + bar := progressbar.NewOptions64(-1, + progressbar.OptionSetDescription("Moving ..."), + ) - rel, err := filepath.Rel(cfg.Config.LastDataDir, last) + err := filepath.WalkDir(cfg.Config.LastDataDir, func(last string, d fs.DirEntry, walkErr error) error { + if walkErr != nil { + return walkErr + } + + if last == cfg.Config.LastDataDir { + return nil + } + + rel, err := filepath.Rel(cfg.Config.LastDataDir, last) + if err != nil { + return err + } + dest := filepath.Join(cfg.Config.DataDir, rel) + + if d.IsDir() { + return os.MkdirAll(dest, 0755) + } + + return os.Rename(last, dest) + + }) if err != nil { return err } - dest := filepath.Join(cfg.Config.DataDir, rel) + bar.Finish() - if d.IsDir() { - return os.MkdirAll(dest, 0755) - } - - return os.Rename(last, dest) - - }) - if err != nil { - return err } - bar.Finish() - } return nil @@ -1187,7 +1183,7 @@ func Unninstall(realname string) error { L.SetGlobal("packets_package_dir", lua.LString(cfg.Config.DataDir)) L.SetGlobal("packets_bin_dir", lua.LString(cfg.Config.BinDir)) - L.SetGlobal("script", lua.LString(manifest.Hooks.Remove)) + L.SetGlobal("script", lua.LString(path.Join(cfg.Config.DataDir, realname, manifest.Hooks.Remove))) L.SetGlobal("data_dir", lua.LString(filepath.Join(cfg.Config.DataDir, realname, "data"))) L.SetGlobal("path_join", L.NewFunction(internal.Ljoin)) @@ -1211,7 +1207,7 @@ func Unninstall(realname string) error { ioObject.RawSetString("lines", lua.LNil) ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen)) - if err := L.DoFile(manifest.Hooks.Remove); err != nil { + if err := L.DoFile(filepath.Join(cfg.Config.DataDir, realname, manifest.Hooks.Remove)); err != nil { log.Panic(err) } @@ -1393,6 +1389,7 @@ func Upgrade(packagepath string, og_realname string, serial uint) error { totalSize, progressbar.OptionSetDescription("[2/2] Upgrading ..."), progressbar.OptionSetWriter(os.Stdout), + progressbar.OptionClearOnFinish(), ) for { @@ -1488,11 +1485,11 @@ func Upgrade(packagepath string, og_realname string, serial uint) error { ioObject.RawSetString("lines", lua.LNil) ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen)) - if err := L.DoFile(manifest.Hooks.Install); err != nil { + if err := L.DoFile(filepath.Join(cfg.Config.DataDir, name, manifest.Hooks.Install)); err != nil { log.Panic(err) } - fmt.Printf("Package %s fully installed", name) + fmt.Printf("\nPackage %s fully installed", name) var insert = Installed{ Realname: manifest.Info.Name, diff --git a/internal/internal.go b/internal/internal.go index 65cb077..5dd1060 100644 --- a/internal/internal.go +++ b/internal/internal.go @@ -4,6 +4,7 @@ import ( "archive/tar" "fmt" "io" + "log" "os" "os/exec" "path/filepath" @@ -82,7 +83,9 @@ func ManifestReadXZ(path string) (*Manifest, error) { var manifest Manifest - decoder.Decode(&manifest) + if _, err := decoder.Decode(&manifest); err != nil { + log.Fatal(err) + } return &manifest, nil } @@ -121,14 +124,17 @@ func DefaultConfigTOML() *ConfigTOML { } func IsSafe(str string) bool { - s, err := filepath.EvalSymlinks(filepath.Clean(str)) + s, err := filepath.EvalSymlinks(strings.TrimSpace(filepath.Clean(str))) if err != nil { return false } var cfg ConfigTOML toml.DecodeFile(filepath.Join(PacketsPackageDir(), "config.toml"), &cfg) - if strings.HasPrefix(s, cfg.Config.DataDir) || strings.HasPrefix(s, cfg.Config.BinDir) { + fmt.Println("[DEBUG] verificando segurança de", s) + fmt.Println("[DEBUG] dataDir =", cfg.Config.DataDir, "binDir =", cfg.Config.BinDir) + + if strings.HasPrefix(s, strings.TrimSpace(cfg.Config.DataDir)) || strings.HasPrefix(s, strings.TrimSpace(cfg.Config.BinDir)) { return true } else if strings.Contains(s, ".ssh") { @@ -297,6 +303,7 @@ func SymbolicLua(L *lua.LState) int { if err := os.Symlink(fileName, destination); err != nil { L.Push(lua.LFalse) L.Push(lua.LString("[packets] symlink failed\n" + err.Error())) + return 2 } L.Push(lua.LTrue)