all repos — homestead @ 63e8b92d6e764cac748e1a97d88698e93b8ffafa

Code for my website

use builtin error interface for http handlers

Alan Pearce
commit

63e8b92d6e764cac748e1a97d88698e93b8ffafa

parent

f58148583a563fca788c4dc9c357a3d2d6e0f49c

1 file changed, 11 insertions(+), 7 deletions(-)

changed files
M domain/web/mux.godomain/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)