feat: Added login form module

This commit is contained in:
ptrcnull 2020-12-23 03:05:12 +01:00
parent 0cc9df8950
commit f0c009eac5
4 changed files with 119 additions and 4 deletions

View file

@ -2,8 +2,8 @@ package main
import (
"git.ddd.rip/ptrcnull/modweb"
discord_login "git.ddd.rip/ptrcnull/modweb/examples/test/discord-login"
helloworld "git.ddd.rip/ptrcnull/modweb/examples/test/hello-world"
auth "git.ddd.rip/ptrcnull/modweb/modules/auth/login_form"
)
func main() {
@ -11,7 +11,12 @@ func main() {
AppName: "Test App",
})
app.Register(&discord_login.Module{})
app.Register(&auth.Module{
Handler: func(user, pass string) *modweb.User {
return nil
},
})
// app.Register(&discord_login.Module{})
app.Register(&helloworld.Module{})
err := app.Run(":8011")

View file

@ -0,0 +1,71 @@
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
}

View file

@ -1,5 +1,5 @@
// Code generated by fileb0x at "2020-11-17 14:52:53.48227984 +0100 CET m=+0.000817080" from config file "b0x.yaml" DO NOT EDIT.
// modification hash(a2b5de76ae4db1495bdfcdc8ee505a4a.a37039530e23f5be41165838b856aadc)
// Code generated by fileb0x at "2020-12-23 03:04:23.605898568 +0100 CET m=+0.003792496" from config file "b0x.yaml" DO NOT EDIT.
// modification hash(1bf54b21b1c2bf7f833dcdabc435400c.a37039530e23f5be41165838b856aadc)
package static
@ -49,6 +49,9 @@ var FileHomepageHTML = []byte("\x3c\x68\x31\x3e\x68\x6f\x6d\x65\x70\x61\x67\x65\
// FileLayoutsMainHTML is "layouts/main.html"
var FileLayoutsMainHTML = []byte("\x3c\x21\x64\x6f\x63\x74\x79\x70\x65\x20\x68\x74\x6d\x6c\x3e\x0a\x3c\x68\x74\x6d\x6c\x20\x6c\x61\x6e\x67\x3d\x22\x65\x6e\x22\x3e\x0a\x3c\x68\x65\x61\x64\x3e\x0a\x20\x20\x20\x20\x3c\x6d\x65\x74\x61\x20\x63\x68\x61\x72\x73\x65\x74\x3d\x22\x55\x54\x46\x2d\x38\x22\x3e\x0a\x20\x20\x20\x20\x3c\x6d\x65\x74\x61\x20\x6e\x61\x6d\x65\x3d\x22\x76\x69\x65\x77\x70\x6f\x72\x74\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x65\x6e\x74\x3d\x22\x77\x69\x64\x74\x68\x3d\x64\x65\x76\x69\x63\x65\x2d\x77\x69\x64\x74\x68\x2c\x20\x75\x73\x65\x72\x2d\x73\x63\x61\x6c\x61\x62\x6c\x65\x3d\x6e\x6f\x2c\x20\x69\x6e\x69\x74\x69\x61\x6c\x2d\x73\x63\x61\x6c\x65\x3d\x31\x2e\x30\x2c\x20\x6d\x61\x78\x69\x6d\x75\x6d\x2d\x73\x63\x61\x6c\x65\x3d\x31\x2e\x30\x2c\x20\x6d\x69\x6e\x69\x6d\x75\x6d\x2d\x73\x63\x61\x6c\x65\x3d\x31\x2e\x30\x22\x3e\x0a\x20\x20\x20\x20\x3c\x6d\x65\x74\x61\x20\x68\x74\x74\x70\x2d\x65\x71\x75\x69\x76\x3d\x22\x58\x2d\x55\x41\x2d\x43\x6f\x6d\x70\x61\x74\x69\x62\x6c\x65\x22\x20\x63\x6f\x6e\x74\x65\x6e\x74\x3d\x22\x69\x65\x3d\x65\x64\x67\x65\x22\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x6b\x20\x72\x65\x6c\x3d\x22\x73\x74\x79\x6c\x65\x73\x68\x65\x65\x74\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x68\x72\x65\x66\x3d\x22\x68\x74\x74\x70\x73\x3a\x2f\x2f\x63\x64\x6e\x6a\x73\x2e\x63\x6c\x6f\x75\x64\x66\x6c\x61\x72\x65\x2e\x63\x6f\x6d\x2f\x61\x6a\x61\x78\x2f\x6c\x69\x62\x73\x2f\x62\x75\x6c\x6d\x61\x2f\x30\x2e\x39\x2e\x31\x2f\x63\x73\x73\x2f\x62\x75\x6c\x6d\x61\x2e\x6d\x69\x6e\x2e\x63\x73\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x74\x65\x67\x72\x69\x74\x79\x3d\x22\x73\x68\x61\x35\x31\x32\x2d\x5a\x52\x76\x34\x30\x6c\x6c\x45\x6f\x67\x52\x6d\x6f\x57\x67\x5a\x77\x6e\x73\x71\x6b\x65\x33\x48\x4e\x7a\x4a\x30\x6b\x69\x49\x30\x2b\x70\x63\x4d\x67\x69\x7a\x32\x62\x78\x4f\x36\x45\x77\x31\x44\x56\x42\x74\x57\x6a\x56\x6e\x30\x71\x6a\x72\x58\x64\x54\x33\x2b\x75\x2b\x70\x53\x4e\x33\x36\x67\x4c\x67\x6d\x4a\x69\x69\x51\x33\x63\x51\x74\x79\x7a\x41\x3d\x3d\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x72\x6f\x73\x73\x6f\x72\x69\x67\x69\x6e\x3d\x22\x61\x6e\x6f\x6e\x79\x6d\x6f\x75\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x74\x69\x74\x6c\x65\x3e\x7b\x7b\x20\x2e\x61\x70\x70\x2e\x43\x6f\x6e\x66\x69\x67\x2e\x41\x70\x70\x4e\x61\x6d\x65\x20\x7d\x7d\x7b\x7b\x20\x69\x66\x20\x2e\x74\x69\x74\x6c\x65\x20\x7d\x7d\x20\x7c\x20\x7b\x7b\x20\x2e\x74\x69\x74\x6c\x65\x20\x7d\x7d\x7b\x7b\x20\x65\x6e\x64\x20\x7d\x7d\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x3c\x62\x6f\x64\x79\x3e\x0a\x20\x20\x20\x20\x7b\x7b\x20\x74\x65\x6d\x70\x6c\x61\x74\x65\x20\x22\x70\x61\x72\x74\x69\x61\x6c\x73\x2f\x6e\x61\x76\x62\x61\x72\x22\x20\x2e\x20\x7d\x7d\x0a\x20\x20\x20\x20\x3c\x73\x65\x63\x74\x69\x6f\x6e\x20\x63\x6c\x61\x73\x73\x3d\x22\x73\x65\x63\x74\x69\x6f\x6e\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x69\x76\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7b\x7b\x20\x65\x6d\x62\x65\x64\x20\x7d\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x64\x69\x76\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x73\x65\x63\x74\x69\x6f\x6e\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x0a\x3c\x2f\x68\x74\x6d\x6c\x3e\x0a")
// FilePartialsLoginFormHTML is "partials/login-form.html"
var FilePartialsLoginFormHTML = []byte("\x3c\x66\x6f\x72\x6d\x20\x61\x63\x74\x69\x6f\x6e\x3d\x22\x2f\x6c\x6f\x67\x69\x6e\x2f\x22\x20\x6d\x65\x74\x68\x6f\x64\x3d\x22\x50\x4f\x53\x54\x22\x3e\x0a\x20\x20\x20\x20\x3c\x64\x69\x76\x20\x63\x6c\x61\x73\x73\x3d\x22\x66\x69\x65\x6c\x64\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x6c\x61\x62\x65\x6c\x20\x66\x6f\x72\x3d\x22\x6c\x6f\x67\x69\x6e\x22\x20\x63\x6c\x61\x73\x73\x3d\x22\x6c\x61\x62\x65\x6c\x22\x3e\x55\x73\x65\x72\x6e\x61\x6d\x65\x3c\x2f\x6c\x61\x62\x65\x6c\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x69\x76\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6f\x6e\x74\x72\x6f\x6c\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x6e\x70\x75\x74\x20\x74\x79\x70\x65\x3d\x22\x74\x65\x78\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x75\x73\x65\x72\x6e\x61\x6d\x65\x22\x20\x63\x6c\x61\x73\x73\x3d\x22\x69\x6e\x70\x75\x74\x22\x20\x72\x65\x71\x75\x69\x72\x65\x64\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x64\x69\x76\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x64\x69\x76\x3e\x0a\x20\x20\x20\x20\x3c\x64\x69\x76\x20\x63\x6c\x61\x73\x73\x3d\x22\x66\x69\x65\x6c\x64\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x6c\x61\x62\x65\x6c\x20\x66\x6f\x72\x3d\x22\x70\x61\x73\x73\x77\x6f\x72\x64\x22\x20\x63\x6c\x61\x73\x73\x3d\x22\x6c\x61\x62\x65\x6c\x22\x3e\x50\x61\x73\x73\x77\x6f\x72\x64\x3c\x2f\x6c\x61\x62\x65\x6c\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x69\x76\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6f\x6e\x74\x72\x6f\x6c\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x6e\x70\x75\x74\x20\x74\x79\x70\x65\x3d\x22\x70\x61\x73\x73\x77\x6f\x72\x64\x22\x20\x6e\x61\x6d\x65\x3d\x22\x70\x61\x73\x73\x77\x6f\x72\x64\x22\x20\x63\x6c\x61\x73\x73\x3d\x22\x69\x6e\x70\x75\x74\x22\x20\x70\x6c\x61\x63\x65\x68\x6f\x6c\x64\x65\x72\x3d\x22\x2a\x2a\x2a\x2a\x2a\x20\x2a\x2a\x2a\x22\x20\x72\x65\x71\x75\x69\x72\x65\x64\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x64\x69\x76\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x64\x69\x76\x3e\x0a\x20\x20\x20\x20\x3c\x64\x69\x76\x20\x63\x6c\x61\x73\x73\x3d\x22\x63\x6f\x6e\x74\x72\x6f\x6c\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x6e\x70\x75\x74\x20\x74\x79\x70\x65\x3d\x22\x73\x75\x62\x6d\x69\x74\x22\x20\x63\x6c\x61\x73\x73\x3d\x22\x62\x75\x74\x74\x6f\x6e\x22\x20\x76\x61\x6c\x75\x65\x3d\x22\x4c\x6f\x67\x69\x6e\x22\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x64\x69\x76\x3e\x0a\x3c\x2f\x66\x6f\x72\x6d\x3e\x0a")
// FilePartialsNavbarLoginHTML is "partials/navbar-login.html"
var FilePartialsNavbarLoginHTML = []byte("\x3c\x64\x69\x76\x20\x63\x6c\x61\x73\x73\x3d\x22\x6e\x61\x76\x62\x61\x72\x2d\x65\x6e\x64\x22\x3e\x0a\x20\x20\x20\x20\x3c\x64\x69\x76\x20\x63\x6c\x61\x73\x73\x3d\x22\x6e\x61\x76\x62\x61\x72\x2d\x69\x74\x65\x6d\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7b\x7b\x20\x69\x66\x20\x2e\x75\x73\x65\x72\x20\x2d\x7d\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x69\x76\x20\x63\x6c\x61\x73\x73\x3d\x22\x62\x75\x74\x74\x6f\x6e\x73\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x61\x20\x63\x6c\x61\x73\x73\x3d\x22\x62\x75\x74\x74\x6f\x6e\x20\x69\x73\x2d\x6c\x69\x67\x68\x74\x22\x20\x68\x72\x65\x66\x3d\x22\x2f\x6c\x6f\x67\x6f\x75\x74\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x70\x61\x6e\x3e\x4c\x6f\x67\x20\x6f\x75\x74\x20\x3c\x62\x3e\x7b\x7b\x20\x2e\x75\x73\x65\x72\x2e\x44\x69\x73\x70\x6c\x61\x79\x4e\x61\x6d\x65\x20\x7d\x7d\x3c\x2f\x62\x3e\x3c\x2f\x73\x70\x61\x6e\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x61\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x64\x69\x76\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7b\x7b\x2d\x20\x65\x6c\x73\x65\x20\x2d\x7d\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7b\x7b\x20\x69\x66\x20\x65\x71\x20\x28\x6c\x65\x6e\x20\x2e\x61\x75\x74\x68\x29\x20\x31\x20\x2d\x7d\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7b\x7b\x20\x77\x69\x74\x68\x20\x28\x69\x6e\x64\x65\x78\x20\x2e\x61\x75\x74\x68\x20\x30\x29\x20\x2d\x7d\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x69\x76\x20\x63\x6c\x61\x73\x73\x3d\x22\x62\x75\x74\x74\x6f\x6e\x73\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x61\x20\x63\x6c\x61\x73\x73\x3d\x22\x62\x75\x74\x74\x6f\x6e\x20\x69\x73\x2d\x6c\x69\x67\x68\x74\x22\x20\x68\x72\x65\x66\x3d\x22\x7b\x7b\x20\x2e\x4c\x6f\x67\x69\x6e\x55\x52\x4c\x20\x7d\x7d\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x4c\x6f\x67\x20\x69\x6e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x61\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7b\x7b\x20\x69\x66\x20\x2e\x52\x65\x67\x69\x73\x74\x65\x72\x55\x52\x4c\x20\x2d\x7d\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x61\x20\x63\x6c\x61\x73\x73\x3d\x22\x62\x75\x74\x74\x6f\x6e\x20\x69\x73\x2d\x6c\x69\x67\x68\x74\x22\x20\x68\x72\x65\x66\x3d\x22\x7b\x7b\x20\x2e\x52\x65\x67\x69\x73\x74\x65\x72\x55\x52\x4c\x20\x7d\x7d\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x52\x65\x67\x69\x73\x74\x65\x72\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x61\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x64\x69\x76\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x20\x20\x20\x20\x3c\x2f\x64\x69\x76\x3e\x0a\x3c\x2f\x64\x69\x76\x3e\x0a")
@ -135,6 +138,25 @@ func init() {
f, err = FS.OpenFile(CTX, "partials/login-form.html", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
if err != nil {
panic(err)
}
_, err = f.Write(FilePartialsLoginFormHTML)
if err != nil {
panic(err)
}
err = f.Close()
if err != nil {
panic(err)
}
f, err = FS.OpenFile(CTX, "partials/navbar-login.html", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
if err != nil {
panic(err)

View file

@ -0,0 +1,17 @@
<form action="/login/" method="POST">
<div class="field">
<label for="login" class="label">Username</label>
<div class="control">
<input type="text" name="username" class="input" required="">
</div>
</div>
<div class="field">
<label for="password" class="label">Password</label>
<div class="control">
<input type="password" name="password" class="input" placeholder="***** ***" required="">
</div>
</div>
<div class="control">
<input type="submit" class="button" value="Login">
</div>
</form>