Dashboard: Add failsafe for slug generation (#23709)

This commit is contained in:
Emil Tullstedt 2020-04-20 18:17:33 +02:00 committed by GitHub
parent c0635947e8
commit b669bfdf5f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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