use builtin error interface for http handlers
1 file changed, 11 insertions(+), 7 deletions(-)
changed files
M domain/web/mux.go → domain/web/mux.go
@@ -26,19 +26,23 @@ "Access-Control-Max-Age": "3600", } ) -func (website *Website) ErrorHandler(err ihttp.Error, w http.ResponseWriter, r *http.Request) { +func (website *Website) ErrorHandler(err error, w http.ResponseWriter, r *http.Request) { + hErr, ok := err.(ihttp.Error) + if !ok { + hErr = ihttp.NewError(err.Error(), http.StatusInternalServerError) + } if strings.Contains(r.Header.Get("Accept"), "text/html") { - w.WriteHeader(err.StatusCode()) - err := templates.Error(*website.siteSettings, err).Render(w) + w.WriteHeader(hErr.StatusCode()) + err := templates.Error(*website.siteSettings, hErr).Render(w) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } else { - http.Error(w, err.Error(), err.StatusCode()) + http.Error(w, hErr.Error(), hErr.StatusCode()) } } -func (website *Website) ServeHTTP(w http.ResponseWriter, r *http.Request) ihttp.Error { +func (website *Website) ServeHTTP(w http.ResponseWriter, r *http.Request) error { urlPath := r.URL.Path if r.URL.Query().Has("go-get") && r.URL.Query().Get("go-get") == "1" { urlPath = "/go" + r.URL.Path@@ -80,7 +84,7 @@ return nil } -func (website *Website) Calendar(w http.ResponseWriter, r *http.Request) ihttp.Error { +func (website *Website) Calendar(w http.ResponseWriter, r *http.Request) error { analytics.WithTitle(r, "Calendar") err := calendar.CalendarPage(*website.siteSettings, website.calendar).Render(w) if err != nil {@@ -98,7 +102,7 @@ re := regexp.MustCompile( "^(.*)\\." + strings.ReplaceAll(website.config.WildcardDomain, ".", `\.`) + "$", ) replace := "${1}." + website.config.Domains[0] - mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) ihttp.Error { + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) error { switch { case r.URL.Query().Has("go-get") && r.URL.Query().Get("go-get") == "1": return website.ServeHTTP(w, r)