package application import ( "fmt" "net/http" log "github.com/sirupsen/logrus" ) type ErrorPageData struct { Title string Message string ProxyPrefix string } func (a *Application) ErrorPage(rw http.ResponseWriter, r *http.Request, err string) { claims, _ := a.checkAuth(rw, r) data := ErrorPageData{ Title: "Bad Gateway", Message: "Error proxying to upstream server", ProxyPrefix: "/outpost.goauthentik.io", } if claims != nil && claims.Proxy != nil && claims.Proxy.IsSuperuser { data.Message = err } else { data.Message = "Failed to connect to backend." } er := a.errorTemplates.Execute(rw, data) if er != nil { http.Error(rw, "Internal Server Error", http.StatusInternalServerError) } } // NewProxyErrorHandler creates a ProxyErrorHandler using the template given. func (a *Application) newProxyErrorHandler() func(http.ResponseWriter, *http.Request, error) { return func(rw http.ResponseWriter, req *http.Request, proxyErr error) { log.WithError(proxyErr).Warning("Error proxying to upstream server") rw.WriteHeader(http.StatusBadGateway) a.ErrorPage(rw, req, fmt.Sprintf("Error proxying to upstream server: %v", proxyErr)) } }