massive changes and it works

This commit is contained in:
2025-11-23 10:58:24 -06:00
parent 30aa969433
commit 2a0ff98834
3499 changed files with 7770 additions and 634687 deletions

View File

@@ -1,10 +1,12 @@
package storage
import (
"archive/zip"
"fmt"
"io"
"os"
"path/filepath"
"strings"
)
// Storage handles file storage operations
@@ -135,3 +137,60 @@ func (s *Storage) GetFileSize(filePath string) (int64, error) {
return info.Size(), nil
}
// ExtractZip extracts a ZIP file to the destination directory
// Returns a list of all extracted file paths
func (s *Storage) ExtractZip(zipPath, destDir string) ([]string, error) {
r, err := zip.OpenReader(zipPath)
if err != nil {
return nil, fmt.Errorf("failed to open ZIP file: %w", err)
}
defer r.Close()
var extractedFiles []string
for _, f := range r.File {
// Sanitize file path to prevent directory traversal
destPath := filepath.Join(destDir, f.Name)
if !strings.HasPrefix(destPath, filepath.Clean(destDir)+string(os.PathSeparator)) {
return nil, fmt.Errorf("invalid file path in ZIP: %s", f.Name)
}
// Create directory structure
if f.FileInfo().IsDir() {
if err := os.MkdirAll(destPath, 0755); err != nil {
return nil, fmt.Errorf("failed to create directory: %w", err)
}
continue
}
// Create parent directories
if err := os.MkdirAll(filepath.Dir(destPath), 0755); err != nil {
return nil, fmt.Errorf("failed to create parent directory: %w", err)
}
// Extract file
rc, err := f.Open()
if err != nil {
return nil, fmt.Errorf("failed to open file in ZIP: %w", err)
}
outFile, err := os.Create(destPath)
if err != nil {
rc.Close()
return nil, fmt.Errorf("failed to create file: %w", err)
}
_, err = io.Copy(outFile, rc)
outFile.Close()
rc.Close()
if err != nil {
return nil, fmt.Errorf("failed to extract file: %w", err)
}
extractedFiles = append(extractedFiles, destPath)
}
return extractedFiles, nil
}