tijl.dev-core/cmd/server/main.go

133 lines
3.0 KiB
Go
Raw Normal View History

2024-08-19 22:32:43 +02:00
package main
import (
2024-08-21 15:43:24 +02:00
"context"
2024-08-20 11:49:05 +02:00
"net/http"
2024-08-19 22:32:43 +02:00
"git.tijl.dev/tijl/tijl.dev/internal/assets"
2024-08-20 13:35:49 +02:00
"git.tijl.dev/tijl/tijl.dev/internal/config"
2024-08-21 15:43:24 +02:00
"git.tijl.dev/tijl/tijl.dev/internal/db"
2024-08-19 22:32:43 +02:00
"git.tijl.dev/tijl/tijl.dev/internal/i18n"
2024-08-21 15:43:24 +02:00
"git.tijl.dev/tijl/tijl.dev/internal/oidc"
2024-08-21 17:31:03 +02:00
"git.tijl.dev/tijl/tijl.dev/internal/sessions"
2024-08-21 01:08:47 +02:00
"git.tijl.dev/tijl/tijl.dev/modules/logger"
2024-08-20 11:49:05 +02:00
"git.tijl.dev/tijl/tijl.dev/static"
"git.tijl.dev/tijl/tijl.dev/views"
2024-08-21 01:08:47 +02:00
"github.com/gofiber/contrib/fiberzerolog"
2024-08-19 22:32:43 +02:00
"github.com/gofiber/fiber/v2"
2024-08-20 11:49:05 +02:00
"github.com/gofiber/fiber/v2/middleware/filesystem"
2024-08-19 22:32:43 +02:00
"github.com/gofiber/template/html/v2"
)
func main() {
2024-08-21 15:43:24 +02:00
// Load initial context
ctx := context.Background()
2024-08-20 13:35:49 +02:00
2024-08-21 01:08:47 +02:00
// Load config
2024-08-20 13:35:49 +02:00
config.Load()
2024-08-21 15:43:24 +02:00
// Load database
db.Load()
// Setup oidc
oidc.Load(ctx)
2024-08-21 01:08:47 +02:00
// Load assets
2024-08-20 13:35:49 +02:00
assets.Load()
2024-08-21 01:08:47 +02:00
// Load translations
2024-08-20 13:35:49 +02:00
i18n.Load()
2024-08-19 22:32:43 +02:00
2024-08-21 01:08:47 +02:00
// Init templating engine
engine := html.NewFileSystem(http.FS(views.Embed), ".html")
2024-08-19 22:32:43 +02:00
engine.AddFunc("icon", assets.Svg)
2024-08-20 11:49:05 +02:00
2024-08-21 01:08:47 +02:00
// Init fiber
2024-08-19 22:32:43 +02:00
app := fiber.New(fiber.Config{
2024-08-20 13:35:49 +02:00
Views: engine,
DisableStartupMessage: true,
2024-08-19 22:32:43 +02:00
})
2024-08-21 01:08:47 +02:00
app.Use(fiberzerolog.New(fiberzerolog.Config{
Logger: &log.Logger,
}))
2024-08-19 22:32:43 +02:00
2024-08-21 01:08:47 +02:00
/*
Routes
*/
2024-08-19 22:32:43 +02:00
app.Get("/", func(c *fiber.Ctx) error {
2024-08-20 18:25:59 +02:00
data := getCommon(c)
data["Title"] = i18n.Translate(c, "home")
return c.Render("index", data, "layouts/base")
2024-08-20 13:35:49 +02:00
})
app.Get("/blog", func(c *fiber.Ctx) error {
2024-08-20 18:25:59 +02:00
data := getCommon(c)
data["Title"] = i18n.Translate(c, "blog")
return c.Render("blog", data, "layouts/base")
2024-08-20 13:35:49 +02:00
})
app.Get("/projects", func(c *fiber.Ctx) error {
2024-08-20 18:25:59 +02:00
data := getCommon(c)
data["Title"] = i18n.Translate(c, "projects")
return c.Render("projects", data, "layouts/base")
2024-08-20 13:35:49 +02:00
})
app.Get("/about", func(c *fiber.Ctx) error {
2024-08-20 18:25:59 +02:00
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
2024-08-19 22:32:43 +02:00
})
2024-08-21 17:54:36 +02:00
app.Get("/login", func(c *fiber.Ctx) error {
_, err := sessions.GetSession(c)
if err == nil {
return c.Redirect("/account")
} else {
return oidc.HandleRedirect(c)
}
})
2024-08-21 15:43:24 +02:00
app.Get(config.Config.Oidc.CallbackUrl, oidc.HandleCallback)
2024-08-21 01:08:47 +02:00
// Static routes
2024-08-20 11:49:05 +02:00
app.Use("/static", filesystem.New(filesystem.Config{
Root: http.FS(static.Embed),
}))
2024-08-19 22:32:43 +02:00
2024-08-21 01:08:47 +02:00
// 404
2024-08-20 18:25:59 +02:00
app.Use(func(c *fiber.Ctx) error {
data := getCommon(c)
return c.Render("404", data, "layouts/base")
})
2024-08-21 01:08:47 +02:00
// Listen web server
if err := app.Listen(":3000"); err != nil {
log.Fatal().Err(err).Msg("Fiber app error")
}
2024-08-19 22:32:43 +02:00
}
2024-08-20 13:35:49 +02:00
2024-08-21 01:08:47 +02:00
// Common functions for in templating
2024-08-20 13:35:49 +02:00
func getCommon(c *fiber.Ctx) fiber.Map {
2024-08-21 17:31:03 +02:00
_, err := sessions.GetSession(c)
signedIn := false
if err == nil {
signedIn = true
}
2024-08-20 13:35:49 +02:00
return fiber.Map{
2024-08-21 17:31:03 +02:00
"SignedIn": signedIn,
2024-08-20 18:25:59 +02:00
"Path": c.Path(),
"Language": i18n.GetLanguage(c),
"T": i18n.GetTranslations(i18n.GetLanguage(c)),
2024-08-20 13:35:49 +02:00
}
}