From 7b3eb8927cb624b408819b4ddde023dc78b44c03 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Tue, 12 Nov 2019 15:14:33 +0100 Subject: [PATCH] Improve error reporting --- page_image_detail.go | 28 +++++++++++++++++++--------- util.go | 9 +++++++++ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/page_image_detail.go b/page_image_detail.go index 91aa924..2cc76cf 100644 --- a/page_image_detail.go +++ b/page_image_detail.go @@ -17,8 +17,8 @@ type ImageDetailData struct { func pageImageDetail(ctx PageContext) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { user := parseUser(r) - _, imageId := path.Split(r.URL.Path) + result, err := ctx.Database.Query(` SELECT id, @@ -32,15 +32,20 @@ func pageImageDetail(ctx PageContext) http.Handler { WHERE id = $1 `, imageId) if err != nil { - panic(err) + fmt.Printf("An error occured: %s", err.Error()) + _ = returnError(w, http.StatusInternalServerError, "Internal Server Error") + return } var info Image + if result.Next() { var owner string err := result.Scan(&info.Id, &owner, &info.Title, &info.Description, &info.CreatedAt, &info.OriginalName, &info.MimeType) if err != nil { - panic(err) + fmt.Printf("An error occured: %s", err.Error()) + _ = returnError(w, http.StatusInternalServerError, "Internal Server Error") + return } switch r.PostFormValue("action") { @@ -53,10 +58,12 @@ func pageImageDetail(ctx PageContext) http.Handler { user.Id, ) if err != nil { - panic(err) + fmt.Printf("An error occured: %s", err.Error()) + _ = returnError(w, http.StatusInternalServerError, "Internal Server Error") + return } if r.PostFormValue("from_js") == "true" { - returnJson(w, true) + _ = returnJson(w, true) } else { http.Redirect(w, r, r.URL.Path, http.StatusFound) } @@ -64,12 +71,16 @@ func pageImageDetail(ctx PageContext) http.Handler { case "delete": _, err = ctx.Database.Exec("DELETE FROM images WHERE id = $1 AND owner = $2", info.Id, user.Id) if err != nil { - panic(err) + fmt.Printf("An error occured: %s", err.Error()) + _ = returnError(w, http.StatusInternalServerError, "Internal Server Error") + return } for _, definition := range ctx.Config.Sizes { err := os.Remove(path.Join(ctx.Config.TargetFolder, fmt.Sprintf("%s%s", info.Id, definition.Suffix))) if err != nil && !os.IsNotExist(err) { - panic(err) + fmt.Printf("An error occured: %s", err.Error()) + _ = returnError(w, http.StatusInternalServerError, "Internal Server Error") + return } } http.Redirect(w, r, "/me/images", http.StatusFound) @@ -86,7 +97,6 @@ func pageImageDetail(ctx PageContext) http.Handler { return } - w.WriteHeader(http.StatusNotFound) - fmt.Fprint(w, "Image not found") + _ = returnError(w, http.StatusNotFound, "Image Not Found") }) } diff --git a/util.go b/util.go index 0b0fe0d..0a69e89 100644 --- a/util.go +++ b/util.go @@ -73,6 +73,15 @@ func returnJson(w http.ResponseWriter, data interface{}) error { return nil } +func returnError(w http.ResponseWriter, code int, message string) error { + w.WriteHeader(code) + if _, err := w.Write([]byte(message)); err != nil { + return err + } + + return nil +} + func formatTemplate(w http.ResponseWriter, templateName string, data interface{}) error { pageTemplate, err := template.ParseFiles( "templates/_base.html", -- GitLab