remove CompatRequest

This commit is contained in:
iacore
2024-08-27 16:42:29 +00:00
committed by VnPower
parent 26864022d4
commit 573347f4dd
22 changed files with 237 additions and 239 deletions
+6 -6
View File
@@ -82,8 +82,8 @@ func main() {
}
CatchError(func(w http.ResponseWriter, r utils.CompatRequest) error {
err := GetUserContext(r.Request).err
CatchError(func(w http.ResponseWriter, r *http.Request) error {
err := GetUserContext(r).err
if err != nil { // error handler
log.Println("Within handler: ", err)
code := http.StatusInternalServerError
@@ -226,7 +226,7 @@ func defineRoutes() *mux.Router {
// Legacy illust URL
router.HandleFunc("/member_illust.php", func(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "/artworks/"+utils.CompatRequest{Request: r}.Query("illust_id"), http.StatusPermanentRedirect)
http.Redirect(w, r, "/artworks/"+ routes.GetQueryParam(r, "illust_id"), http.StatusPermanentRedirect)
}).Methods("GET")
// Proxy routes
@@ -234,16 +234,16 @@ func defineRoutes() *mux.Router {
handlePrefix(router, "/proxy/s.pximg.net/", CatchError(routes.SPximgProxy)).Methods("GET")
handlePrefix(router, "/proxy/ugoira.com/", CatchError(routes.UgoiraProxy)).Methods("GET")
router.NewRoute().HandlerFunc(CatchError(func(w http.ResponseWriter, r utils.CompatRequest) error {
router.NewRoute().HandlerFunc(CatchError(func(w http.ResponseWriter, r *http.Request) error {
return errors.New("Route not found")
}))
return router
}
func CatchError(handler func(w http.ResponseWriter, r utils.CompatRequest) error) http.HandlerFunc {
func CatchError(handler func(w http.ResponseWriter, r *http.Request) error) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
GetUserContext(r).err = handler(w, utils.CompatRequest{Request: r})
GetUserContext(r).err = handler(w, r)
}
}
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"net/http"
)
func AboutPage(w http.ResponseWriter, r CompatRequest) error {
func AboutPage(w http.ResponseWriter, r *http.Request) error {
return Render(w, r, Data_about{
Time: config.GlobalServerConfig.StartingTime,
Version: config.GlobalServerConfig.Version,
+17 -16
View File
@@ -8,10 +8,11 @@ import (
"net/http"
"codeberg.org/vnpower/pixivfe/v2/session"
"codeberg.org/vnpower/pixivfe/v2/utils"
"github.com/tidwall/gjson"
)
func pixivPostRequest(r CompatRequest, url, payload, token, csrf string, isJSON bool) error {
func pixivPostRequest(r *http.Request, url, payload, token, csrf string, isJSON bool) error {
requestBody := []byte(payload)
req, err := http.NewRequestWithContext(r.Context(), "POST", url, bytes.NewBuffer(requestBody))
@@ -58,15 +59,15 @@ func pixivPostRequest(r CompatRequest, url, payload, token, csrf string, isJSON
return nil
}
func AddBookmarkRoute(w http.ResponseWriter, r CompatRequest) error {
token := session.GetPixivToken(r.Request)
csrf := session.GetCookie(r.Request, session.Cookie_CSRF)
func AddBookmarkRoute(w http.ResponseWriter, r *http.Request) error {
token := session.GetPixivToken(r)
csrf := session.GetCookie(r, session.Cookie_CSRF)
if token == "" || csrf == "" {
return PromptUserToLoginPage(w, r)
}
id := r.Params("id")
id := GetPathVar(r, "id")
if id == "" {
return errors.New("No ID provided.")
}
@@ -82,19 +83,19 @@ func AddBookmarkRoute(w http.ResponseWriter, r CompatRequest) error {
return err
}
RedirectToWhenceYouCame(w, r)
utils.RedirectToWhenceYouCame(w, r)
return nil
}
func DeleteBookmarkRoute(w http.ResponseWriter, r CompatRequest) error {
token := session.GetPixivToken(r.Request)
csrf := session.GetCookie(r.Request, session.Cookie_CSRF)
func DeleteBookmarkRoute(w http.ResponseWriter, r *http.Request) error {
token := session.GetPixivToken(r)
csrf := session.GetCookie(r, session.Cookie_CSRF)
if token == "" || csrf == "" {
return PromptUserToLoginPage(w, r)
}
id := r.Params("id")
id := GetPathVar(r, "id")
if id == "" {
return errors.New("No ID provided.")
}
@@ -106,19 +107,19 @@ func DeleteBookmarkRoute(w http.ResponseWriter, r CompatRequest) error {
return err
}
RedirectToWhenceYouCame(w, r)
utils.RedirectToWhenceYouCame(w, r)
return nil
}
func LikeRoute(w http.ResponseWriter, r CompatRequest) error {
token := session.GetPixivToken(r.Request)
csrf := session.GetCookie(r.Request, session.Cookie_CSRF)
func LikeRoute(w http.ResponseWriter, r *http.Request) error {
token := session.GetPixivToken(r)
csrf := session.GetCookie(r, session.Cookie_CSRF)
if token == "" || csrf == "" {
return PromptUserToLoginPage(w, r)
}
id := r.Params("id")
id := GetPathVar(r, "id")
if id == "" {
return errors.New("No ID provided.")
}
@@ -129,6 +130,6 @@ func LikeRoute(w http.ResponseWriter, r CompatRequest) error {
return err
}
RedirectToWhenceYouCame(w, r)
utils.RedirectToWhenceYouCame(w, r)
return nil
}
+3 -3
View File
@@ -8,13 +8,13 @@ import (
"net/http"
)
func ArtworkPage(w http.ResponseWriter, r CompatRequest) error {
id := r.Params("id")
func ArtworkPage(w http.ResponseWriter, r *http.Request) error {
id := GetPathVar(r, "id")
if _, err := strconv.Atoi(id); err != nil {
return fmt.Errorf("Invalid ID: %s", id)
}
illust, err := core.GetArtworkByID(r.Request, id, true)
illust, err := core.GetArtworkByID(r, id, true)
if err != nil {
return err
}
+3 -3
View File
@@ -10,8 +10,8 @@ import (
"net/http"
)
func ArtworkMultiPage(w http.ResponseWriter, r CompatRequest) error {
ids_ := r.Params("ids")
func ArtworkMultiPage(w http.ResponseWriter, r *http.Request) error {
ids_ := GetPathVar(r, "ids")
ids := strings.Split(ids_, ",")
artworks := make([]core.Illust, len(ids))
@@ -34,7 +34,7 @@ func ArtworkMultiPage(w http.ResponseWriter, r CompatRequest) error {
go func(i int, id string) {
defer wg.Done()
illust, err := core.GetArtworkByID(r.Request, id, false)
illust, err := core.GetArtworkByID(r, id, false)
if err != nil {
artworks[i] = core.Illust{
Title: err.Error(), // this might be flaky
+6 -6
View File
@@ -6,10 +6,10 @@ import (
"net/http"
)
func DiscoveryPage(w http.ResponseWriter, r CompatRequest) error {
mode := r.Query("mode", "safe")
func DiscoveryPage(w http.ResponseWriter, r *http.Request) error {
mode := GetQueryParam(r, "mode", "safe")
works, err := core.GetDiscoveryArtwork(r.Request, mode)
works, err := core.GetDiscoveryArtwork(r, mode)
if err != nil {
return err
}
@@ -19,10 +19,10 @@ func DiscoveryPage(w http.ResponseWriter, r CompatRequest) error {
return Render(w, r, Data_discovery{Artworks: works, Title: "Discovery", Queries: urlc})
}
func NovelDiscoveryPage(w http.ResponseWriter, r CompatRequest) error {
mode := r.Query("mode", "safe")
func NovelDiscoveryPage(w http.ResponseWriter, r *http.Request) error {
mode := GetQueryParam(r, "mode", "safe")
works, err := core.GetDiscoveryNovels(r.Request, mode)
works, err := core.GetDiscoveryNovels(r, mode)
if err != nil {
return err
}
+33
View File
@@ -0,0 +1,33 @@
package routes
import (
"net/http"
"github.com/gorilla/mux"
)
func GetQueryParam(r *http.Request, name string, defaultValue ...string) string {
if v := r.URL.Query().Get(name); v != "" {
return v
} else {
if len(defaultValue) == 0 {
return ""
} else {
return defaultValue[0]
}
}
}
// get path segment. no idea why it's called "params"
func GetPathVar(r *http.Request, name string, defaultValue ...string) string {
if v := mux.Vars(r)[name]; v != "" {
return v
} else {
if len(defaultValue) == 0 {
return ""
} else {
return defaultValue[0]
}
}
}
+12 -11
View File
@@ -1,19 +1,19 @@
package routes
import (
"encoding/json"
"net/http"
"codeberg.org/vnpower/pixivfe/v2/core"
"codeberg.org/vnpower/pixivfe/v2/session"
"codeberg.org/vnpower/pixivfe/v2/utils"
)
func IndexPage(w http.ResponseWriter, r CompatRequest) error {
func IndexPage(w http.ResponseWriter, r *http.Request) error {
// If token is set, do the landing request...
if token := session.GetPixivToken(r.Request); token != "" {
mode := r.Query("mode", "all")
if token := session.GetPixivToken(r); token != "" {
mode := GetQueryParam(r, "mode", "all")
works, err := core.GetLanding(r.Request, mode)
works, err := core.GetLanding(r, mode)
if err != nil {
return err
@@ -27,7 +27,7 @@ func IndexPage(w http.ResponseWriter, r CompatRequest) error {
}
// ...otherwise, default to today's illustration ranking
works, err := core.GetRanking(r.Request, "daily", "illust", "", "1")
works, err := core.GetRanking(r, "daily", "illust", "", "1")
if err != nil {
return err
}
@@ -38,10 +38,10 @@ func IndexPage(w http.ResponseWriter, r CompatRequest) error {
})
}
func Oembed(w http.ResponseWriter, r CompatRequest) error {
pageURL := r.BaseURL()
artistName := r.Query("a", "")
artistURL := r.Query("u", "")
func Oembed(w http.ResponseWriter, r *http.Request) error {
pageURL := utils.Origin(r)
artistName := GetQueryParam(r, "a", "")
artistURL := GetQueryParam(r, "u", "")
data := map[string]any{
"version": "1.0",
@@ -52,5 +52,6 @@ func Oembed(w http.ResponseWriter, r CompatRequest) error {
"author_url": artistURL,
}
return json.NewEncoder(w).Encode(data)
utils.SendJson(w, data)
return nil
}
+4 -4
View File
@@ -5,12 +5,12 @@ import (
"net/http"
)
func NewestPage(w http.ResponseWriter, r CompatRequest) error {
worktype := r.Query("type", "illust")
func NewestPage(w http.ResponseWriter, r *http.Request) error {
worktype := GetQueryParam(r, "type", "illust")
r18 := r.Query("r18", "false")
r18 := GetQueryParam(r, "r18", "false")
works, err := core.GetNewestArtworks(r.Request, worktype, r18)
works, err := core.GetNewestArtworks(r, worktype, r18)
if err != nil {
return err
}
+7 -7
View File
@@ -10,32 +10,32 @@ import (
"net/http"
)
func NovelPage(w http.ResponseWriter, r CompatRequest) error {
id := r.Params("id")
func NovelPage(w http.ResponseWriter, r *http.Request) error {
id := GetPathVar(r, "id")
if _, err := strconv.Atoi(id); err != nil {
return fmt.Errorf("Invalid ID: %s", id)
}
novel, err := core.GetNovelByID(r.Request, id)
novel, err := core.GetNovelByID(r, id)
if err != nil {
return err
}
related, err := core.GetNovelRelated(r.Request, id)
related, err := core.GetNovelRelated(r, id)
if err != nil {
return err
}
user, err := core.GetUserBasicInformation(r.Request, novel.UserID)
user, err := core.GetUserBasicInformation(r, novel.UserID)
if err != nil {
return err
}
fontType := session.GetCookie(r.Request, session.Cookie_NovelFontType)
fontType := session.GetCookie(r, session.Cookie_NovelFontType)
if fontType == "" {
fontType = "gothic"
}
viewMode := session.GetCookie(r.Request, session.Cookie_NovelViewMode)
viewMode := session.GetCookie(r, session.Cookie_NovelViewMode)
if viewMode == "" {
viewMode = strconv.Itoa(novel.Settings.ViewMode)
}
+12 -12
View File
@@ -9,7 +9,7 @@ import (
"codeberg.org/vnpower/pixivfe/v2/session"
)
func PromptUserToLoginPage(w http.ResponseWriter, r CompatRequest) error {
func PromptUserToLoginPage(w http.ResponseWriter, r *http.Request) error {
err := Render(w, r, Data_unauthorized{})
if err != nil {
return err
@@ -18,8 +18,8 @@ func PromptUserToLoginPage(w http.ResponseWriter, r CompatRequest) error {
return nil
}
func LoginUserPage(w http.ResponseWriter, r CompatRequest) error {
token := session.GetPixivToken(r.Request)
func LoginUserPage(w http.ResponseWriter, r *http.Request) error {
token := session.GetPixivToken(r)
if token == "" {
return PromptUserToLoginPage(w, r)
@@ -28,12 +28,12 @@ func LoginUserPage(w http.ResponseWriter, r CompatRequest) error {
// The left part of the token is the member ID
userId := strings.Split(token, "_")
http.Redirect(w, r.Request, "/users/" + userId[0], http.StatusSeeOther)
http.Redirect(w, r, "/users/" + userId[0], http.StatusSeeOther)
return nil
}
func LoginBookmarkPage(w http.ResponseWriter, r CompatRequest) error {
token := session.GetPixivToken(r.Request)
func LoginBookmarkPage(w http.ResponseWriter, r *http.Request) error {
token := session.GetPixivToken(r)
if token == "" {
return PromptUserToLoginPage(w, r)
}
@@ -41,24 +41,24 @@ func LoginBookmarkPage(w http.ResponseWriter, r CompatRequest) error {
// The left part of the token is the member ID
userId := strings.Split(token, "_")
http.Redirect(w, r.Request, "/users/" + userId[0] + "/bookmarks#checkpoint", http.StatusSeeOther)
http.Redirect(w, r, "/users/" + userId[0] + "/bookmarks#checkpoint", http.StatusSeeOther)
return nil
}
func FollowingWorksPage(w http.ResponseWriter, r CompatRequest) error {
if token := session.GetPixivToken(r.Request); token == "" {
func FollowingWorksPage(w http.ResponseWriter, r *http.Request) error {
if token := session.GetPixivToken(r); token == "" {
return PromptUserToLoginPage(w, r)
}
mode := r.Query("mode", "all")
page := r.Query("page", "1")
mode := GetQueryParam(r, "mode", "all")
page := GetQueryParam(r, "page", "1")
pageInt, err := strconv.Atoi(page)
if err != nil {
return err
}
works, err := core.GetNewestFromFollowing(r.Request, mode, page)
works, err := core.GetNewestFromFollowing(r, mode, page)
if err != nil {
return err
}
+7 -7
View File
@@ -7,30 +7,30 @@ import (
"net/http"
)
func PixivisionHomePage(w http.ResponseWriter, r CompatRequest) error {
func PixivisionHomePage(w http.ResponseWriter, r *http.Request) error {
data, err := pixivision.GetHomepage()
if err != nil {
return err
}
for i := range data {
data[i].Thumbnail = session.ProxyImageUrlNoEscape(r.Request, data[i].Thumbnail)
data[i].Thumbnail = session.ProxyImageUrlNoEscape(r, data[i].Thumbnail)
}
return Render(w, r, Data_pixivision_index{Data: data})
}
func PixivisionArticlePage(w http.ResponseWriter, r CompatRequest) error {
id := r.Params("id")
func PixivisionArticlePage(w http.ResponseWriter, r *http.Request) error {
id := GetPathVar(r, "id")
data, err := pixivision.GetArticle(id)
if err != nil {
return err
}
data.Thumbnail = session.ProxyImageUrlNoEscape(r.Request, data.Thumbnail)
data.Thumbnail = session.ProxyImageUrlNoEscape(r, data.Thumbnail)
for i := range data.Items {
data.Items[i].Image = session.ProxyImageUrlNoEscape(r.Request, data.Items[i].Image)
data.Items[i].Avatar = session.ProxyImageUrlNoEscape(r.Request, data.Items[i].Avatar)
data.Items[i].Image = session.ProxyImageUrlNoEscape(r, data.Items[i].Image)
data.Items[i].Avatar = session.ProxyImageUrlNoEscape(r, data.Items[i].Avatar)
}
return Render(w, r, Data_pixivision_article{Article: data})
+3 -3
View File
@@ -19,7 +19,7 @@ func makeRequest(w http.ResponseWriter, req *http.Request) error {
return err
}
func SPximgProxy(w http.ResponseWriter, r CompatRequest) error {
func SPximgProxy(w http.ResponseWriter, r *http.Request) error {
URL := fmt.Sprintf("https://s.pximg.net/%s", r.URL.Path)
req, err := http.NewRequestWithContext(r.Context(), "GET", URL, nil)
if err != nil {
@@ -28,7 +28,7 @@ func SPximgProxy(w http.ResponseWriter, r CompatRequest) error {
return makeRequest(w, req)
}
func IPximgProxy(w http.ResponseWriter, r CompatRequest) error {
func IPximgProxy(w http.ResponseWriter, r *http.Request) error {
URL := fmt.Sprintf("https://i.pximg.net/%s", r.URL.Path)
req, err := http.NewRequestWithContext(r.Context(), "GET", URL, nil)
if err != nil {
@@ -38,7 +38,7 @@ func IPximgProxy(w http.ResponseWriter, r CompatRequest) error {
return makeRequest(w, req)
}
func UgoiraProxy(w http.ResponseWriter, r CompatRequest) error {
func UgoiraProxy(w http.ResponseWriter, r *http.Request) error {
URL := fmt.Sprintf("https://ugoira.com/api/mp4/%s", r.URL.Path)
req, err := http.NewRequestWithContext(r.Context(), "GET", URL, nil)
if err != nil {
+6 -6
View File
@@ -7,18 +7,18 @@ import (
"net/http"
)
func RankingPage(w http.ResponseWriter, r CompatRequest) error {
mode := r.Query("mode", "daily")
content := r.Query("content", "all")
date := r.Query("date", "")
func RankingPage(w http.ResponseWriter, r *http.Request) error {
mode := GetQueryParam(r, "mode", "daily")
content := GetQueryParam(r, "content", "all")
date := GetQueryParam(r, "date", "")
page := r.Query("page", "1")
page := GetQueryParam(r, "page", "1")
pageInt, err := strconv.Atoi(page)
if err != nil {
return err
}
works, err := core.GetRanking(r.Request, mode, content, date, page)
works, err := core.GetRanking(r, mode, content, date, page)
if err != nil {
return err
}
+6 -6
View File
@@ -35,22 +35,22 @@ func parseDate(t time.Time) DateWrap {
return d
}
func RankingCalendarPicker(w http.ResponseWriter, r CompatRequest) error {
func RankingCalendarPicker(w http.ResponseWriter, r *http.Request) error {
mode := r.FormValue("mode")
if mode == "" {
mode = "daily"
}
date := r.FormValue("date")
return utils.RedirectToRoute(w, r,"/rankingCalendar", map[string]string{
return utils.RedirectTo(w, r,"/rankingCalendar", map[string]string{
"mode": mode,
"date": date,
})
}
func RankingCalendarPage(w http.ResponseWriter, r CompatRequest) error {
mode := r.Query("mode", "daily")
date := r.Query("date", "")
func RankingCalendarPage(w http.ResponseWriter, r *http.Request) error {
mode := GetQueryParam(r, "mode", "daily")
date := GetQueryParam(r, "date", "")
var year int
var month int
@@ -76,7 +76,7 @@ func RankingCalendarPage(w http.ResponseWriter, r CompatRequest) error {
monthBefore := realDate.AddDate(0, -1, 0)
monthAfter := realDate.AddDate(0, 1, 0)
render, err := core.GetRankingCalendar(r.Request, mode, year, month)
render, err := core.GetRankingCalendar(r, mode, year, month)
if err != nil {
return err
}
+6 -6
View File
@@ -33,7 +33,7 @@ func InitTemplatingEngine(DisableCache bool) {
}
// render the template selected based on the name of type `T`
func Render[T any](w http.ResponseWriter, r CompatRequest, data T) error {
func Render[T any](w http.ResponseWriter, r *http.Request, data T) error {
w.Header().Set("content-type", "text/html; charset=utf-8")
return RenderInner(w, GetTemplatingVariables(r), data)
}
@@ -54,15 +54,15 @@ func RenderInner[T any](w io.Writer, variables jet.VarMap, data T) error {
return template.Execute(w, variables, data)
}
func GetTemplatingVariables(r CompatRequest) jet.VarMap {
func GetTemplatingVariables(r *http.Request) jet.VarMap {
// Pass in values that we want to be available to all pages here
token := session.GetPixivToken(r.Request)
baseURL := r.BaseURL()
pageURL := r.PageURL()
token := session.GetPixivToken(r)
baseURL := utils.Origin(r)
pageURL := r.URL.String()
cookies := map[string]string{}
for _, name := range session.AllCookieNames {
value := session.GetCookie(r.Request, name)
value := session.GetCookie(r, name)
cookies[string(name)] = value
}
+21 -28
View File
@@ -10,16 +10,17 @@ import (
"strings"
"codeberg.org/vnpower/pixivfe/v2/config"
httpc "codeberg.org/vnpower/pixivfe/v2/core"
"codeberg.org/vnpower/pixivfe/v2/core"
"codeberg.org/vnpower/pixivfe/v2/session"
"codeberg.org/vnpower/pixivfe/v2/utils"
)
func setToken(w http.ResponseWriter, r CompatRequest) error {
func setToken(w http.ResponseWriter, r *http.Request) error {
token := r.FormValue("token")
if token != "" {
URL := httpc.GetNewestFromFollowingURL("all", "1")
URL := core.GetNewestFromFollowingURL("all", "1")
_, err := httpc.UnwrapWebAPIRequest(r.Context(), URL, token)
_, err := core.UnwrapWebAPIRequest(r.Context(), URL, token)
if err != nil {
return errors.New("Cannot authorize with supplied token.")
}
@@ -27,9 +28,9 @@ func setToken(w http.ResponseWriter, r CompatRequest) error {
// Make a test request to verify the token.
// THE TEST URL IS NSFW!
req, err := http.NewRequestWithContext(r.Context(), "GET", "https://www.pixiv.net/en/artworks/115365120", nil)
if err != nil {
return err
}
if err != nil {
return err
}
req.Header.Add("User-Agent", "Mozilla/5.0")
req.AddCookie(&http.Cookie{
Name: "PHPSESSID",
@@ -63,7 +64,7 @@ func setToken(w http.ResponseWriter, r CompatRequest) error {
return errors.New("You submitted an empty/invalid form.")
}
func setImageServer(w http.ResponseWriter, r CompatRequest) error {
func setImageServer(w http.ResponseWriter, r *http.Request) error {
token := r.FormValue("image-proxy")
if token != "" {
session.SetCookie(w, session.Cookie_ImageProxy, token)
@@ -73,7 +74,7 @@ func setImageServer(w http.ResponseWriter, r CompatRequest) error {
return nil
}
func setNovelFontType(w http.ResponseWriter, r CompatRequest) error {
func setNovelFontType(w http.ResponseWriter, r *http.Request) error {
fontType := r.FormValue("font-type")
if fontType != "" {
session.SetCookie(w, session.Cookie_NovelFontType, fontType)
@@ -82,7 +83,7 @@ func setNovelFontType(w http.ResponseWriter, r CompatRequest) error {
return nil
}
func setNovelViewMode(w http.ResponseWriter, r CompatRequest) error {
func setNovelViewMode(w http.ResponseWriter, r *http.Request) error {
viewMode := r.FormValue("view-mode")
if viewMode != "" {
session.SetCookie(w, session.Cookie_NovelViewMode, viewMode)
@@ -91,7 +92,7 @@ func setNovelViewMode(w http.ResponseWriter, r CompatRequest) error {
return nil
}
func setThumbnailToNewTab(w http.ResponseWriter, r CompatRequest) error {
func setThumbnailToNewTab(w http.ResponseWriter, r *http.Request) error {
ttnt := r.FormValue("ttnt")
if ttnt == "_blank" || ttnt == "_self" {
session.SetCookie(w, session.Cookie_ThumbnailToNewTab, ttnt)
@@ -100,7 +101,7 @@ func setThumbnailToNewTab(w http.ResponseWriter, r CompatRequest) error {
return nil
}
func setArtworkPreview(w http.ResponseWriter, r CompatRequest) error {
func setArtworkPreview(w http.ResponseWriter, r *http.Request) error {
value := r.FormValue("app")
if value == "cover" || value == "button" || value == "" {
session.SetCookie(w, session.Cookie_ArtworkPreview, value)
@@ -109,13 +110,13 @@ func setArtworkPreview(w http.ResponseWriter, r CompatRequest) error {
return nil
}
func setLogout(w http.ResponseWriter, _ CompatRequest) error {
func setLogout(w http.ResponseWriter, _ *http.Request) error {
session.ClearCookie(w, session.Cookie_Token)
session.ClearCookie(w, session.Cookie_CSRF)
return nil
}
func setCookie(w http.ResponseWriter, r CompatRequest) error {
func setCookie(w http.ResponseWriter, r *http.Request) error {
key := r.FormValue("key")
value := r.FormValue("value")
for _, cookie_name := range session.AllCookieNames {
@@ -127,7 +128,7 @@ func setCookie(w http.ResponseWriter, r CompatRequest) error {
return fmt.Errorf("Invalid Cookie Name: %s", key)
}
func setRawCookie(w http.ResponseWriter, r CompatRequest) error {
func setRawCookie(w http.ResponseWriter, r *http.Request) error {
raw := r.FormValue("raw")
lines := strings.Split(raw, "\n")
@@ -149,17 +150,17 @@ func setRawCookie(w http.ResponseWriter, r CompatRequest) error {
return nil
}
func resetAll(w http.ResponseWriter, _ CompatRequest) error {
func resetAll(w http.ResponseWriter, _ *http.Request) error {
session.ClearAllCookies(w)
return nil
}
func SettingsPage(w http.ResponseWriter, r CompatRequest) error {
func SettingsPage(w http.ResponseWriter, r *http.Request) error {
return Render(w, r, Data_settings{WorkingProxyList: config.GetWorkingProxies(), ProxyList: config.BuiltinProxyList})
}
func SettingsPost(w http.ResponseWriter, r CompatRequest) error {
t := r.Params("type")
func SettingsPost(w http.ResponseWriter, r *http.Request) error {
t := GetPathVar(r, "type")
var err error
switch t {
@@ -191,14 +192,6 @@ func SettingsPost(w http.ResponseWriter, r CompatRequest) error {
return err
}
RedirectToWhenceYouCame(w, r)
utils.RedirectToWhenceYouCame(w, r)
return nil
}
func RedirectToWhenceYouCame(w http.ResponseWriter, r CompatRequest) {
if strings.HasPrefix(r.Referer(), r.BaseURL()) {
http.Redirect(w, r.Request, r.Referer(), http.StatusSeeOther)
} else {
w.WriteHeader(200)
}
}
+31 -31
View File
@@ -9,14 +9,14 @@ import (
"codeberg.org/vnpower/pixivfe/v2/utils"
)
func TagPage(w http.ResponseWriter, r CompatRequest) error {
param := r.Params("name", r.Query("name"))
func TagPage(w http.ResponseWriter, r *http.Request) error {
param := GetPathVar(r, "name", GetQueryParam(r, "name"))
name, err := url.PathUnescape(param)
if err != nil {
return err
}
page := r.Query("page", "1")
page := GetQueryParam(r, "page", "1")
pageInt, err := strconv.Atoi(page)
if err != nil {
return err
@@ -26,25 +26,25 @@ func TagPage(w http.ResponseWriter, r CompatRequest) error {
// I made a struct type just to manage the queries
queries := core.SearchPageSettings{
Name: name,
Category: r.Query("category", "artworks"),
Order: r.Query("order", "date_d"),
Mode: r.Query("mode", "safe"),
Ratio: r.Query("ratio", ""),
Wlt: r.Query("wlt", ""),
Wgt: r.Query("wgt", ""),
Hlt: r.Query("hlt", ""),
Hgt: r.Query("hgt", ""),
Tool: r.Query("tool", ""),
Scd: r.Query("scd", ""),
Ecd: r.Query("ecd", ""),
Category: GetQueryParam(r, "category", "artworks"),
Order: GetQueryParam(r, "order", "date_d"),
Mode: GetQueryParam(r, "mode", "safe"),
Ratio: GetQueryParam(r, "ratio", ""),
Wlt: GetQueryParam(r, "wlt", ""),
Wgt: GetQueryParam(r, "wgt", ""),
Hlt: GetQueryParam(r, "hlt", ""),
Hgt: GetQueryParam(r, "hgt", ""),
Tool: GetQueryParam(r, "tool", ""),
Scd: GetQueryParam(r, "scd", ""),
Ecd: GetQueryParam(r, "ecd", ""),
Page: page,
}
tag, err := core.GetTagData(r.Request, name)
tag, err := core.GetTagData(r, name)
if err != nil {
return err
}
result, err := core.GetSearch(r.Request, queries)
result, err := core.GetSearch(r, queries)
if err != nil {
return err
}
@@ -54,20 +54,20 @@ func TagPage(w http.ResponseWriter, r CompatRequest) error {
return Render(w, r, Data_tag{Title: "Results for " + name, Tag: tag, Data: *result, QueriesC: urlc, TrueTag: param, Page: pageInt})
}
func AdvancedTagPost(w http.ResponseWriter, r CompatRequest) error {
return utils.RedirectToRoute(w, r,"/tags", map[string]string{
"name": r.Query("name", r.FormValue("name")),
"category": r.Query("category", "artworks"),
"order": r.Query("order", "date_d"),
"mode": r.Query("mode", "safe"),
"ratio": r.Query("ratio"),
"page": r.Query("page", "1"),
"wlt": r.Query("wlt", r.FormValue("wlt")),
"wgt": r.Query("wgt", r.FormValue("wgt")),
"hlt": r.Query("hlt", r.FormValue("hlt")),
"hgt": r.Query("hgt", r.FormValue("hgt")),
"tool": r.Query("tool", r.FormValue("tool")),
"scd": r.Query("scd", r.FormValue("scd")),
"ecd": r.Query("ecd", r.FormValue("ecd")),
func AdvancedTagPost(w http.ResponseWriter, r *http.Request) error {
return utils.RedirectTo(w, r,"/tags", map[string]string{
"name": GetQueryParam(r, "name", r.FormValue("name")),
"category": GetQueryParam(r, "category", "artworks"),
"order": GetQueryParam(r, "order", "date_d"),
"mode": GetQueryParam(r, "mode", "safe"),
"ratio": GetQueryParam(r, "ratio"),
"page": GetQueryParam(r, "page", "1"),
"wlt": GetQueryParam(r, "wlt", r.FormValue("wlt")),
"wgt": GetQueryParam(r, "wgt", r.FormValue("wgt")),
"hlt": GetQueryParam(r, "hlt", r.FormValue("hlt")),
"hgt": GetQueryParam(r, "hgt", r.FormValue("hgt")),
"tool": GetQueryParam(r, "tool", r.FormValue("tool")),
"scd": GetQueryParam(r, "scd", r.FormValue("scd")),
"ecd": GetQueryParam(r, "ecd", r.FormValue("ecd")),
})
}
-7
View File
@@ -1,7 +0,0 @@
package routes
import "codeberg.org/vnpower/pixivfe/v2/utils"
type CompatRequest = utils.CompatRequest
var SendString = utils.SendString
+7 -7
View File
@@ -16,24 +16,24 @@ type userPageData struct {
page int
}
func fetchData(r CompatRequest, getTags bool) (userPageData, error) {
id := r.Params("id")
func fetchData(r *http.Request, getTags bool) (userPageData, error) {
id := GetPathVar(r, "id")
if _, err := strconv.Atoi(id); err != nil {
return userPageData{}, err
}
category := core.UserArtCategory(r.Params("category", string(core.UserArt_Any)))
category := core.UserArtCategory(GetPathVar(r, "category", string(core.UserArt_Any)))
err := category.Validate()
if err != nil {
return userPageData{}, err
}
page_param := r.Query("page", "1")
page_param := GetQueryParam(r, "page", "1")
page, err := strconv.Atoi(page_param)
if err != nil {
return userPageData{}, err
}
user, err := core.GetUserArtwork(r.Request, id, category, page, getTags)
user, err := core.GetUserArtwork(r, id, category, page, getTags)
if err != nil {
return userPageData{}, err
}
@@ -53,7 +53,7 @@ func fetchData(r CompatRequest, getTags bool) (userPageData, error) {
return userPageData{user, category, pageLimit, page}, nil
}
func UserPage(w http.ResponseWriter, r CompatRequest) error {
func UserPage(w http.ResponseWriter, r *http.Request) error {
data, err := fetchData(r, true)
if err != nil {
return err
@@ -62,7 +62,7 @@ func UserPage(w http.ResponseWriter, r CompatRequest) error {
return Render(w, r, Data_user{Title: data.user.Name, User: data.user, Category: data.category, PageLimit: data.pageLimit, Page: data.page, MetaImage: data.user.BackgroundImage})
}
func UserAtomFeed(w http.ResponseWriter, r CompatRequest) error {
func UserAtomFeed(w http.ResponseWriter, r *http.Request) error {
data, err := fetchData(r, false)
if err != nil {
return err
-69
View File
@@ -1,69 +0,0 @@
package utils
import (
"encoding/json"
"net/http"
"net/url"
"github.com/gorilla/mux"
)
type CompatRequest struct {
*http.Request
}
func (r CompatRequest) BaseURL() string {
return (&url.URL{
Scheme: r.URL.Scheme,
Opaque: r.URL.Opaque,
User: r.URL.User,
Host: r.URL.Host,
}).String()
}
func (r CompatRequest) PageURL() string {
return r.URL.String()
}
func (r CompatRequest) Query(name string, defaultValue ...string) string {
if v := r.URL.Query().Get(name); v != "" {
return v
} else {
if len(defaultValue) == 0 {
return ""
} else {
return defaultValue[0]
}
}
}
// get path segment. no idea why it's called "params"
func (r CompatRequest) Params(name string, defaultValue ...string) string {
if v := mux.Vars(r.Request)[name]; v != "" {
return v
} else {
if len(defaultValue) == 0 {
return ""
} else {
return defaultValue[0]
}
}
}
func SendString(w http.ResponseWriter, text string) error {
w.Header().Set("content-type", "text/plain")
_, err := w.Write([]byte(text))
return err
}
func RedirectToRoute(w http.ResponseWriter, r CompatRequest, path string, query_params map[string]string) error {
query := url.Values{}
for k, v := range query_params {
query.Add(k, v)
}
http.Redirect(w, r.Request, path+query.Encode(), http.StatusSeeOther)
return nil
}
func WriteJson(w http.ResponseWriter, data any) {
json.NewEncoder(w).Encode(data)
}
+46
View File
@@ -0,0 +1,46 @@
package utils
import (
"encoding/json"
"net/http"
"net/url"
"strings"
)
func SendString(w http.ResponseWriter, text string) error {
w.Header().Set("content-type", "text/plain")
_, err := w.Write([]byte(text))
return err
}
func SendJson(w http.ResponseWriter, data any) {
json.NewEncoder(w).Encode(data)
}
func RedirectTo(w http.ResponseWriter, r *http.Request, path string, query_params map[string]string) error {
query := url.Values{}
for k, v := range query_params {
query.Add(k, v)
}
http.Redirect(w, r, path+query.Encode(), http.StatusSeeOther)
return nil
}
func RedirectToWhenceYouCame(w http.ResponseWriter, r *http.Request) {
referrer := r.Referer()
if strings.HasPrefix(referrer, Origin(r)) {
http.Redirect(w, r, referrer, http.StatusSeeOther)
} else {
w.WriteHeader(200)
}
}
func Origin(r *http.Request) string {
return (&url.URL{
Scheme: r.URL.Scheme,
Opaque: r.URL.Opaque,
User: r.URL.User,
Host: r.URL.Host,
}).String()
}