diff --git a/utils/utils.go b/utils/utils.go index b537f8163ddf17b48b95a2cd6565e0aed13c210e..64e0101f8227a5bd8f8d285f350997127a0109e8 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -1,19 +1,14 @@ package utils import ( - "archive/zip" - "bytes" + "github.com/mohae/deepcopy" "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/errors" "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/string_utils" - "io/ioutil" "net/mail" "net/url" "os" "regexp" "strings" - "time" - - "github.com/mohae/deepcopy" ) // GetEnv is a helper function for getting environment variables with a default @@ -37,69 +32,6 @@ func CorsHeaders() map[string]string { } } -func ZipData(fileName string, data []byte) ([]byte, error) { - // Create zip - buf := new(bytes.Buffer) - - // Create a new zip archive. - zipWriter := zip.NewWriter(buf) - - header := &zip.FileHeader{ - Name: fileName, - Method: zip.Deflate, - Modified: time.Now(), - } - - // Write data - file, err := zipWriter.CreateHeader(header) - if err != nil { - return nil, err - } - _, err = file.Write(data) - if err != nil { - return nil, err - } - - // Close zip - err = zipWriter.Close() - if err != nil { - return []byte(""), err - } - - return buf.Bytes(), nil -} - -func UnzipData(data []byte) (map[string][]byte, error) { - // Create a new zip reader. - zipReader, err := zip.NewReader(bytes.NewReader(data), int64(len(data))) - if err != nil { - return nil, err - } - - // Read all the files from zip archive - var fileData = make(map[string][]byte) - for _, zipFile := range zipReader.File { - unzippedData, err := readZipFile(zipFile) - if err != nil { - continue - } - - fileData[zipFile.FileHeader.Name] = unzippedData - } - - return fileData, nil -} - -func readZipFile(zipFile *zip.File) ([]byte, error) { - zipFileData, err := zipFile.Open() - if err != nil { - return nil, err - } - defer zipFileData.Close() - - return ioutil.ReadAll(zipFileData) -} - func DeepCopy(fromValue interface{}) (toValue interface{}) { return deepcopy.Copy(fromValue) } diff --git a/zip_utils/zip_utils.go b/zip_utils/zip_utils.go new file mode 100644 index 0000000000000000000000000000000000000000..7edc3e6922aad8fa93fc481ebf0b491adcae525f --- /dev/null +++ b/zip_utils/zip_utils.go @@ -0,0 +1,84 @@ +package zip_utils + +import ( + "archive/zip" + "bytes" + "io" + "time" +) + +func ZipData(fileName string, data []byte) ([]byte, error) { + // Create zip + buf := new(bytes.Buffer) + + // Create a new zip archive. + zipWriter := zip.NewWriter(buf) + + header := &zip.FileHeader{ + Name: fileName, + Method: zip.Deflate, + Modified: time.Now(), + } + + // Write data + file, err := zipWriter.CreateHeader(header) + if err != nil { + return nil, err + } + _, err = file.Write(data) + if err != nil { + return nil, err + } + + // Close zip + err = zipWriter.Close() + if err != nil { + return []byte(""), err + } + + return buf.Bytes(), nil +} + +func UnzipData(data []byte) (map[string][]byte, error) { + // Create a new zip reader. + zipReader, err := zip.NewReader(bytes.NewReader(data), int64(len(data))) + if err != nil { + return nil, err + } + + // Read all the files from zip archive + var fileData = make(map[string][]byte) + for _, zipFile := range zipReader.File { + unzippedData, err := readZipFile(zipFile) + if err != nil { + continue + } + + fileData[zipFile.FileHeader.Name] = unzippedData + } + + return fileData, nil +} + +func readZipFile(zipFile *zip.File) ([]byte, error) { + zipFileData, err := zipFile.Open() + if err != nil { + return nil, err + } + defer zipFileData.Close() + + return io.ReadAll(zipFileData) +} + +func AddFileToZip(fileName string, fileBytes []byte, zipWriter *zip.Writer) error { + file, err := zipWriter.Create(fileName) + if err != nil { + return err + } + _, err = file.Write(fileBytes) + if err != nil { + return err + } + + return nil +}