From 587ff1067ef4b6f1362687c00ee32bfce39a4583 Mon Sep 17 00:00:00 2001 From: perennial Date: Mon, 30 Sep 2024 23:30:42 +1000 Subject: [PATCH] default cookies --- config/config.go | 32 ++++++++++++++++++++++++++++ server/middleware/default_cookies.go | 32 ++++++++++++++++++++++++++++ server/middleware/router.go | 3 +++ 3 files changed, 67 insertions(+) create mode 100644 server/middleware/default_cookies.go diff --git a/config/config.go b/config/config.go index ce8664a..2974610 100644 --- a/config/config.go +++ b/config/config.go @@ -68,6 +68,20 @@ type ServerConfig struct { // Development options InDevelopment bool `env:"PIXIVFE_DEV"` ResponseSaveLocation string `env:"PIXIVFE_RESPONSE_SAVE_LOCATION,overwrite"` + + DefaultCookies DefaultCookies + EnableDefaultCookies bool `env:"PIXIVFE_ENABLE_DEFAULT_COOKIES,overwrite"` +} + +type DefaultCookies struct { + ImageProxy string + NovelFontType string + NovelViewMode string + ThumbnailToNewTab string + ArtworkPreview string + HideArtR18 string + HideArtR18G string + HideArtAI string } // parseRevision extracts RevisionDate, RevisionHash, and IsDirty status from the Revision string @@ -144,6 +158,21 @@ func (s *ServerConfig) LoadConfig() error { s.ResponseSaveLocation = "/tmp/pixivfe/responses" + // Set default cookie values + s.DefaultCookies = DefaultCookies{ + // ImageProxy: s.ProxyServer_staging, + NovelFontType: "gothic", + NovelViewMode: "vertical", + ThumbnailToNewTab: "false", + ArtworkPreview: "true", + HideArtR18: "false", + HideArtR18G: "false", + HideArtAI: "false", + } + + // Set default value for EnableDefaultCookies + s.EnableDefaultCookies = true + // load config from from env vars if err := envconfig.Process(context.Background(), s); err != nil { return err @@ -204,6 +233,9 @@ func (s *ServerConfig) LoadConfig() error { log.Printf("Response save location: %s\n", s.ResponseSaveLocation) } + // Log the EnableDefaultCookies setting + log.Printf("Enable default cookies: %v\n", s.EnableDefaultCookies) + return nil } diff --git a/server/middleware/default_cookies.go b/server/middleware/default_cookies.go new file mode 100644 index 0000000..77d560a --- /dev/null +++ b/server/middleware/default_cookies.go @@ -0,0 +1,32 @@ +package middleware + +import ( + "net/http" + + "codeberg.org/vnpower/pixivfe/v2/config" + "codeberg.org/vnpower/pixivfe/v2/server/session" +) + +func SetDefaultCookies(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Check if it's a first visit + _, err := r.Cookie("pixivfe-visited") + if err == http.ErrNoCookie { + // It's a first visit, set default cookies + defaultCookies := config.GlobalConfig.DefaultCookies + session.SetCookie(w, session.Cookie_ImageProxy, defaultCookies.ImageProxy) + session.SetCookie(w, session.Cookie_NovelFontType, defaultCookies.NovelFontType) + session.SetCookie(w, session.Cookie_NovelViewMode, defaultCookies.NovelViewMode) + session.SetCookie(w, session.Cookie_ThumbnailToNewTab, defaultCookies.ThumbnailToNewTab) + session.SetCookie(w, session.Cookie_ArtworkPreview, defaultCookies.ArtworkPreview) + session.SetCookie(w, session.Cookie_HideArtR18, defaultCookies.HideArtR18) + session.SetCookie(w, session.Cookie_HideArtR18G, defaultCookies.HideArtR18G) + session.SetCookie(w, session.Cookie_HideArtAI, defaultCookies.HideArtAI) + + // Set the visited cookie + session.SetCookie(w, "pixivfe-visited", "true") + } + + next.ServeHTTP(w, r) + }) +} diff --git a/server/middleware/router.go b/server/middleware/router.go index 6b73261..dc65cd5 100644 --- a/server/middleware/router.go +++ b/server/middleware/router.go @@ -30,6 +30,9 @@ func serveFile(filename string) http.HandlerFunc { func DefineRoutes() *mux.Router { router := mux.NewRouter() + // Apply the SetDefaultCookies middleware to all routes + router.Use(SetDefaultCookies) + // Tutorial: Adding new routes // 1. Use router.HandleFunc to define the path and handler // 2. Wrap the handler function, defined in package routes, with CatchError for error handling