modweb/modules/auth/login_form/main.go

72 lines
1.2 KiB
Go

package login_form
import (
"git.ddd.rip/ptrcnull/modweb"
"git.ddd.rip/ptrcnull/modweb/static"
"github.com/gofiber/fiber/v2"
)
type Module struct {
Handler func(user string, pass string) *modweb.User
}
func (m Module) LoginURL() string {
return "/login/"
}
func (m Module) RegisterURL() string {
return ""
}
func (m Module) FriendlyName() string {
return "Login form"
}
func (m Module) Name() string {
return "login"
}
func (m *Module) Init(mm *modweb.ModuleManager) {
mm.RegisterViews(static.HTTP)
app := mm.Fiber()
app.Get("/", func(ctx *fiber.Ctx) error {
if mm.User(ctx) != nil {
return ctx.Redirect("/")
}
return mm.Render(ctx, "partials/login-form", fiber.Map{})
})
app.Post("/", func(ctx *fiber.Ctx) error {
session := mm.Session(ctx)
defer session.Save()
if mm.User(ctx) != nil {
return ctx.Redirect("/")
}
var data struct {
Username string
Password string
}
err := ctx.BodyParser(&data)
if err != nil {
return err
}
user := m.Handler(data.Username, data.Password)
if user != nil {
user.Save(session)
}
return ctx.Redirect("/")
})
}
func (m Module) Hidden() bool {
return true
}
func (m Module) MinAccessLevel() int64 {
return -1
}