Browse Source

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.
pull/156/head
mutantmonkey 6 years ago
parent
commit
d509f46a7f
  1. 2
      Dockerfile
  2. 30
      backends/s3/s3.go

2
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/

30
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())

Loading…
Cancel
Save