Skip to content

Commit

Permalink
added new core.ServeEvent fields
Browse files Browse the repository at this point in the history
  • Loading branch information
ganigeorgiev committed May 29, 2023
1 parent 9d8df8d commit d3711b0
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 22 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
15 changes: 1 addition & 14 deletions apis/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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
Expand Down
15 changes: 9 additions & 6 deletions apis/serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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),
Expand All @@ -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 {
Expand Down
9 changes: 7 additions & 2 deletions core/events.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package core

import (
"net/http"

"github.com/labstack/echo/v5"
"github.com/pocketbase/pocketbase/daos"
"github.com/pocketbase/pocketbase/models"
Expand All @@ -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 (
Expand Down Expand Up @@ -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 {
Expand Down

0 comments on commit d3711b0

Please sign in to comment.