40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
package model
|
|
|
|
import "strings"
|
|
|
|
// sanitizeShareName creates a valid ShareName matching the regex: ^[a-z0-9]+([a-z\-\_0-9]+|(__)?)[a-z0-9]*$
|
|
func SanitizeShareName(name string) string {
|
|
// Convert to lowercase and replace spaces with hyphens
|
|
shareName := strings.ToLower(name)
|
|
shareName = strings.ReplaceAll(shareName, " ", "-")
|
|
|
|
// Remove any characters that aren't lowercase letters, numbers, hyphens, or underscores
|
|
var validShareName strings.Builder
|
|
for _, r := range shareName {
|
|
if (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '-' || r == '_' {
|
|
validShareName.WriteRune(r)
|
|
}
|
|
}
|
|
|
|
result := validShareName.String()
|
|
if result == "" {
|
|
return "matrixbridge" // fallback if no valid characters
|
|
}
|
|
|
|
// Ensure it starts with alphanumeric
|
|
for result != "" && (result[0] == '-' || result[0] == '_') {
|
|
result = result[1:]
|
|
}
|
|
|
|
// Ensure it ends with alphanumeric
|
|
for result != "" && (result[len(result)-1] == '-' || result[len(result)-1] == '_') {
|
|
result = result[:len(result)-1]
|
|
}
|
|
|
|
// Final fallback check
|
|
if result == "" {
|
|
return "matrixbridge"
|
|
}
|
|
|
|
return result
|
|
}
|