From 2d5ee7b69cbe27e7e1abef7bf3451cb6455c4387 Mon Sep 17 00:00:00 2001 From: Alan Pearce Date: Wed, 15 May 2024 12:44:03 +0200 Subject: feat: render HTML error pages --- internal/server/error.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 internal/server/error.go (limited to 'internal/server/error.go') diff --git a/internal/server/error.go b/internal/server/error.go new file mode 100644 index 0000000..51453f4 --- /dev/null +++ b/internal/server/error.go @@ -0,0 +1,43 @@ +package server + +import ( + "log/slog" + "net/http" + "searchix/internal/config" +) + +func createErrorHandler( + config *config.Config, +) func(http.ResponseWriter, *http.Request, string, int) { + return func(w http.ResponseWriter, r *http.Request, message string, code int) { + var err error + if message == "" { + message = http.StatusText(code) + } + indexData := TemplateData{ + ExtraHeadHTML: config.Web.ExtraHeadHTML, + Sources: config.Importer.Sources, + Version: *versionInfo, + Code: code, + Message: message, + } + w.WriteHeader(code) + if r.Header.Get("Fetch") == "true" { + err = templates["error"].ExecuteTemplate(w, "main", indexData) + } else { + err = templates["error"].Execute(w, indexData) + } + if err != nil { + slog.Error( + "error rendering error page template", + "error", + err, + "code", + code, + "message", + message, + ) + http.Error(w, message, code) + } + } +} -- cgit 1.4.1