aboutsummaryrefslogtreecommitdiff
path: root/cmd/app/serve/serve.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/app/serve/serve.go')
-rw-r--r--cmd/app/serve/serve.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/cmd/app/serve/serve.go b/cmd/app/serve/serve.go
new file mode 100644
index 0000000..dcc296b
--- /dev/null
+++ b/cmd/app/serve/serve.go
@@ -0,0 +1,49 @@
+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)
+}