package responses import ( "fmt" "io" "net/http" "git.kirsle.net/apps/gophertype/pkg/console" ) // Panic gives a simple error with no template or anything fancy. func Panic(w io.Writer, code int, message string) { if rw, ok := w.(http.ResponseWriter); ok { rw.WriteHeader(code) } w.Write([]byte(message)) } // Error returns an error page. func Error(w http.ResponseWriter, r *http.Request, code int, message string) { v := map[string]interface{}{ "Message": message, } w.WriteHeader(code) if err := RenderTemplate(w, r, "_builtin/errors/generic.gohtml", v); err != nil { console.Error("responses.Error: failed to render a pretty error template: %s", err) w.Write([]byte(message)) } } // NotFound returns an HTML 404 page. func NotFound(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNotFound) if err := RenderTemplate(w, r, "_builtin/errors/404.gohtml", nil); err != nil { console.Error("responses.NotFound: failed to render a pretty error template: %s", err) Panic(w, http.StatusNotFound, "Not Found") } } // BadRequest returns a 400 Bad Request page. func BadRequest(w http.ResponseWriter, r *http.Request, vars interface{}) { w.WriteHeader(http.StatusBadRequest) if err := RenderTemplate(w, r, "_builtin/errors/400.gohtml", vars); err != nil { console.Error("responses.BadRequest: failed to render a pretty error template: %s", err) Panic(w, http.StatusBadRequest, "Bad Request") } } // Forbidden returns a 403 Forbidden page. func Forbidden(w http.ResponseWriter, r *http.Request, message string, args ...interface{}) { w.WriteHeader(http.StatusForbidden) v := NewTemplateVars(w, r) v.Message = fmt.Sprintf(message, args...) if err := RenderTemplate(w, r, "_builtin/errors/403.gohtml", v); err != nil { console.Error("responses.Forbidden: failed to render a pretty error template: %s", err) Panic(w, http.StatusForbidden, "Forbidden") } }