pop-camarades/main.go

110 lines
2.3 KiB
Go

package main
import (
"embed"
"fmt"
"io/fs"
"log"
"net/http"
"git.readonly.ch/bouzoure/popvaud-people/controllers"
"git.readonly.ch/bouzoure/popvaud-people/helpers"
"git.readonly.ch/bouzoure/popvaud-people/middlewares"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/filesystem"
"github.com/gofiber/template/django/v3"
)
//go:embed static/*
var embedStatic embed.FS
//go:embed views
var embedViews embed.FS
func main() {
config, err := helpers.GetConfig()
if err != nil {
// TODO: Handle exception
log.Fatal(err)
}
_, err = helpers.GetDatabase()
if err != nil {
// TODO: Handle exception
log.Fatal(err)
}
accountCheck, err := helpers.FirstAccountCheck()
if err != nil {
// TODO: Handle exception
log.Fatal(err)
}
if !accountCheck {
err = helpers.FirstAccountCreate()
if err != nil {
// TODO: Handle exception
log.Fatal(err)
}
}
// Create a new engine
var engine *django.Engine
if config.Debug {
engine = django.New("./views", ".html")
engine.ShouldReload = true
} else {
embedViews2, err := fs.Sub(embedViews, "views")
if err != nil {
log.Fatal(err)
}
engine = django.NewFileSystem(
http.FS(embedViews2),
".html",
)
}
app := fiber.New(fiber.Config{
Views: engine,
})
if config.Debug {
app.Static("/static", "./static")
} else {
app.Use("/static", filesystem.New(filesystem.Config{
Root: http.FS(embedStatic),
PathPrefix: "static",
Browse: false,
}))
}
// Middlewares
app.Use(middlewares.AuthMiddleware)
app.Use(middlewares.WelcomeMiddleware)
app.Use(middlewares.MfaEnrollMiddleware)
app.Use(middlewares.MfaVerifyMiddleware)
// Controllers
app.Get("/", controllers.Homepage)
app.Get("/login", controllers.LoginForm)
app.Post("/login", controllers.LoginForm)
app.Get("/logout", controllers.LogoutProcess)
app.Get("/welcome", controllers.WelcomePage)
app.Post("/welcome", controllers.WelcomePage)
app.Get("/totp/enroll", controllers.TotpEnrollPage)
app.Post("/totp/enroll", controllers.TotpEnrollPage)
app.Get("/totp/verify", controllers.TotpVerifyPage)
app.Post("/totp/verify", controllers.TotpVerifyPage)
listenAddr := fmt.Sprintf(
"%s:%d",
config.App.ListenAddress,
config.App.ListenPort,
)
err = app.Listen(listenAddr)
if err != nil {
log.Fatal(err)
}
}