From cecbccc31b01b8db9a924c2852227e1cd2f246ae Mon Sep 17 00:00:00 2001 From: Jonni Liljamo Date: Mon, 16 Oct 2023 22:17:41 +0300 Subject: [PATCH] refactor: move more to handlers --- cmd/felu/main.go | 30 ++++--------- internal/components/adminpartials.templ | 2 +- internal/components/adminpartials_templ.go | 2 +- internal/handlers/adminpartials.go | 4 +- internal/handlers/auth.go | 42 +++++++++++++++++++ .../handlers/{managedomains.go => domains.go} | 0 internal/handlers/index.go | 20 +++++++++ internal/handlers/login.go | 29 ++----------- internal/handlers/manage.go | 26 ++++++++++++ 9 files changed, 104 insertions(+), 51 deletions(-) create mode 100644 internal/handlers/auth.go rename internal/handlers/{managedomains.go => domains.go} (100%) create mode 100644 internal/handlers/index.go create mode 100644 internal/handlers/manage.go diff --git a/cmd/felu/main.go b/cmd/felu/main.go index 8c229bf..7693962 100644 --- a/cmd/felu/main.go +++ b/cmd/felu/main.go @@ -13,7 +13,6 @@ import ( "strconv" "time" - "git.src.quest/~skye/felu-ddns/internal/components" "git.src.quest/~skye/felu-ddns/internal/config" "git.src.quest/~skye/felu-ddns/internal/db" "git.src.quest/~skye/felu-ddns/internal/dns" @@ -64,13 +63,8 @@ func setupFrontendRouter() *gin.Engine { r.Static("/static", "./static") r.HTMLRender = &renderer.TemplRender{} - r.GET("/", func(c *gin.Context) { - c.HTML(http.StatusOK, "", components.Index()) - }) - - r.GET("/login", middlewares.SessionExists(sessionManager), func(c *gin.Context) { - c.HTML(http.StatusOK, "", components.Login()) - }) + r.GET("/", handlers.Index()) + r.GET("/login", middlewares.SessionExists(sessionManager), handlers.Login()) auth := r.Group("/auth") { @@ -78,25 +72,19 @@ func setupFrontendRouter() *gin.Engine { } // routes for the actual application frontend - manage := r.Group("/manage").Use(middlewares.SessionExists(sessionManager)) + manage := r.Group("/manage", middlewares.SessionExists(sessionManager)) { - manage.GET("/", func(c *gin.Context) { - c.HTML(http.StatusOK, "", components.Manage()) //TODO: yeah move these to handlers/manage.go - }) - manage.GET("/settings", func(c *gin.Context) { - c.HTML(http.StatusOK, "", components.ManageSettings()) - }) + manage.GET("/", handlers.Manage()) + manage.GET("/settings", handlers.ManageSettings()) - manage.POST("/domains", handlers.PostDomain()) //TODO: move these to handlers/domains.go + manage.POST("/domains", handlers.PostDomain()) manage.PATCH("/domains/:id") // TODO: manage.DELETE("/domains/:id", handlers.DeleteDomain()) manage.GET("/partials/domains", handlers.ManagePartialDomains()) } - manageAdmin := r.Group("/manage/admin").Use( - middlewares.SessionExists(sessionManager), - middlewares.AdminOnly(), - ) + manageAdmin := r.Group("/manage/admin", + middlewares.SessionExists(sessionManager), middlewares.AdminOnly()) { manageAdmin.GET("/", handlers.ManageAdmin()) manageAdmin.GET("/users", handlers.ManageAdminUsers()) @@ -104,7 +92,7 @@ func setupFrontendRouter() *gin.Engine { manageAdmin.POST("/users", handlers.PostUser()) - manageAdmin.GET("/partials/users_list", handlers.AdminPartialsUsersList()) + manageAdmin.GET("/partials/users_list", handlers.AdminPartialUsersList()) } return r diff --git a/internal/components/adminpartials.templ b/internal/components/adminpartials.templ index 5db5da8..70d675b 100644 --- a/internal/components/adminpartials.templ +++ b/internal/components/adminpartials.templ @@ -3,7 +3,7 @@ package components import "git.src.quest/~skye/felu-ddns/internal/db" import "strconv" -templ AdminPartialsUsersList(users []db.User) { +templ AdminPartialUsersList(users []db.User) { diff --git a/internal/components/adminpartials_templ.go b/internal/components/adminpartials_templ.go index 32748ae..43a03c8 100644 --- a/internal/components/adminpartials_templ.go +++ b/internal/components/adminpartials_templ.go @@ -12,7 +12,7 @@ import "bytes" import "git.src.quest/~skye/felu-ddns/internal/db" import "strconv" -func AdminPartialsUsersList(users []db.User) templ.Component { +func AdminPartialUsersList(users []db.User) templ.Component { return templ.ComponentFunc(func(ctx context.Context, w io.Writer) (err error) { templBuffer, templIsBuffer := w.(*bytes.Buffer) if !templIsBuffer { diff --git a/internal/handlers/adminpartials.go b/internal/handlers/adminpartials.go index 9a280c8..8a6c6e8 100644 --- a/internal/handlers/adminpartials.go +++ b/internal/handlers/adminpartials.go @@ -14,7 +14,7 @@ import ( "github.com/gin-gonic/gin" ) -func AdminPartialsUsersList() gin.HandlerFunc { +func AdminPartialUsersList() gin.HandlerFunc { return func(c *gin.Context) { users, err := db.FetchAllUsers() if err != nil { @@ -22,7 +22,7 @@ func AdminPartialsUsersList() gin.HandlerFunc { c.String(http.StatusInternalServerError, "Something went wrong while fetching users") c.Abort() } else { - c.HTML(http.StatusOK, "", components.AdminPartialsUsersList(users)) + c.HTML(http.StatusOK, "", components.AdminPartialUsersList(users)) } } } diff --git a/internal/handlers/auth.go b/internal/handlers/auth.go new file mode 100644 index 0000000..6f02311 --- /dev/null +++ b/internal/handlers/auth.go @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2023 Jonni Liljamo + * + * This file is licensed under AGPL-3.0-or-later, see NOTICE and LICENSE for + * more information. + */ +package handlers + +import ( + "log" + "net/http" + + "git.src.quest/~skye/felu-ddns/internal/db" + "github.com/alexedwards/scs/v2" + "github.com/gin-gonic/gin" +) + +type postAuthLoginData struct { + Email string `form:"email"` + Password string `form:"password"` +} + +func AuthLogin(sm *scs.SessionManager) gin.HandlerFunc { + return func(c *gin.Context) { + data := &postAuthLoginData{} + if err := c.Bind(data); err != nil { + log.Printf("[felu] ERROR: Could not bind login details: %v", err) + c.String(http.StatusBadRequest, "Could not bind login details") + return + } + + user, err := db.FetchUserWithCreds(data.Email, data.Password) + if err != nil { + c.String(http.StatusUnauthorized, err.Error()) + return + } + + sm.Put(c.Request.Context(), "user_id", user.Id) + + c.Header("HX-Redirect", "/manage") + } +} diff --git a/internal/handlers/managedomains.go b/internal/handlers/domains.go similarity index 100% rename from internal/handlers/managedomains.go rename to internal/handlers/domains.go diff --git a/internal/handlers/index.go b/internal/handlers/index.go new file mode 100644 index 0000000..490d8d1 --- /dev/null +++ b/internal/handlers/index.go @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2023 Jonni Liljamo + * + * This file is licensed under AGPL-3.0-or-later, see NOTICE and LICENSE for + * more information. + */ +package handlers + +import ( + "net/http" + + "git.src.quest/~skye/felu-ddns/internal/components" + "github.com/gin-gonic/gin" +) + +func Index() gin.HandlerFunc { + return func(c *gin.Context) { + c.HTML(http.StatusOK, "", components.Index()) + } +} diff --git a/internal/handlers/login.go b/internal/handlers/login.go index 4adff27..952d807 100644 --- a/internal/handlers/login.go +++ b/internal/handlers/login.go @@ -7,37 +7,14 @@ package handlers import ( - "log" "net/http" - "git.src.quest/~skye/felu-ddns/internal/db" - "github.com/alexedwards/scs/v2" + "git.src.quest/~skye/felu-ddns/internal/components" "github.com/gin-gonic/gin" ) -type postLoginDetails struct { - Email string `form:"email"` - Password string `form:"password"` -} - -func AuthLogin(sm *scs.SessionManager) gin.HandlerFunc { +func Login() gin.HandlerFunc { return func(c *gin.Context) { - data := &postLoginDetails{} - if err := c.Bind(data); err != nil { - log.Printf("[felu] ERROR: Could not bind login details: %v", err) - c.String(http.StatusBadRequest, "Could not bind login details") - return - } - - user, err := db.FetchUserWithCreds(data.Email, data.Password) - if err != nil { - c.String(http.StatusUnauthorized, err.Error()) - return - } - - sm.Put(c.Request.Context(), "user_id", user.Id) - - c.Header("HX-Redirect", "/manage") - //c.Redirect(http.StatusFound, "/manage") + c.HTML(http.StatusOK, "", components.Login()) } } diff --git a/internal/handlers/manage.go b/internal/handlers/manage.go new file mode 100644 index 0000000..52de618 --- /dev/null +++ b/internal/handlers/manage.go @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2023 Jonni Liljamo + * + * This file is licensed under AGPL-3.0-or-later, see NOTICE and LICENSE for + * more information. + */ +package handlers + +import ( + "net/http" + + "git.src.quest/~skye/felu-ddns/internal/components" + "github.com/gin-gonic/gin" +) + +func Manage() gin.HandlerFunc { + return func(c *gin.Context) { + c.HTML(http.StatusOK, "", components.Manage()) + } +} + +func ManageSettings() gin.HandlerFunc { + return func(c *gin.Context) { + c.HTML(http.StatusOK, "", components.ManageSettings()) + } +} -- 2.44.1