owl-blogs/web/login_handler.go

58 lines
1.2 KiB
Go
Raw Normal View History

2023-06-25 19:32:36 +00:00
package web
import (
"owl-blogs/app"
2023-07-17 18:44:59 +00:00
"owl-blogs/app/repository"
2023-07-09 17:51:49 +00:00
"owl-blogs/render"
2023-07-08 12:28:15 +00:00
"time"
2023-06-25 19:32:36 +00:00
"github.com/gofiber/fiber/v2"
)
type LoginHandler struct {
2023-07-17 18:44:59 +00:00
configRepo repository.SiteConfigRepository
2023-07-08 12:28:15 +00:00
authorService *app.AuthorService
2023-06-25 19:32:36 +00:00
}
2023-07-17 18:44:59 +00:00
func NewLoginHandler(
authorService *app.AuthorService,
configRepo repository.SiteConfigRepository,
) *LoginHandler {
return &LoginHandler{
authorService: authorService,
configRepo: configRepo,
}
2023-06-25 19:32:36 +00:00
}
func (h *LoginHandler) HandleGet(c *fiber.Ctx) error {
2023-07-08 12:28:15 +00:00
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
2023-07-17 18:44:59 +00:00
return render.RenderTemplateWithBase(c, getConfig(h.configRepo), "views/login", nil)
2023-06-25 19:32:36 +00:00
}
func (h *LoginHandler) HandlePost(c *fiber.Ctx) error {
2023-07-08 12:28:15 +00:00
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
name := c.FormValue("name")
password := c.FormValue("password")
valid := h.authorService.Authenticate(name, password)
if !valid {
return c.Redirect("/auth/login")
}
token, err := h.authorService.CreateToken(name)
if err != nil {
return err
}
cookie := fiber.Cookie{
Name: "token",
Value: token,
Expires: time.Now().Add(30 * 24 * time.Hour),
HTTPOnly: true,
}
c.Cookie(&cookie)
return c.Redirect("/editor/")
2023-06-25 19:32:36 +00:00
}