From d3711b0503f12491c9db4bdfffdce42d2eb9d4d6 Mon Sep 17 00:00:00 2001 From: Gani Georgiev Date: Mon, 29 May 2023 16:57:50 +0300 Subject: [PATCH] added new core.ServeEvent fields --- CHANGELOG.md | 10 ++++++++++ apis/base.go | 15 +-------------- apis/serve.go | 15 +++++++++------ core/events.go | 9 +++++++-- 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e765d3a..ae7e35ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,16 @@ - `Hook.Add()` and `Hook.PreAdd` now returns a unique string identifier that could be used to remove the registered hook handler via `Hook.Remove(handlerId)`. +- Added new fields to `core.ServeEvent`: + ``` + type ServeEvent struct { + App App + Router *echo.Echo + // new fields + Server *http.Server // allows adjusting the HTTP server config (global timeouts, TLS options, etc.) + CertManager *autocert.Manager // allows adjusting the autocert options (cache dir, host policy, etc.) + } + ``` ## v0.16.4-WIP diff --git a/apis/base.go b/apis/base.go index c2b9a225..ba03929c 100644 --- a/apis/base.go +++ b/apis/base.go @@ -47,6 +47,7 @@ func InitApi(app core.App) (*echo.Echo, error) { e.Use(middleware.Recover()) e.Use(middleware.Secure()) e.Use(LoadAuthContext(app)) + e.Use(eagerRequestDataCache(app)) // custom error handler e.HTTPErrorHandler = func(c echo.Context, err error) { @@ -116,20 +117,6 @@ func InitApi(app core.App) (*echo.Echo, error) { bindHealthApi(app, api) bindBackupApi(app, api) - // trigger the custom BeforeServe hook for the created api router - // allowing users to further adjust its options or register new routes - serveEvent := &core.ServeEvent{ - App: app, - Router: e, - } - if err := app.OnBeforeServe().Trigger(serveEvent); err != nil { - return nil, err - } - - // note: it is after the OnBeforeServe hook to ensure that the implicit - // cache is after any user custom defined middlewares - e.Use(eagerRequestDataCache(app)) - // catch all any route api.Any("/*", func(c echo.Context) error { return echo.ErrNotFound diff --git a/apis/serve.go b/apis/serve.go index 875b401a..cb168c41 100644 --- a/apis/serve.go +++ b/apis/serve.go @@ -27,7 +27,6 @@ type ServeOptions struct { HttpAddr string HttpsAddr string AllowedOrigins []string // optional list of CORS origins (default to "*") - BeforeServeFunc func(server *http.Server) error } // Serve starts a new app web server. @@ -75,7 +74,7 @@ func Serve(app core.App, options *ServeOptions) error { mainHost, _, _ := net.SplitHostPort(mainAddr) - certManager := autocert.Manager{ + certManager := &autocert.Manager{ Prompt: autocert.AcceptTOS, Cache: autocert.DirCache(filepath.Join(app.DataDir(), ".autocert_cache")), HostPolicy: autocert.HostWhitelist(mainHost, "www."+mainHost), @@ -93,10 +92,14 @@ func Serve(app core.App, options *ServeOptions) error { Addr: mainAddr, } - if options.BeforeServeFunc != nil { - if err := options.BeforeServeFunc(serverConfig); err != nil { - return err - } + serveEvent := &core.ServeEvent{ + App: app, + Router: router, + Server: serverConfig, + CertManager: certManager, + } + if err := app.OnBeforeServe().Trigger(serveEvent); err != nil { + return err } if options.ShowStartBanner { diff --git a/core/events.go b/core/events.go index ac8c0715..da62d085 100644 --- a/core/events.go +++ b/core/events.go @@ -1,6 +1,8 @@ package core import ( + "net/http" + "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase/daos" "github.com/pocketbase/pocketbase/models" @@ -12,6 +14,7 @@ import ( "github.com/pocketbase/pocketbase/tools/mailer" "github.com/pocketbase/pocketbase/tools/search" "github.com/pocketbase/pocketbase/tools/subscriptions" + "golang.org/x/crypto/acme/autocert" ) var ( @@ -70,8 +73,10 @@ type TerminateEvent struct { } type ServeEvent struct { - App App - Router *echo.Echo + App App + Router *echo.Echo + Server *http.Server + CertManager *autocert.Manager } type ApiErrorEvent struct {