package user import ( "embed" "io/fs" "git.golem15.com/golem15/fonoteka/plugins/golem15/user/classes" "git.golem15.com/golem15/fonoteka/plugins/golem15/user/models" "git.golem15.com/golem15/fonoteka/plugins/golem15/user/updates" "git.golem15.com/golem15/summercms/backpack" "git.golem15.com/golem15/summercms/bouncer" "git.golem15.com/golem15/summercms/pact" "git.golem15.com/golem15/summercms/party" "github.com/go-gormigrate/gormigrate/v2" "gorm.io/gorm" ) var ( _ party.Plugin = (*Plugin)(nil) _ pact.HasConfig = (*Plugin)(nil) _ pact.HasMigrations = (*Plugin)(nil) _ pact.HasMiddleware = (*Plugin)(nil) _ pact.HasModels = (*Plugin)(nil) _ bouncer.UserProvider = classes.GormUsers{} ) //go:embed config var configFS embed.FS // Plugin is the stub golem15.user plugin. type Plugin struct { app *backpack.App } func (p *Plugin) ID() string { return "golem15.user" } func (p *Plugin) Requires() []string { return nil } func (p *Plugin) Register(app *backpack.App) error { p.app = app return nil } func (p *Plugin) Boot(app *backpack.App) error { p.app = app if _, err := classes.JWTSecret(app); err != nil { return err } if gdb, ok := app.Lookup[*gorm.DB](); ok { if err := classes.RegisterHooks(gdb); err != nil { return err } } return nil } func (p *Plugin) ConfigFS() fs.FS { return configFS } func (p *Plugin) Migrations() []*gormigrate.Migration { return updates.All() } func (p *Plugin) Models() []any { return models.All() } func (p *Plugin) Middlewares() map[string]pact.Middleware { secret, err := classes.JWTSecret(p.app) if err != nil { return nil } return map[string]pact.Middleware{ "jwt.auth": bouncer.Middleware(secret, classes.GormUsers{App: p.app}), } } func init() { party.Register(&Plugin{}) }