diff --git a/core/config/session.go b/core/config/session.go index 03610d3..761f541 100644 --- a/core/config/session.go +++ b/core/config/session.go @@ -16,6 +16,14 @@ func SetupStorage() { }) } +func saveSession(sess *session.Session) error { + if err := sess.Save(); err != nil { + return err + } + + return nil +} + func GetImageProxy(c *fiber.Ctx) string { sess, err := Store.Get(c) if err != nil { @@ -29,3 +37,35 @@ func GetImageProxy(c *fiber.Ctx) string { return GlobalServerConfig.ProxyServer } + +func SetSessionValue(c *fiber.Ctx, name, value string) error { + sess, err := Store.Get(c) + if err != nil { + return err + } + + sess.Set(name, value) + + if err = saveSession(sess); err != nil { + log.Fatalln("Failed to save session storage!") + return err + } + + return nil +} + +func RemoveSessionValue(c *fiber.Ctx, name string) error { + sess, err := Store.Get(c) + if err != nil { + return err + } + + sess.Delete(name) + + if err = saveSession(sess); err != nil { + log.Fatalln("Failed to save session storage!") + return err + } + + return nil +} diff --git a/main.go b/main.go index efcdc41..19e6ab9 100644 --- a/main.go +++ b/main.go @@ -60,9 +60,10 @@ func main() { server.Use(logger.New( logger.Config{ - Format: "${pid} ${ip} | ${path}\n", + Format: "${time} ${ip} | ${path}\n", }, )) + server.Use(cache.New( cache.Config{ // Next: func(c *fiber.Ctx) bool { @@ -99,10 +100,20 @@ func main() { server.Static("assets/", "./views/assets") server.Static("/robots.txt", "./views/assets/robots.txt") + // + // Routes + // + server.Get("about", pages.AboutPage) server.Get("newest", pages.NewestPage) server.Get("discovery", pages.DiscoveryPage) + // Settings group + server.Get("login", pages.LoginPage) + settings := server.Group("settings") + settings.Get("/", pages.SettingsPage) + settings.Post("/:type", pages.SettingsPost) + log.Println("PixivFE is running.") server.Listen(":8000") } diff --git a/pages/settings.go b/pages/settings.go new file mode 100644 index 0000000..d1cd0c2 --- /dev/null +++ b/pages/settings.go @@ -0,0 +1,71 @@ +package pages + +import ( + "errors" + + session "codeberg.org/vnpower/pixivfe/v2/core/config" + "github.com/gofiber/fiber/v2" +) + +func setToken(c *fiber.Ctx) error { + // Parse the value from the form + token := c.FormValue("token") + if token != "" { + if err := session.SetSessionValue(c, "Token", token); err != nil { + return err + } + + + return nil + } + return errors.New("You submitted an empty/invalid form.") +} + +func setImageServer(c *fiber.Ctx) error { + // Parse the value from the form + token := c.FormValue("image-proxy") + if token != "" { + if err := session.SetSessionValue(c, "ImageProxy", token); err != nil { + return err + } + + + return nil + } + return errors.New("You submitted an empty/invalid form.") +} + +func setLogout(c *fiber.Ctx) error { + session.RemoveSessionValue(c, "Token") + return nil +} + +func LoginPage(c *fiber.Ctx) error { + return c.Render("pages/login", fiber.Map{}) +} + +func SettingsPage(c *fiber.Ctx) error { + return c.Render("pages/settings", fiber.Map{}) +} + +func SettingsPost(c *fiber.Ctx) error { + t := c.Params("type") + var err error + + switch t { + case "image_server": + err = setImageServer(c) + case "token": + err = setToken(c) + case "logout": + err = setLogout(c) + default: + err = errors.New("No such methods available.") + } + + if err != nil { + return err + } + c.Redirect("/settings") + return nil +} diff --git a/tmp/main b/tmp/main new file mode 100755 index 0000000..272199c Binary files /dev/null and b/tmp/main differ