traefik/pkg/api/dashboard.go

53 lines
1 KiB
Go
Raw Normal View History

package api
import (
"net/http"
"net/url"
2019-08-03 01:58:23 +00:00
"github.com/containous/traefik/v2/pkg/log"
2019-02-18 06:52:03 +00:00
assetfs "github.com/elazarl/go-bindata-assetfs"
2019-08-03 01:58:23 +00:00
"github.com/gorilla/mux"
)
2020-05-11 10:06:07 +00:00
// DashboardHandler expose dashboard routes.
type DashboardHandler struct {
Assets *assetfs.AssetFS
}
2020-05-11 10:06:07 +00:00
// Append add dashboard routes on a router.
2018-11-14 09:18:03 +00:00
func (g DashboardHandler) Append(router *mux.Router) {
if g.Assets == nil {
2018-11-14 09:18:03 +00:00
log.WithoutContext().Error("No assets for dashboard")
return
}
// Expose dashboard
2018-04-27 11:12:04 +00:00
router.Methods(http.MethodGet).
Path("/").
HandlerFunc(func(resp http.ResponseWriter, req *http.Request) {
http.Redirect(resp, req, safePrefix(req)+"/dashboard/", http.StatusFound)
2018-04-27 11:12:04 +00:00
})
router.Methods(http.MethodGet).
PathPrefix("/dashboard/").
Handler(http.StripPrefix("/dashboard/", http.FileServer(g.Assets)))
}
func safePrefix(req *http.Request) string {
prefix := req.Header.Get("X-Forwarded-Prefix")
if prefix == "" {
return ""
}
parse, err := url.Parse(prefix)
if err != nil {
return ""
}
if parse.Host != "" {
return ""
}
return parse.Path
}