diff options
author | Alexander NeonXP Kiryukhin <i@neonxp.ru> | 2024-07-29 02:47:35 +0300 |
---|---|---|
committer | Alexander NeonXP Kiryukhin <i@neonxp.ru> | 2024-07-29 02:47:35 +0300 |
commit | 96e2ce2e9d363a6296f9411ecb00168520258874 (patch) | |
tree | 09aa7fffe10eab84ae0edd39e570355984ba0148 /app/cmd/serve.go | |
parent | 12ed72e4e1da181a6c87319a50d3b4142788b4c0 (diff) |
Отказ от echo
Diffstat (limited to 'app/cmd/serve.go')
-rw-r--r-- | app/cmd/serve.go | 90 |
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 |