Skip to content

Commit

Permalink
Adds gzip compress/decompress
Browse files Browse the repository at this point in the history
  • Loading branch information
nickschuch committed Sep 27, 2022
1 parent b7b9322 commit b07851a
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 1 deletion.
53 changes: 53 additions & 0 deletions internal/gzip/gzip.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package gzip

import (
"bytes"
"compress/gzip"
"io"
)

// Decompress data.
func Decompress(data []byte) (resData []byte, err error) {
b := bytes.NewBuffer(data)

var r io.Reader

r, err = gzip.NewReader(b)
if err != nil {
return
}

var resB bytes.Buffer
_, err = resB.ReadFrom(r)
if err != nil {
return
}

resData = resB.Bytes()

return
}

// Compress data.
func Compress(data []byte) (compressedData []byte, err error) {
var b bytes.Buffer

gz := gzip.NewWriter(&b)

_, err = gz.Write(data)
if err != nil {
return
}

if err = gz.Flush(); err != nil {
return
}

if err = gz.Close(); err != nil {
return
}

compressedData = b.Bytes()

return
}
13 changes: 12 additions & 1 deletion internal/handler/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"github.com/aws/aws-sdk-go-v2/service/s3"

"github.com/skpr/cloudtrail-filter/internal/cloudtrail"
"github.com/skpr/cloudtrail-filter/internal/gzip"
)

// Params passed into this handler.
Expand Down Expand Up @@ -94,7 +95,12 @@ func (h *Handler) pullObject(ctx context.Context, record events.S3EventRecord) (
return file, fmt.Errorf("unable to download object: %w", err)
}

if err := json.Unmarshal(w.Bytes(), &file); err != nil {
data, err := gzip.Decompress(w.Bytes())
if err != nil {
return file, fmt.Errorf("unable to unzip object: %w", err)
}

if err := json.Unmarshal(data, &file); err != nil {
return file, fmt.Errorf("failed to marshal object: %w", err)
}

Expand Down Expand Up @@ -146,6 +152,11 @@ func (h *Handler) pushObject(ctx context.Context, record events.S3EventRecord, f
return fmt.Errorf("failed to marshal object: %w", err)
}

data, err = gzip.Compress(data)
if err != nil {
return fmt.Errorf("unable to compress object: %w", err)
}

uploader := manager.NewUploader(h.s3)

_, err = uploader.Upload(ctx, &s3.PutObjectInput{
Expand Down

0 comments on commit b07851a

Please sign in to comment.