go_study/fabric-main/core/middleware/chain.go

43 lines
828 B
Go

/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package middleware
import (
"net/http"
"github.com/hyperledger/fabric/common/flogging"
)
var logger = flogging.MustGetLogger("middleware")
type Middleware func(http.Handler) http.Handler
// A Chain is a middleware chain use for http request processing.
type Chain struct {
mw []Middleware
}
// NewChain creates a new Middleware chain. The chain will call the Middleware
// in the order provided.
func NewChain(middlewares ...Middleware) Chain {
return Chain{
mw: append([]Middleware{}, middlewares...),
}
}
// Handler returns an http.Handler for this chain.
func (c Chain) Handler(h http.Handler) http.Handler {
if h == nil {
h = http.DefaultServeMux
}
for i := len(c.mw) - 1; i >= 0; i-- {
h = c.mw[i](h)
}
return h
}