Skip to content

Commit

Permalink
Improve error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
ybizeul committed Aug 21, 2023
1 parent fafa5bf commit 57e1cca
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 29 deletions.
16 changes: 14 additions & 2 deletions internal/feed/feed.go
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,12 @@ func (feed *Feed) GetItem(item string) ([]byte, error) {
filePath := path.Join(feed.path, item)
content, err := os.ReadFile(filePath)
if err != nil {
if os.IsNotExist(err) {
return nil, &FeedError{
Code: 404,
Message: fmt.Sprintf("File does not exists (%s)", filePath),
}
}
return nil, &FeedError{
Code: 500,
Message: fmt.Sprintf("Unable to open file '%s' for read", filePath),
Expand All @@ -236,7 +242,7 @@ func (feed *Feed) AddItem(contentType string, f io.ReadCloser) error {

if len(ext) == 0 {
return &FeedError{
Code: 500,
Code: 400,
Message: "Content-type not accepted",
}
}
Expand Down Expand Up @@ -292,9 +298,15 @@ func (feed *Feed) RemoveItem(item string) error {

err := os.Remove(itemPath)
if err != nil {
if os.IsNotExist(err) {
return &FeedError{
Code: 404,
Message: err.Error(),
}
}
return &FeedError{
Code: 500,
Message: "Unable to delete file",
Message: err.Error(),
}
}
slog.Info("Removed Item", slog.String("name", item), slog.String("feed", feed.Name))
Expand Down
47 changes: 20 additions & 27 deletions internal/handlers/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ func (api *ApiHandler) feedPatchHandlerFunc(w http.ResponseWriter, r *http.Reque
}

if len(pin) != 4 {
w.WriteHeader(500)
w.WriteHeader(400)
w.Write([]byte("Malformed PIN"))
return
}
Expand All @@ -173,7 +173,7 @@ func (api *ApiHandler) feedItemHandlerFunc(w http.ResponseWriter, r *http.Reques
if err != nil {
yberr := err.(*feed.FeedError)
if yberr.Code == 404 {
w.WriteHeader(401)
w.WriteHeader(404)
w.Write([]byte("No such feed"))
return
} else if yberr.Code == 401 {
Expand All @@ -195,11 +195,9 @@ func (api *ApiHandler) feedItemHandlerFunc(w http.ResponseWriter, r *http.Reques

if err != nil {
yberr := err.(*feed.FeedError)
if yberr.Code == 500 {
w.WriteHeader(500)
w.Write([]byte(yberr.Error()))
return
}
w.WriteHeader(yberr.Code)
w.Write([]byte(yberr.Error()))
return
}
w.Write(content)
}
Expand All @@ -215,24 +213,19 @@ func (api *ApiHandler) feedPostHandlerFunc(w http.ResponseWriter, r *http.Reques

if err != nil {
yberr := err.(*feed.FeedError)
if yberr.Code == 404 {
w.WriteHeader(401)
w.Write([]byte("No such feed"))
return
} else if yberr.Code == 401 {
w.WriteHeader(401)
w.Write([]byte(err.Error()))
return
}
w.WriteHeader(yberr.Code)
w.Write([]byte(yberr.Message))
return
}

contentType := r.Header.Get("Content-type")

err = f.AddItem(contentType, r.Body)

if err != nil {
w.WriteHeader(500)
w.Write([]byte(err.Error()))
yberr := err.(*feed.FeedError)
w.WriteHeader(yberr.Code)
w.Write([]byte(yberr.Error()))
return
}

Expand All @@ -250,15 +243,9 @@ func (api *ApiHandler) feedItemDeleteHandlerFunc(w http.ResponseWriter, r *http.

if err != nil {
yberr := err.(*feed.FeedError)
if yberr.Code == 404 {
w.WriteHeader(401)
w.Write([]byte("No such feed"))
return
} else if yberr.Code == 401 {
w.WriteHeader(401)
w.Write([]byte("Access denied"))
return
}
w.WriteHeader(yberr.Code)
w.Write([]byte(yberr.Message))
return
}

item, err := url.QueryUnescape(strings.Split(r.URL.Path, "/")[4])
Expand All @@ -268,5 +255,11 @@ func (api *ApiHandler) feedItemDeleteHandlerFunc(w http.ResponseWriter, r *http.
return
}
err = f.RemoveItem(item)
if err != nil {
yberr := err.(*feed.FeedError)
w.WriteHeader(yberr.Code)
w.Write([]byte(yberr.Error()))
return
}
w.Write([]byte("Item Removed"))
}

0 comments on commit 57e1cca

Please sign in to comment.