package middlewares import ( "github.com/valyala/fasthttp" "github.com/authelia/authelia/v4/internal/configuration/schema" ) // NewBridgeBuilder creates a new BridgeBuilder. func NewBridgeBuilder(config schema.Configuration, providers Providers) *BridgeBuilder { return &BridgeBuilder{ config: config, providers: providers, } } // WithConfig sets the schema.Configuration used with this BridgeBuilder. func (b *BridgeBuilder) WithConfig(config schema.Configuration) *BridgeBuilder { b.config = config return b } // WithProviders sets the Providers used with this BridgeBuilder. func (b *BridgeBuilder) WithProviders(providers Providers) *BridgeBuilder { b.providers = providers return b } // WithPreMiddlewares sets the Middleware's used with this BridgeBuilder which are applied before the actual Bridge. func (b *BridgeBuilder) WithPreMiddlewares(middlewares ...Middleware) *BridgeBuilder { b.preMiddlewares = middlewares return b } // WithPostMiddlewares sets the AutheliaMiddleware's used with this BridgeBuilder which are applied after the actual // Bridge. func (b *BridgeBuilder) WithPostMiddlewares(middlewares ...AutheliaMiddleware) *BridgeBuilder { b.postMiddlewares = middlewares return b } // Build and return the Bridge configured by this BridgeBuilder. func (b *BridgeBuilder) Build() Bridge { return func(next RequestHandler) fasthttp.RequestHandler { for i := len(b.postMiddlewares) - 1; i >= 0; i-- { next = b.postMiddlewares[i](next) } bridge := func(requestCtx *fasthttp.RequestCtx) { next(NewAutheliaCtx(requestCtx, b.config, b.providers)) } for i := len(b.preMiddlewares) - 1; i >= 0; i-- { bridge = b.preMiddlewares[i](bridge) } return bridge } }