From d509f46a7fb8a4186c8a8acba78821de7077893b Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Thu, 24 Jan 2019 02:01:00 -0800 Subject: [PATCH] Fix 404 errors, add SSL_CERT_FILE to Dockerfile Previously, missing files would return a "corrupt metadata" error because errors were not being properly handled in the S3 backend. This change catches not found errors and passes them up to be handled accordingly. Alpine Linux puts the CA cert bundle at /etc/ssl/cert.pem by default; to ensure that Go looks in that location, we now set the SSL_CERT_FILE environment variable. --- Dockerfile | 2 ++ backends/s3/s3.go | 30 ++++++++++++++---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index addad3f..c1a2f2e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,6 +13,8 @@ FROM alpine:3.8 COPY --from=build /go/bin/linx-server /usr/local/bin/linx-server ENV GOPATH /go +ENV SSL_CERT_FILE /etc/ssl/cert.pem + COPY static /go/src/github.com/andreimarcu/linx-server/static/ COPY templates /go/src/github.com/andreimarcu/linx-server/templates/ diff --git a/backends/s3/s3.go b/backends/s3/s3.go index 98b5ebc..7ae326c 100644 --- a/backends/s3/s3.go +++ b/backends/s3/s3.go @@ -22,11 +22,10 @@ type S3Backend struct { } func (b S3Backend) Delete(key string) error { - input := &s3.DeleteObjectInput{ + _, err := b.svc.DeleteObject(&s3.DeleteObjectInput{ Bucket: aws.String(b.bucket), Key: aws.String(key), - } - _, err := b.svc.DeleteObject(input) + }) if err != nil { return err } @@ -34,23 +33,22 @@ func (b S3Backend) Delete(key string) error { } func (b S3Backend) Exists(key string) (bool, error) { - input := &s3.HeadObjectInput{ + _, err := b.svc.HeadObject(&s3.HeadObjectInput{ Bucket: aws.String(b.bucket), Key: aws.String(key), - } - _, err := b.svc.HeadObject(input) + }) return err == nil, err } func (b S3Backend) Head(key string) (metadata backends.Metadata, err error) { - input := &s3.HeadObjectInput{ + var result *s3.HeadObjectOutput + result, err = b.svc.HeadObject(&s3.HeadObjectInput{ Bucket: aws.String(b.bucket), Key: aws.String(key), - } - result, err := b.svc.HeadObject(input) + }) if err != nil { if aerr, ok := err.(awserr.Error); ok { - if aerr.Code() == s3.ErrCodeNoSuchKey { + if aerr.Code() == s3.ErrCodeNoSuchKey || aerr.Code() == "NotFound" { err = backends.NotFoundErr } } @@ -62,14 +60,14 @@ func (b S3Backend) Head(key string) (metadata backends.Metadata, err error) { } func (b S3Backend) Get(key string) (metadata backends.Metadata, r io.ReadCloser, err error) { - input := &s3.GetObjectInput{ + var result *s3.GetObjectOutput + result, err = b.svc.GetObject(&s3.GetObjectInput{ Bucket: aws.String(b.bucket), Key: aws.String(key), - } - result, err := b.svc.GetObject(input) + }) if err != nil { if aerr, ok := err.(awserr.Error); ok { - if aerr.Code() == s3.ErrCodeNoSuchKey { + if aerr.Code() == s3.ErrCodeNoSuchKey || aerr.Code() == "NotFound" { err = backends.NotFoundErr } } @@ -94,7 +92,7 @@ func mapMetadata(m backends.Metadata) map[string]*string { func unmapMetadata(input map[string]*string) (m backends.Metadata, err error) { expiry, err := strconv.ParseInt(aws.StringValue(input["Expiry"]), 10, 64) if err != nil { - return + return m, err } m.Expiry = time.Unix(expiry, 0) @@ -112,7 +110,7 @@ func unmapMetadata(input map[string]*string) (m backends.Metadata, err error) { func (b S3Backend) Put(key string, r io.Reader, expiry time.Time, deleteKey string) (m backends.Metadata, err error) { tmpDst, err := ioutil.TempFile("", "linx-server-upload") if err != nil { - return + return m, err } defer tmpDst.Close() defer os.Remove(tmpDst.Name())