68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
|
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)
|
||
|
}
|