diff --git a/pkg/models/dashboards.go b/pkg/models/dashboards.go index 8e393a156c4..6f6399da8c8 100644 --- a/pkg/models/dashboards.go +++ b/pkg/models/dashboards.go @@ -1,6 +1,7 @@ package models import ( + "encoding/base64" "errors" "fmt" "strings" @@ -189,7 +190,18 @@ func (dash *Dashboard) UpdateSlug() { } func SlugifyTitle(title string) string { - return slug.Make(strings.ToLower(title)) + s := slug.Make(strings.ToLower(title)) + if s == "" { + // If the dashboard name is only characters outside of the + // sluggable characters, the slug creation will return an + // empty string which will mess up URLs. This failsafe picks + // that up and creates the slug as a base64 identifier instead. + s = base64.RawURLEncoding.EncodeToString([]byte(title)) + if slug.MaxLength != 0 && len(s) > slug.MaxLength { + s = s[:slug.MaxLength] + } + } + return s } // GetUrl return the html url for a folder if it's folder, otherwise for a dashboard