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 secret, err := classes.JWTSecret(app) if err != nil { return err } if gdb, ok := app.Lookup[*gorm.DB](); ok { if err := classes.RegisterHooks(gdb); err != nil { return err } } reg, ok := app.Lookup[*bouncer.Registry]() if !ok || reg == nil { reg = bouncer.NewRegistry() if err := app.Publish(reg); err != nil { return err } } return reg.Register(p.ID(), "jwt", bouncer.NewJWTGuard(secret, classes.GormUsers{App: app}, 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 { if p.app == nil { return nil } reg, ok := p.app.Lookup[*bouncer.Registry]() if !ok || reg == nil { return nil } mw, err := reg.Middleware("jwt") if err != nil { return nil } return map[string]pact.Middleware{"jwt.auth": mw} } func init() { party.Register(&Plugin{}) }