72 lines
1.2 KiB
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
|
|
}
|