add 404 handler (#57)
This commit is contained in:
parent
eaeceb1c67
commit
5a2f3b35ba
|
@ -42,6 +42,8 @@ type Router interface {
|
||||||
AttachHandler(method string, path string, f gin.HandlerFunc)
|
AttachHandler(method string, path string, f gin.HandlerFunc)
|
||||||
// Attach a gin middleware to the router that will be used globally
|
// Attach a gin middleware to the router that will be used globally
|
||||||
AttachMiddleware(handler gin.HandlerFunc)
|
AttachMiddleware(handler gin.HandlerFunc)
|
||||||
|
// Attach 404 NoRoute handler
|
||||||
|
AttachNoRouteHandler(handler gin.HandlerFunc)
|
||||||
// Start the router
|
// Start the router
|
||||||
Start()
|
Start()
|
||||||
// Stop the router
|
// Stop the router
|
||||||
|
@ -109,6 +111,11 @@ func (r *router) AttachMiddleware(middleware gin.HandlerFunc) {
|
||||||
r.engine.Use(middleware)
|
r.engine.Use(middleware)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AttachNoRouteHandler attaches a gin.HandlerFunc to NoRoute to handle 404's
|
||||||
|
func (r *router) AttachNoRouteHandler(handler gin.HandlerFunc) {
|
||||||
|
r.engine.NoRoute(handler)
|
||||||
|
}
|
||||||
|
|
||||||
// New returns a new Router with the specified configuration, using the given logrus logger.
|
// New returns a new Router with the specified configuration, using the given logrus logger.
|
||||||
func New(config *config.Config, logger *logrus.Logger) (Router, error) {
|
func New(config *config.Config, logger *logrus.Logger) (Router, error) {
|
||||||
lvl, err := logrus.ParseLevel(config.LogLevel)
|
lvl, err := logrus.ParseLevel(config.LogLevel)
|
||||||
|
|
|
@ -68,6 +68,22 @@ func (m *Module) baseHandler(c *gin.Context) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Module) NotFoundHandler(c *gin.Context) {
|
||||||
|
l := m.log.WithField("func", "404")
|
||||||
|
l.Trace("serving 404 html")
|
||||||
|
|
||||||
|
instance, err := m.processor.InstanceGet(m.config.Host)
|
||||||
|
if err != nil {
|
||||||
|
l.Debugf("error getting instance from processor: %s", err)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "internal server error"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.HTML(404, "404.tmpl", gin.H{
|
||||||
|
"instance": instance,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Route satisfies the RESTAPIModule interface
|
// Route satisfies the RESTAPIModule interface
|
||||||
func (m *Module) Route(s router.Router) error {
|
func (m *Module) Route(s router.Router) error {
|
||||||
|
|
||||||
|
@ -81,5 +97,9 @@ func (m *Module) Route(s router.Router) error {
|
||||||
|
|
||||||
// serve front-page
|
// serve front-page
|
||||||
s.AttachHandler(http.MethodGet, "/", m.baseHandler)
|
s.AttachHandler(http.MethodGet, "/", m.baseHandler)
|
||||||
|
|
||||||
|
// 404 handler
|
||||||
|
s.AttachNoRouteHandler(m.NotFoundHandler)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
{{ template "header.tmpl" .}}
|
||||||
|
|
||||||
|
<aside class="left logo">
|
||||||
|
<img src="/assets/sloth.png" alt="Clipart styled sloth logo">
|
||||||
|
</aside>
|
||||||
|
<section>
|
||||||
|
<h1>404: Page Not Found</h1>
|
||||||
|
If you believe this was an error, you can <a href="/{{.instance.ContactAccount}}">contact an admin</a>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{{ template "footer.tmpl" .}}
|
Loading…
Reference in New Issue