ShOrgRu/cmd/app/serve/serve.go

50 lines
1.1 KiB
Go
Raw Normal View History

2024-10-06 17:04:37 +03:00
package serve
import (
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
"github.com/ssoda/captcha"
"github.com/uptrace/bun/extra/bundebug"
"github.com/urfave/cli/v2"
"sh.org.ru/pkg/config"
"sh.org.ru/pkg/db"
"sh.org.ru/pkg/handler"
"sh.org.ru/static"
)
func Run(c *cli.Context) error {
configFile := c.String("config")
cfg, err := config.New(configFile)
if err != nil {
return err
}
db := db.New(cfg.DB)
db.AddQueryHook(bundebug.NewQueryHook(bundebug.WithVerbose(cfg.Debug)))
h := handler.Handler{DB: db}
e := echo.New()
e.Use(middleware.Recover())
e.Use(middleware.Logger())
e.GET("/", h.Index)
e.GET("/random", h.Random)
e.GET("/quote/:id", h.Quote)
e.GET("/add", h.AddQuote)
e.POST("/add", h.AddQuotePost)
e.GET("/add/success", h.AddQuoteSuccess)
e.GET("/captcha/*", echo.WrapHandler(captcha.Server(400, 65)))
func(g *echo.Group) {
g.GET("/", h.Admin)
g.POST("/action", h.AdminAction)
}(e.Group("/admin", middleware.BasicAuth(func(u, p string, ctx echo.Context) (bool, error) {
return cfg.Admins[u] == p, nil
})))
e.StaticFS("/", static.FS)
return e.Start(cfg.Listen)
}