mirror of
https://codeberg.org/VnPower/PixivFE
synced 2024-12-06 19:16:23 +01:00
remove CompatRequest
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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,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
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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")),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
package routes
|
||||
|
||||
import "codeberg.org/vnpower/pixivfe/v2/utils"
|
||||
|
||||
type CompatRequest = utils.CompatRequest
|
||||
|
||||
var SendString = utils.SendString
|
||||
+7
-7
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
Reference in New Issue
Block a user