From 1579e59dca33552813422badecd0312fca7de5e0 Mon Sep 17 00:00:00 2001 From: video-prize-ranch Date: Sun, 4 Feb 2024 21:24:55 -0500 Subject: [PATCH] Errors in image format (closes #165) --- main.go | 18 ++++++++++-------- pages/embed.go | 4 ++-- pages/media.go | 36 +++++++++++++++++------------------ pages/post.go | 8 +++----- pages/privacy.go | 1 + pages/tag.go | 14 ++++++-------- pages/user.go | 31 +++++++++--------------------- static/img/error-404.png | Bin 0 -> 16607 bytes static/img/error-429.png | Bin 0 -> 19021 bytes static/img/error-generic.png | Bin 0 -> 17141 bytes utils/error.go | 25 ++++++++++++++++++++++++ 11 files changed, 73 insertions(+), 64 deletions(-) create mode 100644 static/img/error-404.png create mode 100644 static/img/error-429.png create mode 100644 static/img/error-generic.png create mode 100644 utils/error.go diff --git a/main.go b/main.go index e3e36a7..24ab8f1 100644 --- a/main.go +++ b/main.go @@ -52,14 +52,7 @@ func main() { code = e.Code } - err = ctx.Status(code).Render("errors/error", fiber.Map{ - "err": err, - }) - if err != nil { - return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") - } - - return nil + return utils.RenderError(ctx, code) }, }) @@ -77,14 +70,23 @@ func main() { app.Get("/errors/429", func(c *fiber.Ctx) error { return c.Render("errors/429", nil) }) + app.Get("/errors/429/img", func(c *fiber.Ctx) error { + return c.Redirect("/static/img/error-429.png") + }) app.Get("/errors/404", func(c *fiber.Ctx) error { return c.Render("errors/404", nil) }) + app.Get("/errors/404/img", func(c *fiber.Ctx) error { + return c.Redirect("/static/img/error-404.png") + }) app.Get("/errors/error", func(c *fiber.Ctx) error { return c.Render("errors/error", fiber.Map{ "err": "Test error", }) }) + app.Get("/errors/error/img", func(c *fiber.Ctx) error { + return c.Redirect("/static/img/error-generic.png") + }) } else { app.Use("/static", filesystem.New(filesystem.Config{ MaxAge: 2592000, diff --git a/pages/embed.go b/pages/embed.go index d48844d..bf25e8b 100644 --- a/pages/embed.go +++ b/pages/embed.go @@ -23,10 +23,10 @@ func HandleEmbed(c *fiber.Ctx) error { post, err = ApiClient.FetchMedia(c.Params("postID")) } if err != nil && err.Error() == "ratelimited by imgur" { - return c.Status(429).Render("errors/429", nil) + return utils.RenderError(c, 429) } if err != nil && post.Id == "" && strings.Contains(err.Error(), "404") { - return c.Status(404).Render("errors/404", nil) + return utils.RenderError(c, 404) } if err != nil { return err diff --git a/pages/media.go b/pages/media.go index 34208db..1e9df14 100644 --- a/pages/media.go +++ b/pages/media.go @@ -11,22 +11,25 @@ import ( func HandleMedia(c *fiber.Ctx) error { c.Set("Cache-Control", "public,max-age=31557600") + c.Set("Content-Security-Policy", "default-src 'none'; style-src 'self'; img-src 'self'") if strings.HasPrefix(c.Path(), "/stack") { - return handleMedia(c, "https://i.stack.imgur.com/" + strings.ReplaceAll(c.Params("baseName"), "stack/", "") + "." + c.Params("extension")) + return handleMedia(c, "https://i.stack.imgur.com/"+strings.ReplaceAll(c.Params("baseName"), "stack/", "")+"."+c.Params("extension")) } else { - return handleMedia(c, "https://i.imgur.com/" + c.Params("baseName") + "." + c.Params("extension")) + return handleMedia(c, "https://i.imgur.com/"+c.Params("baseName")+"."+c.Params("extension")) } } func HandleUserCover(c *fiber.Ctx) error { c.Set("Cache-Control", "public,max-age=604800") - return handleMedia(c, "https://imgur.com/user/" + c.Params("userID") + "/cover?maxwidth=2560") -}; + c.Set("Content-Security-Policy", "default-src 'none'") + return handleMedia(c, "https://imgur.com/user/"+c.Params("userID")+"/cover?maxwidth=2560") +} func HandleUserAvatar(c *fiber.Ctx) error { c.Set("Cache-Control", "public,max-age=604800") - return handleMedia(c, "https://imgur.com/user/" + c.Params("userID") + "/avatar") -}; + c.Set("Content-Security-Policy", "default-src 'none'") + return handleMedia(c, "https://imgur.com/user/"+c.Params("userID")+"/avatar") +} func handleMedia(c *fiber.Ctx, url string) error { utils.SetHeaders(c) @@ -45,7 +48,7 @@ func handleMedia(c *fiber.Ctx, url string) error { if err != nil { return err } - + utils.SetReqHeaders(req) if c.Get("Range") != "" { @@ -57,23 +60,18 @@ func handleMedia(c *fiber.Ctx, url string) error { return err } - c.Status(res.StatusCode) - if res.StatusCode == 404 { - return c.Render("errors/404", fiber.Map{ - "path": c.Path(), - }) + if res.StatusCode == 404 || strings.Contains(res.Request.URL.String(), "error/404") { + return utils.RenderError(c, 404) } else if res.StatusCode == 429 { - return c.Render("errors/429", fiber.Map{ - "path": c.Path(), - }) + return utils.RenderError(c, 429) } - + c.Set("Accept-Ranges", "bytes") - c.Set("Content-Type", res.Header.Get("Content-Type")); + c.Set("Content-Type", res.Header.Get("Content-Type")) c.Set("Content-Length", res.Header.Get("Content-Length")) if res.Header.Get("Content-Range") != "" { c.Set("Content-Range", res.Header.Get("Content-Range")) } - + return c.SendStream(res.Body) -} \ No newline at end of file +} diff --git a/pages/post.go b/pages/post.go index 7a876e4..cfa8b47 100644 --- a/pages/post.go +++ b/pages/post.go @@ -26,14 +26,12 @@ func HandlePost(c *fiber.Ctx) error { post, err = ApiClient.FetchMedia(c.Params("postID")) } if err != nil && err.Error() == "ratelimited by imgur" { - return c.Status(429).Render("errors/429", fiber.Map{ - "path": c.Path(), - }) + return utils.RenderError(c, 429) } if err != nil && post.Id == "" && strings.Contains(err.Error(), "404") { - return c.Status(404).Render("errors/404", nil) + return utils.RenderError(c, 404) } - if err != nil { + if err != nil { return err } diff --git a/pages/privacy.go b/pages/privacy.go index 2d7851b..c2591e9 100644 --- a/pages/privacy.go +++ b/pages/privacy.go @@ -9,6 +9,7 @@ import ( func HandlePrivacy(c *fiber.Ctx) error { utils.SetHeaders(c) c.Set("X-Frame-Options", "DENY") + c.Set("Content-Security-Policy", "default-src 'none'; form-action 'self'; style-src 'self'; img-src 'self'; manifest-src 'self'; block-all-mixed-content") return c.Render("privacy", fiber.Map{ "config": utils.Config, diff --git a/pages/tag.go b/pages/tag.go index de086ec..145ef49 100644 --- a/pages/tag.go +++ b/pages/tag.go @@ -25,21 +25,19 @@ func HandleTag(c *fiber.Ctx) error { tag, err := ApiClient.FetchTag(c.Params("tag"), c.Query("sort"), page) if err != nil && err.Error() == "ratelimited by imgur" { - return c.Status(429).Render("errors/429", fiber.Map{ - "path": c.Path(), - }) + return utils.RenderError(c, 429) } if err != nil { return err } if tag.Display == "" { - return c.Status(404).Render("errors/404", nil) + return utils.RenderError(c, 404) } return c.Render("tag", fiber.Map{ - "tag": tag, - "page": page, - "nextPage": pageNumber + 1, - "prevPage": pageNumber - 1, + "tag": tag, + "page": page, + "nextPage": pageNumber + 1, + "prevPage": pageNumber - 1, }) } diff --git a/pages/user.go b/pages/user.go index 42da651..3a07e57 100644 --- a/pages/user.go +++ b/pages/user.go @@ -25,23 +25,19 @@ func HandleUser(c *fiber.Ctx) error { user, err := ApiClient.FetchUser(c.Params("userID")) if err != nil && err.Error() == "ratelimited by imgur" { - return c.Status(429).Render("errors/429", fiber.Map{ - "path": c.Path(), - }) + return utils.RenderError(c, 429) } if err != nil { return err } if user.Username == "" { - return c.Status(404).Render("errors/404", nil) + return utils.RenderError(c, 404) } submissions, err := ApiClient.FetchSubmissions(c.Params("userID"), "newest", page) if err != nil && err.Error() == "ratelimited by imgur" { c.Status(429) - return c.Render("errors/429", fiber.Map{ - "path": c.Path(), - }) + return utils.RenderError(c, 429) } if err != nil { return err @@ -64,23 +60,19 @@ func HandleUserComments(c *fiber.Ctx) error { user, err := ApiClient.FetchUser(c.Params("userID")) if err != nil && err.Error() == "ratelimited by imgur" { - return c.Status(429).Render("errors/429", fiber.Map{ - "path": c.Path(), - }) + return utils.RenderError(c, 429) } if err != nil { return err } if user.Username == "" { - return c.Status(404).Render("errors/404", nil) + return utils.RenderError(c, 404) } comments, err := ApiClient.FetchUserComments(c.Params("userID")) if err != nil && err.Error() == "ratelimited by imgur" { c.Status(429) - return c.Render("errors/429", fiber.Map{ - "path": c.Path(), - }) + return utils.RenderError(c, 429) } if err != nil { return err @@ -110,23 +102,18 @@ func HandleUserFavorites(c *fiber.Ctx) error { user, err := ApiClient.FetchUser(c.Params("userID")) if err != nil && err.Error() == "ratelimited by imgur" { - return c.Status(429).Render("errors/429", fiber.Map{ - "path": c.Path(), - }) + return utils.RenderError(c, 429) } if err != nil { return err } if user.Username == "" { - return c.Status(404).Render("errors/404", nil) + return utils.RenderError(c, 404) } favorites, err := ApiClient.FetchUserFavorites(c.Params("userID"), "newest", page) if err != nil && err.Error() == "ratelimited by imgur" { - c.Status(429) - return c.Render("errors/429", fiber.Map{ - "path": c.Path(), - }) + return utils.RenderError(c, 429) } if err != nil { return err diff --git a/static/img/error-404.png b/static/img/error-404.png new file mode 100644 index 0000000000000000000000000000000000000000..4cfa41762a8a26cadce8c6c56c4602a4b5293bc7 GIT binary patch literal 16607 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 literal 0 HcmV?d00001 diff --git a/static/img/error-429.png b/static/img/error-429.png new file mode 100644 index 0000000000000000000000000000000000000000..c8eba31715ea733b01ae74625b43f8c1dba9f23e GIT binary patch literal 19021 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 literal 0 HcmV?d00001 diff --git a/static/img/error-generic.png b/static/img/error-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..869ddb8fa6c2395b62cd1d8ef3802225447a22af GIT binary patch literal 17141 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