Konfi-Castle-Kasino/pkg/router/router.go

90 lines
1.8 KiB
Go

package router
import (
"html/template"
"net/http"
"git.kolaente.de/konrad/Konfi-Castle-Kasino/pkg/config"
"git.kolaente.de/konrad/Konfi-Castle-Kasino/pkg/models"
"github.com/gorilla/sessions"
"github.com/labstack/echo-contrib/session"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
"github.com/labstack/gommon/log"
)
func NewEcho() *echo.Echo {
e := echo.New()
e.HideBanner = true
//Template
t := &Template{
templates: template.Must(template.ParseGlob("tpl/*.html")),
}
e.Renderer = t
//Logger
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
Format: "${time_rfc3339}: ${remote_ip} ${method} ${status} ${uri} - ${user_agent}\n",
}))
// Session middleware
e.Use(session.Middleware(sessions.NewCookieStore([]byte("secret"))))
return e
}
func RegisterRoutes(e *echo.Echo) {
//Static ontent
e.Static("/assets", "assets")
//Routes
e.GET("/admin", adminHandler)
e.GET("/", showList)
e.GET("/ws", ws)
e.POST("/login", login)
e.GET("/logout", logout)
var handler Handler
switch config.GetMode() {
case 0:
handler = Handler{
str: func() models.Managable {
return &models.Kofi{}
},
}
case 1:
handler = Handler{
str: func() models.Managable {
return &models.Community{}
},
}
default:
log.Fatal("Invalid Mode!")
}
e.GET("/list", handler.ReadAll)
// Fancy message broker with SSE
b := NewBroker()
b.Start()
b.handler = &handler
e.GET("/events", b.Serve)
// Routes with auth
a := e.Group("")
a.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
if !isLoggedIn(c) {
return echo.NewHTTPError(http.StatusForbidden, "Login first.")
}
return next(c)
}
})
a.POST("/update", handler.Update)
a.POST("/delete", handler.Delete)
a.POST("/add", handler.Create)
}