50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package website
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"git.handmade.network/hmn/hmn/src/templates"
|
|
)
|
|
|
|
func FourOhFour(c *RequestContext) ResponseData {
|
|
var res ResponseData
|
|
res.StatusCode = http.StatusNotFound
|
|
|
|
if c.Req.Header["Accept"] != nil && strings.Contains(c.Req.Header["Accept"][0], "text/html") {
|
|
templateData := struct {
|
|
templates.BaseData
|
|
Wanted string
|
|
}{
|
|
BaseData: getBaseData(c, "Page not found", nil),
|
|
Wanted: c.FullUrl(),
|
|
}
|
|
res.MustWriteTemplate("404.html", templateData, c.Perf)
|
|
} else {
|
|
res.Write([]byte("Not Found"))
|
|
}
|
|
return res
|
|
}
|
|
|
|
// A SafeError can be used to wrap another error and explicitly provide
|
|
// an error message that is safe to show to a user. This allows the original
|
|
// error to easily be logged and for servers to consistently return errors
|
|
// in a standard format, without having to worry about leaking sensitive
|
|
// info (assuming you use the right middleware!).
|
|
type SafeError struct {
|
|
Wrapped error
|
|
Msg string
|
|
}
|
|
|
|
func NewSafeError(err error, msg string, args ...interface{}) error {
|
|
return &SafeError{
|
|
Wrapped: err,
|
|
Msg: fmt.Sprintf(msg, args...),
|
|
}
|
|
}
|
|
|
|
func (s *SafeError) Error() string {
|
|
return s.Msg
|
|
}
|