From 331dba55f14a0005f1eff62e9136091b1ef4d24d Mon Sep 17 00:00:00 2001 From: roboogg133 Date: Tue, 12 Aug 2025 17:55:57 -0300 Subject: [PATCH] started to use cobra ( need to test this version) --- cmd/packets/main.go | 337 +++++++++++++++++++++++--------------------- 1 file changed, 176 insertions(+), 161 deletions(-) diff --git a/cmd/packets/main.go b/cmd/packets/main.go index fa462fc..79ba043 100644 --- a/cmd/packets/main.go +++ b/cmd/packets/main.go @@ -28,6 +28,7 @@ import ( "github.com/BurntSushi/toml" "github.com/klauspost/compress/zstd" "github.com/schollz/progressbar/v3" + "github.com/spf13/cobra" lua "github.com/yuin/gopher-lua" "golang.org/x/net/ipv4" _ "modernc.org/sqlite" @@ -103,56 +104,21 @@ var serialPass uint var cfg ConfigTOML var PacketsDir string -func main() { +var isUpgrade bool +var upgradeHelper string - PacketsDir = internal.PacketsPackageDir() +var rootCmd = &cobra.Command{Use: "packets"} - _, err := os.Stat(filepath.Join(PacketsDir, "config.toml")) - if os.IsNotExist(err) { - fmt.Println("can't find config.toml, generating a default one") - - os.MkdirAll(PacketsDir, 0644) - file, err := os.Create(filepath.Join(PacketsDir, "config.toml")) - if err != nil { - log.Fatal(err) - } - defer file.Close() - - cfg := internal.DefaultConfigTOML() - - encoder := toml.NewEncoder(file) - - if err := encoder.Encode(cfg); err != nil { - log.Fatal(err) - } - file.WriteString("\n\n# BE CAREFULL CHANGING BIN_DIR, BECAUSE THE BINARIES DON'T MOVE AUTOMATICALLY\n# NEVER CHANGE lastDataDir\n") - fmt.Println("Operation Sucess!") - } - - _, err = toml.DecodeFile(filepath.Join(PacketsDir, "config.toml"), &cfg) - if err != nil { - log.Fatal(err) - } - - if len(os.Args) < 2 { - fmt.Println("invalid syntax") - return - } - - cmd := os.Args[1] - - switch cmd { - case "install": +var installCmd = &cobra.Command{ + Use: "install {package} [packages...]", + Short: "Install a package", + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { if os.Getuid() != 0 { fmt.Println("please, run as root") return } - if len(os.Args) < 3 { - fmt.Println("usage: packets install ") - return - } - db, err := sql.Open("sqlite", filepath.Join(PacketsDir, "index.db")) if err != nil { log.Fatal(err) @@ -160,7 +126,7 @@ func main() { } defer db.Close() - nameToQuery := os.Args[2] + nameToQuery := args[0] var exist bool db.QueryRow("SELECT EXISTS(SELECT 1 FROM packages WHERE realname = ? LIMIT 1)", nameToQuery).Scan(&exist) if exist { @@ -215,61 +181,63 @@ func main() { QueryInstall(pkgs[choice].Realname) return } + }, +} - case "serve": +var serve = &cobra.Command{ + Use: "serve", + Short: "Start or stops the packets daemon", +} + +var serveInit = &cobra.Command{ + Use: "init", + Short: "Starts the packets daemon", + Run: func(cmd *cobra.Command, args []string) { + var sockets [2]string + sockets[0] = filepath.Join(PacketsDir, "udpsocket") + sockets[1] = filepath.Join(PacketsDir, "httpsocket") + + for _, v := range sockets { + abs, _ := filepath.Abs(v) + cmd := exec.Command(abs) + cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr + if err := cmd.Start(); err != nil { + log.Fatalf("failed to start %s: %v", v, err) + } + + } + }, +} +var serveStop = &cobra.Command{ + Use: "stop", + Short: "Stops the packets daemon", + Run: func(cmd *cobra.Command, args []string) { + var pidfiles [2]string + pidfiles[0] = filepath.Join(PacketsDir, "http.pid") + pidfiles[1] = filepath.Join(PacketsDir, "udp.pid") + + for _, v := range pidfiles { + data, err := os.ReadFile(v) + if err != nil { + fmt.Println("cant read PID:", err) + return + } + pid, _ := strconv.Atoi(string(data)) + syscall.Kill(pid, syscall.SIGTERM) + } + }, +} + +var syncCmd = &cobra.Command{ + Use: "sync [url]", + Short: "Syncronizes with an remote index.db, and check if the data dir is changed", + Run: func(cmd *cobra.Command, args []string) { if os.Getuid() != 0 { fmt.Println("please, run as root") return } - if len(os.Args) < 3 { - fmt.Println("usage: packets serve