From 5d2f8c3e84b08ab8532ec1bb52e060ec1cdb52f9 Mon Sep 17 00:00:00 2001 From: Trong Huu Nguyen Date: Sun, 17 Oct 2021 19:29:13 +0200 Subject: [PATCH] refactor: cleanups for error template; embed and load on startup --- Dockerfile | 1 - pkg/router/errorhandler.go | 26 +++- .../router/templates/error.gohtml | 128 ++++-------------- 3 files changed, 46 insertions(+), 109 deletions(-) rename templates/error.html => pkg/router/templates/error.gohtml (92%) diff --git a/Dockerfile b/Dockerfile index cf79235..9a990c5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,5 +12,4 @@ FROM alpine:3 RUN export PATH=$PATH:/app WORKDIR /app COPY --from=builder /src/bin/wonderwall /app/wonderwall -COPY --from=builder /src/templates /app/templates/ ENTRYPOINT ["/app/wonderwall"] diff --git a/pkg/router/errorhandler.go b/pkg/router/errorhandler.go index c12c034..364c23b 100644 --- a/pkg/router/errorhandler.go +++ b/pkg/router/errorhandler.go @@ -1,6 +1,7 @@ package router import ( + _ "embed" "html/template" "net/http" "net/url" @@ -18,6 +19,20 @@ type ErrorPage struct { RetryURI string } +//go:embed templates/error.gohtml +var errorGoHtml string +var errorTemplate *template.Template + +func init() { + var err error + + errorTemplate = template.New("error") + errorTemplate, err = errorTemplate.Parse(errorGoHtml) + if err != nil { + log.Fatalf("parsing error template: %+v", err) + } +} + func (h *Handler) respondError(w http.ResponseWriter, r *http.Request, statusCode int, cause error) { logger := httplog.LogEntry(r.Context()) logger.Error().Stack().Err(cause).Msgf("error in route: %+v", cause) @@ -35,12 +50,6 @@ func (h *Handler) respondError(w http.ResponseWriter, r *http.Request, statusCod func (h *Handler) defaultErrorResponse(w http.ResponseWriter, r *http.Request, statusCode int) { w.WriteHeader(statusCode) - t, err := template.ParseFiles("templates/error.html") - if err != nil { - log.Errorf("parsing error template: %+v", err) - return - } - loginCookie, err := h.getLoginCookie(r) if err != nil { loginCookie = nil @@ -50,7 +59,10 @@ func (h *Handler) defaultErrorResponse(w http.ResponseWriter, r *http.Request, s CorrelationID: middleware.GetReqID(r.Context()), RetryURI: request.RetryURI(r, h.Config.Ingress, loginCookie), } - _ = t.Execute(w, errorPage) + err = errorTemplate.Execute(w, errorPage) + if err != nil { + log.Errorf("executing error template: %+v", err) + } } func (h *Handler) customErrorRedirect(w http.ResponseWriter, r *http.Request, statusCode int) error { diff --git a/templates/error.html b/pkg/router/templates/error.gohtml similarity index 92% rename from templates/error.html rename to pkg/router/templates/error.gohtml index 3ba3a1e..c8f4473 100644 --- a/templates/error.html +++ b/pkg/router/templates/error.gohtml @@ -1,5 +1,5 @@ - + + Innloggingsfeil | nav.no

Det har dessverre skjedd en feil i forbindelse med innlogging

- Trykk her for å gå tilbake til nav.no - eller trykk her for å prøve igjen. + Trykk her for å gå tilbake til nav.no + eller trykk her for å prøve igjen.

Request ID: {{.CorrelationID}} @@ -253,4 +179,4 @@

- \ No newline at end of file +