mirror of
https://codeberg.org/video-prize-ranch/rimgo.git
synced 2026-01-28 09:31:13 +00:00
refactor api package comments
* use encoding/json for comment parsing * refactor by moving loop code to an UnmarshalJSON * use a preallocated array and indices to maintain order while using goroutines again, this was removed a while ago * use new struct in comment.hbs and contextComment.hbs * rewriteUrl partial to reduce rimgo-specific code in api * move RenderError into pages package to avoid import cycle between render and utils
This commit is contained in:
@@ -24,10 +24,10 @@ func HandleEmbed(w http.ResponseWriter, r *http.Request) error {
|
||||
post, err = ApiClient.FetchMedia(r.PathValue("postID"))
|
||||
}
|
||||
if err != nil && err.Error() == "ratelimited by imgur" {
|
||||
return utils.RenderError(w, r, 429)
|
||||
return RenderError(w, r, 429)
|
||||
}
|
||||
if err != nil && post.Id == "" && strings.Contains(err.Error(), "404") {
|
||||
return utils.RenderError(w, r, 404)
|
||||
return RenderError(w, r, 404)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
44
pages/error.go
Normal file
44
pages/error.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package pages
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"codeberg.org/rimgo/rimgo/render"
|
||||
"codeberg.org/rimgo/rimgo/static"
|
||||
"codeberg.org/rimgo/rimgo/utils"
|
||||
)
|
||||
|
||||
func RenderError(w http.ResponseWriter, r *http.Request, code int, str ...string) (err error) {
|
||||
if len(str) != 1 {
|
||||
str = []string{""}
|
||||
}
|
||||
codeStr := "generic"
|
||||
if code == 0 {
|
||||
code = 500
|
||||
}
|
||||
if code != 500 {
|
||||
codeStr = strconv.Itoa(code)
|
||||
}
|
||||
if !utils.Accepts(r, "text/html") && r.PathValue("extension") != "" {
|
||||
w.Header().Set("Content-Type", "image/png")
|
||||
w.WriteHeader(code)
|
||||
file, _ := static.GetFiles().Open("img/error-" + codeStr + ".png")
|
||||
defer file.Close()
|
||||
_, err = io.Copy(w, file)
|
||||
|
||||
} else {
|
||||
w.WriteHeader(code)
|
||||
err = render.Render(w, "errors/"+codeStr, map[string]any{
|
||||
"path": r.URL.Path,
|
||||
"err": str[0],
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
// don't panic or return error, it will loop
|
||||
fmt.Println("error in RenderError: " + err.Error())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -73,9 +73,9 @@ func handleMedia(w http.ResponseWriter, r *http.Request, url string) error {
|
||||
}
|
||||
|
||||
if res.StatusCode == 404 || strings.Contains(res.Request.URL.String(), "error/404") {
|
||||
return utils.RenderError(w, r, 404)
|
||||
return RenderError(w, r, 404)
|
||||
} else if res.StatusCode == 429 {
|
||||
return utils.RenderError(w, r, 429)
|
||||
return RenderError(w, r, 429)
|
||||
}
|
||||
|
||||
w.Header().Set("Accept-Ranges", "bytes")
|
||||
|
||||
@@ -55,10 +55,10 @@ func HandlePost(w http.ResponseWriter, r *http.Request) error {
|
||||
post, err = ApiClient.FetchMedia(postId)
|
||||
}
|
||||
if err != nil && err.Error() == "ratelimited by imgur" {
|
||||
return utils.RenderError(w, r, 429)
|
||||
return RenderError(w, r, 429)
|
||||
}
|
||||
if err != nil && post.Id == "" && strings.Contains(err.Error(), "404") {
|
||||
return utils.RenderError(w, r, 404)
|
||||
return RenderError(w, r, 404)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -78,7 +78,7 @@ func HandleUserRSS(w http.ResponseWriter, r *http.Request) error {
|
||||
|
||||
submissions, err := ApiClient.FetchSubmissions(user, "newest", "1")
|
||||
if err != nil && err.Error() == "ratelimited by imgur" {
|
||||
return utils.RenderError(w, r, 429)
|
||||
return RenderError(w, r, 429)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -26,13 +26,13 @@ func HandleTag(w http.ResponseWriter, r *http.Request) error {
|
||||
|
||||
tag, err := ApiClient.FetchTag(r.PathValue("tag"), r.URL.Query().Get("sort"), page)
|
||||
if err != nil && err.Error() == "ratelimited by imgur" {
|
||||
return utils.RenderError(w, r, 429)
|
||||
return RenderError(w, r, 429)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if tag.Display == "" {
|
||||
return utils.RenderError(w, r, 404)
|
||||
return RenderError(w, r, 404)
|
||||
}
|
||||
|
||||
return render.Render(w, "tag", map[string]any{
|
||||
|
||||
@@ -26,18 +26,18 @@ func HandleUser(w http.ResponseWriter, r *http.Request) error {
|
||||
|
||||
user, err := ApiClient.FetchUser(r.PathValue("userID"))
|
||||
if err != nil && err.Error() == "ratelimited by imgur" {
|
||||
return utils.RenderError(w, r, 429)
|
||||
return RenderError(w, r, 429)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if user.Username == "" {
|
||||
return utils.RenderError(w, r, 404)
|
||||
return RenderError(w, r, 404)
|
||||
}
|
||||
|
||||
submissions, err := ApiClient.FetchSubmissions(r.PathValue("userID"), "newest", page)
|
||||
if err != nil && err.Error() == "ratelimited by imgur" {
|
||||
return utils.RenderError(w, r, 429)
|
||||
return RenderError(w, r, 429)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -60,18 +60,18 @@ func HandleUserComments(w http.ResponseWriter, r *http.Request) error {
|
||||
|
||||
user, err := ApiClient.FetchUser(r.PathValue("userID"))
|
||||
if err != nil && err.Error() == "ratelimited by imgur" {
|
||||
return utils.RenderError(w, r, 429)
|
||||
return RenderError(w, r, 429)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if user.Username == "" {
|
||||
return utils.RenderError(w, r, 404)
|
||||
return RenderError(w, r, 404)
|
||||
}
|
||||
|
||||
comments, err := ApiClient.FetchUserComments(r.PathValue("userID"))
|
||||
if err != nil && err.Error() == "ratelimited by imgur" {
|
||||
return utils.RenderError(w, r, 429)
|
||||
return RenderError(w, r, 429)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -101,18 +101,18 @@ func HandleUserFavorites(w http.ResponseWriter, r *http.Request) error {
|
||||
|
||||
user, err := ApiClient.FetchUser(r.PathValue("userID"))
|
||||
if err != nil && err.Error() == "ratelimited by imgur" {
|
||||
return utils.RenderError(w, r, 429)
|
||||
return RenderError(w, r, 429)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if user.Username == "" {
|
||||
return utils.RenderError(w, r, 404)
|
||||
return RenderError(w, r, 404)
|
||||
}
|
||||
|
||||
favorites, err := ApiClient.FetchUserFavorites(r.PathValue("userID"), "newest", page)
|
||||
if err != nil && err.Error() == "ratelimited by imgur" {
|
||||
return utils.RenderError(w, r, 429)
|
||||
return RenderError(w, r, 429)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user