modweb/app.go

68 lines
1.3 KiB
Go
Raw Normal View History

2020-11-11 22:48:11 +00:00
package modweb
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/session/v2"
"github.com/gofiber/template/html"
"github.com/markbates/pkger"
)
type App struct {
config Config
modules map[string]Module
fiber *fiber.App
sessions *session.Session
authHandlers []AuthHandler
}
func (app *App) data(d fiber.Map) fiber.Map {
base := fiber.Map{
"app": app,
"username": "ptrcnull",
}
for k, v := range d {
base[k] = v
}
return base
}
func New(configs ...Config) *App {
views := html.NewFileSystem(pkger.Dir("/templates"), ".html")
app := &App{
fiber: fiber.New(fiber.Config{Views: views}),
sessions: session.New(),
modules: map[string]Module{},
}
if len(configs) > 0 {
app.config = configs[0]
}
app.fiber.Get("/", func(ctx *fiber.Ctx) error {
store := app.sessions.Get(ctx)
defer store.Save()
// _, loggedIn := store.Get("discordId")
return ctx.Render("homepage", app.data(fiber.Map{
"title": "Homepage",
}), "layouts/main")
})
return app
}
func (app *App) Register(module Module) {
app.modules[module.Name()] = module
module.Init(app)
app.fiber.Get("/"+module.Name()+"/", func(ctx *fiber.Ctx) error {
return ctx.Render("homepage", app.data(fiber.Map{
"title": "Homepage",
}), "layouts/main")
})
}
func (app *App) Run(addr string) error {
return app.fiber.Listen(addr)
}