mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
HTTPServer: Implement named middlewares (#44231)
* Implement named middlewares on http server * Fix minor ordering issue with named middlewares
This commit is contained in:
parent
9161f9d2e1
commit
29268483c2
@ -65,11 +65,12 @@ import (
|
||||
)
|
||||
|
||||
type HTTPServer struct {
|
||||
log log.Logger
|
||||
web *web.Mux
|
||||
context context.Context
|
||||
httpSrv *http.Server
|
||||
middlewares []web.Handler
|
||||
log log.Logger
|
||||
web *web.Mux
|
||||
context context.Context
|
||||
httpSrv *http.Server
|
||||
middlewares []web.Handler
|
||||
namedMiddlewares []routing.RegisterNamedMiddleware
|
||||
|
||||
PluginContextProvider *plugincontext.Provider
|
||||
RouteRegister routing.RouteRegister
|
||||
@ -214,6 +215,10 @@ func (hs *HTTPServer) AddMiddleware(middleware web.Handler) {
|
||||
hs.middlewares = append(hs.middlewares, middleware)
|
||||
}
|
||||
|
||||
func (hs *HTTPServer) AddNamedMiddleware(middleware routing.RegisterNamedMiddleware) {
|
||||
hs.namedMiddlewares = append(hs.namedMiddlewares, middleware)
|
||||
}
|
||||
|
||||
func (hs *HTTPServer) Run(ctx context.Context) error {
|
||||
hs.context = ctx
|
||||
|
||||
@ -400,7 +405,7 @@ func (hs *HTTPServer) applyRoutes() {
|
||||
// start with middlewares & static routes
|
||||
hs.addMiddlewaresAndStaticRoutes()
|
||||
// then add view routes & api routes
|
||||
hs.RouteRegister.Register(hs.web)
|
||||
hs.RouteRegister.Register(hs.web, hs.namedMiddlewares...)
|
||||
// then custom app proxy routes
|
||||
hs.initAppPluginRoutes(hs.web)
|
||||
// lastly not found route
|
||||
|
@ -44,7 +44,7 @@ type RouteRegister interface {
|
||||
|
||||
// Register iterates over all routes added to the RouteRegister
|
||||
// and add them to the `Router` pass as an parameter.
|
||||
Register(Router)
|
||||
Register(Router, ...RegisterNamedMiddleware)
|
||||
|
||||
// Reset resets the route register.
|
||||
Reset()
|
||||
@ -118,8 +118,13 @@ func (rr *RouteRegisterImpl) Group(pattern string, fn func(rr RouteRegister), ha
|
||||
rr.groups = append(rr.groups, group)
|
||||
}
|
||||
|
||||
func (rr *RouteRegisterImpl) Register(router Router) {
|
||||
func (rr *RouteRegisterImpl) Register(router Router, namedMiddlewares ...RegisterNamedMiddleware) {
|
||||
for _, r := range rr.routes {
|
||||
// Add global named middlewares
|
||||
for i, m := range namedMiddlewares {
|
||||
r.handlers = insertHandler(r.handlers, len(rr.namedMiddlewares)+i, m(r.pattern))
|
||||
}
|
||||
|
||||
// GET requests have to be added to macaron routing using Get()
|
||||
// Otherwise HEAD requests will not be allowed.
|
||||
// https://github.com/go-macaron/macaron/blob/a325110f8b392bce3e5cdeb8c44bf98078ada3be/router.go#L198
|
||||
@ -131,7 +136,7 @@ func (rr *RouteRegisterImpl) Register(router Router) {
|
||||
}
|
||||
|
||||
for _, g := range rr.groups {
|
||||
g.Register(router)
|
||||
g.Register(router, namedMiddlewares...)
|
||||
}
|
||||
}
|
||||
|
||||
@ -159,6 +164,15 @@ func (rr *RouteRegisterImpl) route(pattern, method string, handlers ...web.Handl
|
||||
})
|
||||
}
|
||||
|
||||
func insertHandler(a []web.Handler, index int, value web.Handler) []web.Handler {
|
||||
if len(a) == index {
|
||||
return append(a, value)
|
||||
}
|
||||
a = append(a[:index+1], a[index:]...)
|
||||
a[index] = value
|
||||
return a
|
||||
}
|
||||
|
||||
func (rr *RouteRegisterImpl) Get(pattern string, handlers ...web.Handler) {
|
||||
rr.route(pattern, http.MethodGet, handlers...)
|
||||
}
|
||||
|
@ -73,6 +73,6 @@ func (noOpRouteRegister) Group(string, func(routing.RouteRegister), ...web.Handl
|
||||
|
||||
func (noOpRouteRegister) Insert(string, func(routing.RouteRegister), ...web.Handler) {}
|
||||
|
||||
func (noOpRouteRegister) Register(routing.Router) {}
|
||||
func (noOpRouteRegister) Register(routing.Router, ...routing.RegisterNamedMiddleware) {}
|
||||
|
||||
func (noOpRouteRegister) Reset() {}
|
||||
|
Loading…
Reference in New Issue
Block a user