43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package seo
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
|
|
apicontrollers "git.golem15.com/golem15/sm-seo-plugin/controllers/api"
|
|
"git.golem15.com/golem15/summercms/modules/pact"
|
|
"git.golem15.com/golem15/summercms/modules/surf"
|
|
)
|
|
|
|
// BucketResolve is the throttle bucket of the public resolve endpoint.
|
|
const BucketResolve = "seo-resolve"
|
|
|
|
// Routes mounts the public /_seo/api/v1 endpoints. They carry no backend
|
|
// middleware: the frontend server calls them anonymously.
|
|
func (p *Plugin) Routes(r pact.Router) error {
|
|
r.Group("/_seo/api/v1", surf.Use("throttle:"+BucketResolve), func(g pact.Router) {
|
|
g.Get("/resolve", apicontrollers.Resolve(p.Service))
|
|
})
|
|
return nil
|
|
}
|
|
|
|
// Buckets registers seo-resolve: 600 requests a minute per client IP behind
|
|
// the configured trusted proxies (the frontend server resolves every page
|
|
// it renders).
|
|
func (p *Plugin) Buckets() map[string]surf.Bucket {
|
|
trusted := surf.TrustedProxies(nil)
|
|
if p.app != nil {
|
|
trusted = surf.TrustedProxies(p.app.Config)
|
|
}
|
|
return map[string]surf.Bucket{
|
|
BucketResolve: {
|
|
Name: BucketResolve,
|
|
Max: 600,
|
|
Decay: time.Minute,
|
|
Key: func(r *http.Request) string {
|
|
return BucketResolve + "|" + surf.ClientIP(r, trusted)
|
|
},
|
|
},
|
|
}
|
|
}
|