From 1b562e1db0f0c67b67648905a67dd1e95b02c652 Mon Sep 17 00:00:00 2001 From: Remco Date: Fri, 29 Jan 2016 16:23:25 +0100 Subject: [PATCH] improved error handlig for not existing files --- transfersh-server/handlers.go | 8 ++++---- transfersh-server/storage.go | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/transfersh-server/handlers.go b/transfersh-server/handlers.go index bad84cf..854e79b 100644 --- a/transfersh-server/handlers.go +++ b/transfersh-server/handlers.go @@ -393,7 +393,7 @@ func zipHandler(w http.ResponseWriter, r *http.Request) { reader, _, _, err := storage.Get(token, filename) if err != nil { - if err.Error() == "The specified key does not exist." { + if storage.IsNotExist(err) { http.Error(w, "File not found", 404) return } else { @@ -463,7 +463,7 @@ func tarGzHandler(w http.ResponseWriter, r *http.Request) { reader, _, contentLength, err := storage.Get(token, filename) if err != nil { - if err.Error() == "The specified key does not exist." { + if storage.IsNotExist(err) { http.Error(w, "File not found", 404) return } else { @@ -515,7 +515,7 @@ func tarHandler(w http.ResponseWriter, r *http.Request) { reader, _, contentLength, err := storage.Get(token, filename) if err != nil { - if err.Error() == "The specified key does not exist." { + if storage.IsNotExist(err) { http.Error(w, "File not found", 404) return } else { @@ -555,7 +555,7 @@ func getHandler(w http.ResponseWriter, r *http.Request) { reader, contentType, contentLength, err := storage.Get(token, filename) if err != nil { - if err.Error() == "The specified key does not exist." { + if storage.IsNotExist(err) { http.Error(w, "File not found", 404) return } else { diff --git a/transfersh-server/storage.go b/transfersh-server/storage.go index a1c1ba5..74885e9 100644 --- a/transfersh-server/storage.go +++ b/transfersh-server/storage.go @@ -3,7 +3,6 @@ package main import ( "bytes" "fmt" - "github.com/goamz/goamz/s3" "io" "log" "mime" @@ -11,12 +10,15 @@ import ( "path/filepath" "strconv" "sync" + + "github.com/goamz/goamz/s3" ) type Storage interface { Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) Head(token string, filename string) (contentType string, contentLength uint64, err error) Put(token string, filename string, reader io.Reader, contentType string, contentLength uint64) error + IsNotExist(err error) bool } type LocalStorage struct { @@ -63,6 +65,10 @@ func (s *LocalStorage) Get(token string, filename string) (reader io.ReadCloser, return } +func (s *LocalStorage) IsNotExist(err error) bool { + return os.IsNotExist(err) +} + func (s *LocalStorage) Put(token string, filename string, reader io.Reader, contentType string, contentLength uint64) error { var f io.WriteCloser var err error @@ -120,6 +126,14 @@ func (s *S3Storage) Head(token string, filename string) (contentType string, con return } +func (s *S3Storage) IsNotExist(err error) bool { + log.Printf("IsNotExist: %s, %#v", err.Error(), err) + + b := (err.Error() == "The specified key does not exist.") + b = b || (err.Error() == "Access Denied") + return b +} + func (s *S3Storage) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) { key := fmt.Sprintf("%s/%s", token, filename)