better file organization

This commit is contained in:
2025-09-18 20:12:07 -03:00
parent 1c00df24a4
commit 3c770c469d
10 changed files with 361 additions and 344 deletions

68
internal/utils/utils.go Normal file
View File

@@ -0,0 +1,68 @@
package utils
import (
"archive/tar"
"io"
"log"
"net/http"
"os"
"packets/configs"
errors_packets "packets/internal/errors"
"path/filepath"
"github.com/klauspost/compress/zstd"
"github.com/pelletier/go-toml/v2"
)
func DownloadPackageHTTP(url string) (*[]byte, error) {
resp, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
if resp.StatusCode != http.StatusOK {
return nil, errors_packets.ErrResponseNot200OK
}
fileBytes, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return &fileBytes, nil
}
// ReadManifest is crucial to get package metadata it reads manifest.toml from a package file (tar.zst)
func ReadManifest(file *os.File) (*configs.Manifest, error) {
zstdReader, err := zstd.NewReader(file)
if err != nil {
return nil, err
}
defer zstdReader.Close()
tarReader := tar.NewReader(zstdReader)
for {
header, err := tarReader.Next()
if err == io.EOF {
break
}
if err != nil {
return nil, err
}
if filepath.Base(header.Name) == "manifest.toml" {
decoder := toml.NewDecoder(tarReader)
var manifest configs.Manifest
if err := decoder.Decode(&manifest); err != nil {
log.Fatal(err)
}
return &manifest, nil
}
}
return nil, errors_packets.ErrCantFindManifestTOML
}