110 lines
2.3 KiB
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)
|
|
}
|
|
}
|