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 {
|
type HTTPServer struct {
|
||||||
log log.Logger
|
log log.Logger
|
||||||
web *web.Mux
|
web *web.Mux
|
||||||
context context.Context
|
context context.Context
|
||||||
httpSrv *http.Server
|
httpSrv *http.Server
|
||||||
middlewares []web.Handler
|
middlewares []web.Handler
|
||||||
|
namedMiddlewares []routing.RegisterNamedMiddleware
|
||||||
|
|
||||||
PluginContextProvider *plugincontext.Provider
|
PluginContextProvider *plugincontext.Provider
|
||||||
RouteRegister routing.RouteRegister
|
RouteRegister routing.RouteRegister
|
||||||
@ -214,6 +215,10 @@ func (hs *HTTPServer) AddMiddleware(middleware web.Handler) {
|
|||||||
hs.middlewares = append(hs.middlewares, middleware)
|
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 {
|
func (hs *HTTPServer) Run(ctx context.Context) error {
|
||||||
hs.context = ctx
|
hs.context = ctx
|
||||||
|
|
||||||
@ -400,7 +405,7 @@ func (hs *HTTPServer) applyRoutes() {
|
|||||||
// start with middlewares & static routes
|
// start with middlewares & static routes
|
||||||
hs.addMiddlewaresAndStaticRoutes()
|
hs.addMiddlewaresAndStaticRoutes()
|
||||||
// then add view routes & api routes
|
// then add view routes & api routes
|
||||||
hs.RouteRegister.Register(hs.web)
|
hs.RouteRegister.Register(hs.web, hs.namedMiddlewares...)
|
||||||
// then custom app proxy routes
|
// then custom app proxy routes
|
||||||
hs.initAppPluginRoutes(hs.web)
|
hs.initAppPluginRoutes(hs.web)
|
||||||
// lastly not found route
|
// lastly not found route
|
||||||
|
@ -44,7 +44,7 @@ type RouteRegister interface {
|
|||||||
|
|
||||||
// Register iterates over all routes added to the RouteRegister
|
// Register iterates over all routes added to the RouteRegister
|
||||||
// and add them to the `Router` pass as an parameter.
|
// and add them to the `Router` pass as an parameter.
|
||||||
Register(Router)
|
Register(Router, ...RegisterNamedMiddleware)
|
||||||
|
|
||||||
// Reset resets the route register.
|
// Reset resets the route register.
|
||||||
Reset()
|
Reset()
|
||||||
@ -118,8 +118,13 @@ func (rr *RouteRegisterImpl) Group(pattern string, fn func(rr RouteRegister), ha
|
|||||||
rr.groups = append(rr.groups, group)
|
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 {
|
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()
|
// GET requests have to be added to macaron routing using Get()
|
||||||
// Otherwise HEAD requests will not be allowed.
|
// Otherwise HEAD requests will not be allowed.
|
||||||
// https://github.com/go-macaron/macaron/blob/a325110f8b392bce3e5cdeb8c44bf98078ada3be/router.go#L198
|
// 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 {
|
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) {
|
func (rr *RouteRegisterImpl) Get(pattern string, handlers ...web.Handler) {
|
||||||
rr.route(pattern, http.MethodGet, handlers...)
|
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) Insert(string, func(routing.RouteRegister), ...web.Handler) {}
|
||||||
|
|
||||||
func (noOpRouteRegister) Register(routing.Router) {}
|
func (noOpRouteRegister) Register(routing.Router, ...routing.RegisterNamedMiddleware) {}
|
||||||
|
|
||||||
func (noOpRouteRegister) Reset() {}
|
func (noOpRouteRegister) Reset() {}
|
||||||
|
Loading…
Reference in New Issue
Block a user