aboutsummaryrefslogtreecommitdiff
path: root/app/cmd/serve.go
diff options
context:
space:
mode:
authorAlexander NeonXP Kiryukhin <i@neonxp.ru>2024-07-29 02:47:35 +0300
committerAlexander NeonXP Kiryukhin <i@neonxp.ru>2024-07-29 02:47:35 +0300
commit96e2ce2e9d363a6296f9411ecb00168520258874 (patch)
tree09aa7fffe10eab84ae0edd39e570355984ba0148 /app/cmd/serve.go
parent12ed72e4e1da181a6c87319a50d3b4142788b4c0 (diff)
Отказ от echo
Diffstat (limited to 'app/cmd/serve.go')
-rw-r--r--app/cmd/serve.go90
1 files changed, 40 insertions, 50 deletions
diff --git a/app/cmd/serve.go b/app/cmd/serve.go
index e2d2843..578de1e 100644
--- a/app/cmd/serve.go
+++ b/app/cmd/serve.go
@@ -7,21 +7,19 @@ import (
"net"
"net/http"
- "github.com/labstack/echo-contrib/session"
- "github.com/labstack/echo/v4"
- echomiddleware "github.com/labstack/echo/v4/middleware"
_ "github.com/mattn/go-sqlite3"
- "github.com/michaeljs1990/sqlitestore"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"gitrepo.ru/neonxp/gorum/contextlib"
- "gitrepo.ru/neonxp/gorum/db"
- "gitrepo.ru/neonxp/gorum/middleware"
+ "gitrepo.ru/neonxp/gorum/controllers"
+ appmiddleware "gitrepo.ru/neonxp/gorum/middleware"
"gitrepo.ru/neonxp/gorum/repository"
- "gitrepo.ru/neonxp/gorum/routes"
- "gitrepo.ru/neonxp/gorum/utils"
"gitrepo.ru/neonxp/gorum/views"
"gitrepo.ru/neonxp/gorum/views/assets"
+ "go.etcd.io/bbolt"
+ "go.neonxp.ru/mux"
+ "go.neonxp.ru/mux/middleware"
+ "go.neonxp.ru/mux/middleware/session"
)
var (
@@ -57,7 +55,7 @@ func serve(ctx context.Context) error {
)
ctx = context.WithValue(ctx, contextlib.ThemeKey, theme)
- orm, err := db.GetDB(dbFile)
+ orm, err := bbolt.Open(dbFile, 0600, nil)
if err != nil {
return err
}
@@ -65,59 +63,51 @@ func serve(ctx context.Context) error {
defer orm.Close()
userRepo := repository.NewUser(orm)
- nodeRepo := repository.NewNode(orm)
+ nodeRepo := repository.NewPost(orm)
+ topicRepo := repository.NewTopic(orm)
- r := routes.NewRouter(userRepo, nodeRepo)
-
- e := echo.New()
-
- e.HideBanner = true
-
- e.HTTPErrorHandler = func(err error, c echo.Context) {
- _ = utils.Render(c, views.ErrorPage(err))
+ if err := topicRepo.Init(); err != nil {
+ return err
}
-
- sessionStore, err := sqlitestore.NewSqliteStoreFromConnection(orm.DB, "sessions", "", 0, []byte(sessionSecret))
- if err != nil {
- return fmt.Errorf("failed init session store: %w", err)
+ if err := userRepo.Init(); err != nil {
+ return err
}
- e.Use(
- echomiddleware.Recover(),
- echomiddleware.Gzip(),
- // echomiddleware.CSRFWithConfig(echomiddleware.CSRFConfig{
- // Skipper: echomiddleware.DefaultSkipper,
- // TokenLength: 32,
- // TokenLookup: "form:" + echo.HeaderXCSRFToken,
- // ContextKey: "csrf",
- // CookieName: "_csrf",
- // CookieMaxAge: 86400,
- // }),
- session.Middleware(sessionStore),
- middleware.UserMiddleware(),
- )
+ r := controllers.NewRouter(userRepo, nodeRepo, topicRepo)
- e.GET("/register", r.Register)
- e.POST("/register", r.Register)
- e.GET("/login", r.Login)
- e.POST("/login", r.Login)
- e.POST("/logout", r.Logout)
+ e := http.NewServeMux()
- e.GET("/", r.Node)
- e.GET("/p/:id", r.Node)
- e.GET("/p/:id/new", r.NewPost)
- e.POST("/p/:id/new", r.NewPost)
- e.GET("/t/:id", r.Node)
- e.GET("/t/:id/new", r.NewTopic)
- e.POST("/t/:id/new", r.NewTopic)
+ mux.DefaultErrorHandler = func(err error) mux.Renderer {
+ return views.ErrorPage(err)
+ }
- e.StaticFS("/assets", assets.FS)
+ e.HandleFunc("GET /register", r.Register)
+ e.HandleFunc("POST /register", r.Register)
+ e.HandleFunc("GET /login", r.Login)
+ e.HandleFunc("POST /login", r.Login)
+ e.HandleFunc("POST /logout", r.Logout)
+
+ e.HandleFunc("GET /{$}", r.Index)
+ e.HandleFunc("GET /t/{id}", r.Topic)
+ e.HandleFunc("GET /t/new", r.NewTopic)
+ e.HandleFunc("POST /t/new", r.NewTopic)
+ e.HandleFunc("POST /p/new", r.NewPost)
+
+ e.Handle("/assets/", http.StripPrefix("/assets", http.FileServerFS(assets.FS)))
+
+ mh := mux.Use(e,
+ middleware.Logger(slog.Default()),
+ middleware.Recover(slog.Default()),
+ middleware.RequestID,
+ appmiddleware.UserMiddleware(),
+ session.Middleware(session.DefaultConfig, session.NewBoltStore(orm, []byte("sessions"))),
+ )
slog.InfoContext(ctx, "started gorum", slog.String("bind", listen))
server := http.Server{
Addr: listen,
- Handler: e,
+ Handler: mh,
ErrorLog: slog.NewLogLogger(slog.Default().Handler(), slog.LevelError),
ConnContext: func(cctx context.Context, c net.Conn) context.Context {
return ctx