Skip to content

Commit

Permalink
fix: decode object key (#96)
Browse files Browse the repository at this point in the history
  • Loading branch information
jshlbrd committed Apr 14, 2023
1 parent 0adf249 commit 9e7a6db
Showing 1 changed file with 24 additions and 6 deletions.
30 changes: 24 additions & 6 deletions cmd/aws/lambda/substation/s3.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"encoding/json"
"fmt"
"net/url"
"os"
"sync"
"time"
Expand Down Expand Up @@ -63,10 +64,18 @@ func s3Handler(ctx context.Context, event events.S3Event) error {

group.Go(func() error {
for _, record := range event.Records {
// the S3 object key is URL encoded
//
// https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-content-structure.html
objectKey, err := url.QueryUnescape(record.S3.Object.Key)
if err != nil {
return fmt.Errorf("s3 sns handler: %v", err)
}

log.WithField(
"bucket", record.S3.Bucket.Name,
).WithField(
"key", record.S3.Object.Key,
"key", objectKey,
).Debug("received S3 trigger")

dst, err := os.CreateTemp("", "substation")
Expand All @@ -76,7 +85,7 @@ func s3Handler(ctx context.Context, event events.S3Event) error {
defer os.Remove(dst.Name())
defer dst.Close()

if _, err := api.Download(ctx, record.S3.Bucket.Name, record.S3.Object.Key, dst); err != nil {
if _, err := api.Download(ctx, record.S3.Bucket.Name, objectKey, dst); err != nil {
return fmt.Errorf("s3 handler: %v", err)
}

Expand All @@ -85,7 +94,7 @@ func s3Handler(ctx context.Context, event events.S3Event) error {
record.EventTime,
record.S3.Bucket.Arn,
record.S3.Bucket.Name,
record.S3.Object.Key,
objectKey,
record.S3.Object.Size,
}); err != nil {
return fmt.Errorf("s3 handler: %v", err)
Expand Down Expand Up @@ -129,6 +138,7 @@ func s3Handler(ctx context.Context, event events.S3Event) error {
return nil
}

//nolint:gocognit
func s3SnsHandler(ctx context.Context, event events.SNSEvent) error {
sub := cmd.New()

Expand Down Expand Up @@ -174,10 +184,18 @@ func s3SnsHandler(ctx context.Context, event events.SNSEvent) error {
}

for _, record := range s3Event.Records {
// the S3 object key is URL encoded
//
// https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-content-structure.html
objectKey, err := url.QueryUnescape(record.S3.Object.Key)
if err != nil {
return fmt.Errorf("s3 sns handler: %v", err)
}

log.WithField(
"bucket", record.S3.Bucket.Name,
).WithField(
"key", record.S3.Object.Key,
"key", objectKey,
).Debug("received S3 trigger")

dst, err := os.CreateTemp("", "substation")
Expand All @@ -187,7 +205,7 @@ func s3SnsHandler(ctx context.Context, event events.SNSEvent) error {
defer os.Remove(dst.Name())
defer dst.Close()

if _, err := api.Download(ctx, record.S3.Bucket.Name, record.S3.Object.Key, dst); err != nil {
if _, err := api.Download(ctx, record.S3.Bucket.Name, objectKey, dst); err != nil {
return fmt.Errorf("s3 sns handler: %v", err)
}

Expand All @@ -196,7 +214,7 @@ func s3SnsHandler(ctx context.Context, event events.SNSEvent) error {
record.EventTime,
record.S3.Bucket.Arn,
record.S3.Bucket.Name,
record.S3.Object.Key,
objectKey,
record.S3.Object.Size,
}); err != nil {
return fmt.Errorf("s3 sns handler: %v", err)
Expand Down

0 comments on commit 9e7a6db

Please sign in to comment.