diff options
author | 2017-11-19 21:10:04 -0800 | |
---|---|---|
committer | 2017-11-19 22:01:46 -0800 | |
commit | 8ffb773f43c8dc54801ca1d111854e7e881c93c9 (patch) | |
tree | 38133a2fc612597a75fed1d13e5b4042f58a2b7e /server/middleware/middleware.go | |
download | v2-8ffb773f43c8dc54801ca1d111854e7e881c93c9.tar.gz v2-8ffb773f43c8dc54801ca1d111854e7e881c93c9.tar.zst v2-8ffb773f43c8dc54801ca1d111854e7e881c93c9.zip |
First commit
Diffstat (limited to 'server/middleware/middleware.go')
-rw-r--r-- | server/middleware/middleware.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/server/middleware/middleware.go b/server/middleware/middleware.go new file mode 100644 index 00000000..cab01c86 --- /dev/null +++ b/server/middleware/middleware.go @@ -0,0 +1,31 @@ +// Copyright 2017 Frédéric Guillot. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package middleware + +import ( + "net/http" +) + +type Middleware func(http.Handler) http.Handler + +type MiddlewareChain struct { + middlewares []Middleware +} + +func (m *MiddlewareChain) Wrap(h http.Handler) http.Handler { + for i := range m.middlewares { + h = m.middlewares[len(m.middlewares)-1-i](h) + } + + return h +} + +func (m *MiddlewareChain) WrapFunc(fn http.HandlerFunc) http.Handler { + return m.Wrap(fn) +} + +func NewMiddlewareChain(middlewares ...Middleware) *MiddlewareChain { + return &MiddlewareChain{append(([]Middleware)(nil), middlewares...)} +} |