func()

in app.go [161:221]


func (a *theApp) buildHandlerPipeline() (http.Handler, error) {
	// Handlers should be applied in a reverse order
	handler := slowlogs.LogHandlerTiming(a.serveFileOrNotFoundHandler(), "serveFileOrNotFound")
	handler = slowlogs.LogHandlerTiming(uniquedomain.NewMiddleware(handler), "UniqueDomain")
	handler = slowlogs.LogHandlerTiming(primarydomain.NewMiddleware(handler), "PrimaryDomain")
	handler = slowlogs.LogHandlerTiming(a.Auth.AuthorizationMiddleware(handler), "Authorization")

	handler = slowlogs.LogHandlerTiming(handlers.ArtifactMiddleware(handler, a.Handlers), "Artifacts")
	handler = slowlogs.LogHandlerTiming(a.Auth.AuthenticationMiddleware(handler, a.source), "Authentication")
	handler = slowlogs.LogHandlerTiming(routing.NewMiddleware(handler, a.source), "Routing")
	handler = slowlogs.LogHandlerTiming(handlers.AcmeMiddleware(handler, a.source, a.config.GitLab.PublicServer), "Acme")

	if !a.config.General.DisableCrossOriginRequests {
		handler = slowlogs.LogHandlerTiming(corsHandler.Handler(handler), "cors")
	}

	// Add auto redirect
	handler = slowlogs.LogHandlerTiming(handlers.HTTPSRedirectMiddleware(handler, a.config.General.RedirectHTTP), "HTTPSRedirect")

	handler = slowlogs.LogHandlerTiming(handlers.NewRateLimiterHandler(context.Background(), handler, &a.config.RateLimit), "RateLimiter")

	// Health Check
	handler = slowlogs.LogHandlerTiming(health.NewMiddleware(handler, a.config.General.StatusPath), "HealthCheck")

	// Custom response headers
	handler = slowlogs.LogHandlerTiming(customheaders.NewMiddleware(handler, a.config.General.CustomHeaders), "CustomHeaders")

	// Access logs and metrics
	handler, err := logging.BasicAccessLogger(handler, a.config.Log.Format)
	if err != nil {
		return nil, err
	}
	metricsMiddleware := labmetrics.NewHandlerFactory(labmetrics.WithNamespace("gitlab_pages"))
	handler = slowlogs.LogHandlerTiming(metricsMiddleware(handler), "Metrics")

	handler = slowlogs.NewMiddleware(handler, logging.LogRequest, slowlogs.SlowRequestTimeThreshold)

	// Correlation ID injection middleware
	var correlationOpts []correlation.InboundHandlerOption
	correlationOpts = append(correlationOpts, correlation.WithSetResponseHeader())
	if a.config.General.PropagateCorrelationID {
		correlationOpts = append(correlationOpts, correlation.WithPropagation())
	}

	handler = correlation.InjectCorrelationID(handler, correlationOpts...)

	handler = handlePanicMiddleware(handler)

	// These middlewares MUST be added in the end.
	// Being last means they will be evaluated first
	// preventing any operation on bogus requests.
	handler = urilimiter.NewMiddleware(handler, a.config.General.MaxURILength)

	if a.config.General.NamespaceInPath {
		handler = namespaceinpath.NewMiddleware(handler, a.config.General.Domain, a.config.Authentication.RedirectURI)
	}

	handler = rejectmethods.NewMiddleware(handler)

	return handler, nil
}