Files
ttstd-infinite-canvas/backend/internal/assets/urls.go

50 lines
1.1 KiB
Go

package assets
import "strings"
func FileURL(id string) string {
return "/api/resources/" + id + "/file"
}
func IsFileURL(value string) bool {
return IDFromFileURL(value) != ""
}
func IDFromFileURL(value string) string {
const prefix = "/api/resources/"
value = strings.TrimSpace(value)
index := strings.Index(value, prefix)
if index < 0 {
return ""
}
remainder := value[index+len(prefix):]
if remainder == "" {
return ""
}
if end := strings.IndexAny(remainder, "/?#"); end >= 0 {
remainder = remainder[:end]
}
return remainder
}
func ResourceID(value string) string {
value = strings.TrimSpace(value)
if strings.HasPrefix(value, "resource:") {
return ValidID(strings.TrimPrefix(value, "resource:"))
}
return ValidID(IDFromFileURL(value))
}
func ValidID(value string) string {
value = strings.TrimSpace(value)
if value == "" || len(value) > 80 {
return ""
}
for _, char := range value {
if (char < 'a' || char > 'z') && (char < 'A' || char > 'Z') && (char < '0' || char > '9') && char != '-' && char != '_' {
return ""
}
}
return value
}