119 lines
2.7 KiB
Go
119 lines
2.7 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"git.tijl.dev/tijl/tijl.dev/internal/assets"
|
|
"git.tijl.dev/tijl/tijl.dev/internal/config"
|
|
"git.tijl.dev/tijl/tijl.dev/internal/db"
|
|
"git.tijl.dev/tijl/tijl.dev/internal/i18n"
|
|
"git.tijl.dev/tijl/tijl.dev/internal/oidc"
|
|
"git.tijl.dev/tijl/tijl.dev/modules/logger"
|
|
"git.tijl.dev/tijl/tijl.dev/static"
|
|
"git.tijl.dev/tijl/tijl.dev/views"
|
|
"github.com/gofiber/contrib/fiberzerolog"
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/gofiber/fiber/v2/middleware/filesystem"
|
|
"github.com/gofiber/template/html/v2"
|
|
)
|
|
|
|
func main() {
|
|
// Load initial context
|
|
ctx := context.Background()
|
|
|
|
// Load config
|
|
config.Load()
|
|
|
|
// Load database
|
|
db.Load()
|
|
|
|
// Setup oidc
|
|
oidc.Load(ctx)
|
|
|
|
// Load assets
|
|
assets.Load()
|
|
// Load translations
|
|
i18n.Load()
|
|
|
|
// Init templating engine
|
|
engine := html.NewFileSystem(http.FS(views.Embed), ".html")
|
|
engine.AddFunc("icon", assets.Svg)
|
|
|
|
// Init fiber
|
|
app := fiber.New(fiber.Config{
|
|
Views: engine,
|
|
DisableStartupMessage: true,
|
|
})
|
|
app.Use(fiberzerolog.New(fiberzerolog.Config{
|
|
Logger: &log.Logger,
|
|
}))
|
|
|
|
/*
|
|
Routes
|
|
*/
|
|
app.Get("/", func(c *fiber.Ctx) error {
|
|
data := getCommon(c)
|
|
data["Title"] = i18n.Translate(c, "home")
|
|
return c.Render("index", data, "layouts/base")
|
|
})
|
|
app.Get("/blog", func(c *fiber.Ctx) error {
|
|
data := getCommon(c)
|
|
data["Title"] = i18n.Translate(c, "blog")
|
|
return c.Render("blog", data, "layouts/base")
|
|
})
|
|
app.Get("/projects", func(c *fiber.Ctx) error {
|
|
data := getCommon(c)
|
|
data["Title"] = i18n.Translate(c, "projects")
|
|
return c.Render("projects", data, "layouts/base")
|
|
})
|
|
app.Get("/about", func(c *fiber.Ctx) error {
|
|
data := getCommon(c)
|
|
data["Title"] = i18n.Translate(c, "about")
|
|
return c.Render("about", data, "layouts/base")
|
|
})
|
|
app.Get("/settings", func(c *fiber.Ctx) error {
|
|
lang := c.Query("lang")
|
|
redirectURL := c.Query("redirect")
|
|
if lang != "" {
|
|
c.Cookie(&fiber.Cookie{
|
|
Name: "language",
|
|
Value: lang,
|
|
Secure: false,
|
|
})
|
|
}
|
|
if redirectURL != "" {
|
|
return c.Redirect(redirectURL)
|
|
}
|
|
return nil
|
|
})
|
|
|
|
app.Get("/login", oidc.HandleRedirect)
|
|
app.Get(config.Config.Oidc.CallbackUrl, oidc.HandleCallback)
|
|
|
|
// Static routes
|
|
app.Use("/static", filesystem.New(filesystem.Config{
|
|
Root: http.FS(static.Embed),
|
|
}))
|
|
|
|
// 404
|
|
app.Use(func(c *fiber.Ctx) error {
|
|
data := getCommon(c)
|
|
return c.Render("404", data, "layouts/base")
|
|
})
|
|
|
|
// Listen web server
|
|
if err := app.Listen(":3000"); err != nil {
|
|
log.Fatal().Err(err).Msg("Fiber app error")
|
|
}
|
|
}
|
|
|
|
// Common functions for in templating
|
|
func getCommon(c *fiber.Ctx) fiber.Map {
|
|
return fiber.Map{
|
|
"Path": c.Path(),
|
|
"Language": i18n.GetLanguage(c),
|
|
"T": i18n.GetTranslations(i18n.GetLanguage(c)),
|
|
}
|
|
}
|