feat: own shared user API tokens
This commit is contained in:
57
plugin.go
57
plugin.go
@@ -12,6 +12,7 @@ import (
|
||||
|
||||
"git.golem15.com/golem15/sm-user-plugin/classes"
|
||||
"git.golem15.com/golem15/sm-user-plugin/console"
|
||||
usermiddleware "git.golem15.com/golem15/sm-user-plugin/middleware"
|
||||
"git.golem15.com/golem15/sm-user-plugin/models"
|
||||
"git.golem15.com/golem15/sm-user-plugin/updates"
|
||||
"git.golem15.com/golem15/summercms/modules/backpack"
|
||||
@@ -25,17 +26,18 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
_ party.Plugin = (*Plugin)(nil)
|
||||
_ pact.HasConfig = (*Plugin)(nil)
|
||||
_ pact.HasMigrations = (*Plugin)(nil)
|
||||
_ pact.HasMiddleware = (*Plugin)(nil)
|
||||
_ pact.HasModels = (*Plugin)(nil)
|
||||
_ pact.HasRoutes = (*Plugin)(nil)
|
||||
_ pact.HasMailTemplates = (*Plugin)(nil)
|
||||
_ pact.HasLang = (*Plugin)(nil)
|
||||
_ pact.HasCommands = (*Plugin)(nil)
|
||||
_ surf.BucketProvider = (*Plugin)(nil)
|
||||
_ bouncer.UserProvider = classes.GormUsers{}
|
||||
_ party.Plugin = (*Plugin)(nil)
|
||||
_ pact.HasConfig = (*Plugin)(nil)
|
||||
_ pact.HasMigrations = (*Plugin)(nil)
|
||||
_ pact.HasMiddleware = (*Plugin)(nil)
|
||||
_ pact.HasMiddlewareFactories = (*Plugin)(nil)
|
||||
_ pact.HasModels = (*Plugin)(nil)
|
||||
_ pact.HasRoutes = (*Plugin)(nil)
|
||||
_ pact.HasMailTemplates = (*Plugin)(nil)
|
||||
_ pact.HasLang = (*Plugin)(nil)
|
||||
_ pact.HasCommands = (*Plugin)(nil)
|
||||
_ surf.BucketProvider = (*Plugin)(nil)
|
||||
_ bouncer.UserProvider = classes.GormUsers{}
|
||||
)
|
||||
|
||||
//go:embed config
|
||||
@@ -93,7 +95,18 @@ func (p *Plugin) Boot(app *backpack.App) error {
|
||||
}
|
||||
p.startBlacklistSweep(bl)
|
||||
}
|
||||
return reg.Register(p.ID(), "jwt", bouncer.NewJWTGuard(secret, classes.GormUsers{App: app}, bl, "token", "auth_token"))
|
||||
if err := reg.Register(p.ID(), "jwt", bouncer.NewJWTGuard(secret, classes.GormUsers{App: app}, bl, "token", "auth_token")); err != nil {
|
||||
return err
|
||||
}
|
||||
prefix, err := classes.APITokenPrefix(app)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
trusted := surf.TrustedProxies(app.Config)
|
||||
return reg.Register(p.ID(), "api_token", &usermiddleware.APITokenGuard{
|
||||
App: app, Prefix: prefix,
|
||||
ClientIP: func(r *http.Request) string { return surf.ClientIP(r, trusted) },
|
||||
})
|
||||
}
|
||||
|
||||
func (p *Plugin) startBlacklistSweep(bl bouncer.BlacklistStore) {
|
||||
@@ -186,7 +199,7 @@ func (p *Plugin) MailLayouts() map[string]string {
|
||||
}
|
||||
|
||||
func (p *Plugin) Commands() []bonfire.Command {
|
||||
return []bonfire.Command{console.RequirePasswordChange(p.app)}
|
||||
return append([]bonfire.Command{console.RequirePasswordChange(p.app)}, console.APITokenCommands(p.app)...)
|
||||
}
|
||||
|
||||
func (p *Plugin) Migrations() []*gormigrate.Migration { return updates.All() }
|
||||
@@ -201,11 +214,21 @@ func (p *Plugin) Middlewares() map[string]pact.Middleware {
|
||||
if !ok || reg == nil {
|
||||
return nil
|
||||
}
|
||||
mw, err := reg.Middleware("jwt")
|
||||
if err != nil {
|
||||
return nil
|
||||
out := map[string]pact.Middleware{}
|
||||
if mw, err := reg.Middleware("jwt"); err == nil {
|
||||
out["jwt.auth"] = mw
|
||||
}
|
||||
if mw, err := reg.Middleware("api_token"); err == nil {
|
||||
out["user.api_token"] = mw
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func (p *Plugin) MiddlewareFactories() map[string]func(string) pact.Middleware {
|
||||
return map[string]func(string) pact.Middleware{
|
||||
"user.scope": usermiddleware.Scope,
|
||||
"user.permission": usermiddleware.Permission,
|
||||
}
|
||||
return map[string]pact.Middleware{"jwt.auth": mw}
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
||||
Reference in New Issue
Block a user