mirror of
https://github.com/SecurityBrewery/catalyst.git
synced 2025-12-07 07:42:45 +01:00
86 lines
2.0 KiB
Go
86 lines
2.0 KiB
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/pocketbase/pocketbase"
|
|
"github.com/pocketbase/pocketbase/core"
|
|
|
|
"github.com/SecurityBrewery/catalyst/migrations"
|
|
"github.com/SecurityBrewery/catalyst/reaction"
|
|
"github.com/SecurityBrewery/catalyst/webhook"
|
|
)
|
|
|
|
func init() { //nolint:gochecknoinits
|
|
migrations.Register()
|
|
}
|
|
|
|
func App(dir string, test bool) (*pocketbase.PocketBase, error) {
|
|
app := pocketbase.NewWithConfig(pocketbase.Config{
|
|
DefaultDev: test || dev(),
|
|
DefaultDataDir: dir,
|
|
})
|
|
|
|
var appURL string
|
|
|
|
app.RootCmd.PersistentFlags().StringVar(&appURL, "app-url", "", "the app's URL")
|
|
|
|
var flags []string
|
|
|
|
app.RootCmd.PersistentFlags().StringSliceVar(&flags, "flags", nil, "feature flags")
|
|
|
|
_ = app.RootCmd.ParseFlags(os.Args[1:])
|
|
|
|
app.RootCmd.AddCommand(fakeDataCmd(app))
|
|
|
|
webhook.BindHooks(app)
|
|
reaction.BindHooks(app, test)
|
|
|
|
app.OnAfterBootstrap().Add(func(e *core.BootstrapEvent) error {
|
|
if err := MigrateDBs(e.App); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := SetFlags(e.App, flags); err != nil {
|
|
return err
|
|
}
|
|
|
|
if HasFlag(e.App, "demo") {
|
|
bindDemoHooks(e.App)
|
|
}
|
|
|
|
if appURL != "" {
|
|
s := e.App.Settings()
|
|
s.Meta.AppUrl = appURL
|
|
|
|
if err := e.App.Dao().SaveSettings(s); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return e.App.RefreshSettings()
|
|
})
|
|
|
|
app.OnBeforeServe().Add(addRoutes())
|
|
|
|
return app, nil
|
|
}
|
|
|
|
func bindDemoHooks(app core.App) {
|
|
app.OnRecordBeforeCreateRequest("files", "reactions").Add(func(e *core.RecordCreateEvent) error {
|
|
return fmt.Errorf("cannot create %s in demo mode", e.Record.Collection().Name)
|
|
})
|
|
app.OnRecordBeforeUpdateRequest("files", "reactions").Add(func(e *core.RecordUpdateEvent) error {
|
|
return fmt.Errorf("cannot update %s in demo mode", e.Record.Collection().Name)
|
|
})
|
|
app.OnRecordBeforeDeleteRequest("files", "reactions").Add(func(e *core.RecordDeleteEvent) error {
|
|
return fmt.Errorf("cannot delete %s in demo mode", e.Record.Collection().Name)
|
|
})
|
|
}
|
|
|
|
func dev() bool {
|
|
return strings.HasPrefix(os.Args[0], os.TempDir())
|
|
}
|