Files
moteva/server/internal/infrastructure/objectstorage/url.go
T

46 lines
1.1 KiB
Go
Raw Normal View History

package objectstorage
import (
"net/url"
"strings"
)
func objectKeyFromPublicURL(publicBase string, value string) (string, bool) {
value = strings.TrimSpace(value)
publicBase = strings.TrimRight(strings.TrimSpace(publicBase), "/")
if value == "" || publicBase == "" {
return "", false
}
if strings.HasPrefix(value, publicBase+"/") {
return unescapeObjectKey(strings.TrimPrefix(strings.Split(value, "?")[0], publicBase+"/"))
}
parsedValue, err := url.Parse(value)
if err != nil {
return "", false
}
parsedBase, err := url.Parse(publicBase)
if err != nil {
return "", false
}
basePath := strings.TrimRight(parsedBase.EscapedPath(), "/")
valuePath := parsedValue.EscapedPath()
if basePath == "" || !strings.HasPrefix(valuePath, basePath+"/") {
return "", false
}
return unescapeObjectKey(strings.TrimPrefix(valuePath, basePath+"/"))
}
func unescapeObjectKey(value string) (string, bool) {
value = strings.TrimLeft(strings.TrimSpace(value), "/")
if value == "" {
return "", false
}
objectKey, err := url.PathUnescape(value)
if err != nil {
return "", false
}
return objectKey, objectKey != ""
}