/
middleware.go
33 lines (28 loc) · 1001 Bytes
/
middleware.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package socketmode
// Middleware modifies a handler
type Middleware func(Handler) Handler
// Use registers middlewares
func (r *Router) Use(m Middleware) {
r.middlewares = append(r.middlewares, m)
}
func (r *Router) initMiddlewares() {
applyMiddlewaresToMap(r.middlewares, r.handlers)
applyMiddlewaresToMap(r.middlewares, r.slashCommandHandlers)
applyMiddlewaresToMap(r.middlewares, r.eventsAPIHandlers)
applyMiddlewaresToMap(r.middlewares, r.interactiveHandlers)
applyMiddlewaresToMap(r.middlewares, r.shortcutHandlers)
applyMiddlewaresToMap(r.middlewares, r.blockActionHandlers)
}
func applyMiddlewaresToMap[T comparable](middlewares []Middleware, handlersMap map[T][]Handler) {
for key, handlers := range handlersMap {
for i, handler := range handlers {
handlersMap[key][i] = applyMiddlewares(handler, middlewares...)
}
}
}
func applyMiddlewares(handler Handler, middlewares ...Middleware) Handler {
for _, m := range middlewares {
handler = m(handler)
}
return handler
}