mirror of
https://github.com/photoprism/photoprism.git
synced 2025-12-12 00:34:13 +01:00
Download: Add Disabled, Originals, MediaRaw & MediaSidecar Flags #2234
Extends DownloadSettings with 4 additional options: - Name: File name pattern for downloaded files (existed) - Disabled: Disables downloads - Originals: Only download files stored in "originals" folder - MediaRaw: Include RAW image files - MediaSidecar: Include metadata sidecar files (JSON, XMP, YAML)
This commit is contained in:
100
pkg/rnd/validation.go
Normal file
100
pkg/rnd/validation.go
Normal file
@@ -0,0 +1,100 @@
|
||||
package rnd
|
||||
|
||||
import "strings"
|
||||
|
||||
// ValidID checks if the string is a valid unique ID.
|
||||
func ValidID(s string, prefix byte) bool {
|
||||
// Regular UUID.
|
||||
if ValidUUID(s) {
|
||||
return true
|
||||
}
|
||||
|
||||
// Not a known GenerateUID format.
|
||||
if len(s) != 16 {
|
||||
return false
|
||||
}
|
||||
|
||||
return EntityUID(s, prefix)
|
||||
}
|
||||
|
||||
// ValidIDs checks if a slice of strings contains ValidIDs only.
|
||||
func ValidIDs(s []string, prefix byte) bool {
|
||||
if len(s) < 1 {
|
||||
return false
|
||||
}
|
||||
|
||||
for _, id := range s {
|
||||
if !ValidID(id, prefix) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
// EntityUID returns true if string is a unique id as generated by PhotoPrism.
|
||||
func EntityUID(s string, prefix byte) bool {
|
||||
if len(s) != 16 {
|
||||
return false
|
||||
}
|
||||
|
||||
if !IsAlnum(s) {
|
||||
return false
|
||||
}
|
||||
|
||||
return prefix == 0 || s[0] == prefix
|
||||
}
|
||||
|
||||
// ValidUUID tests if the string looks like a standard UUID.
|
||||
func ValidUUID(s string) bool {
|
||||
return len(s) == 36 && IsHex(s)
|
||||
}
|
||||
|
||||
// SanitizeUUID normalizes UUIDs found in XMP or Exif metadata.
|
||||
func SanitizeUUID(s string) string {
|
||||
if s == "" {
|
||||
return ""
|
||||
}
|
||||
|
||||
s = strings.Replace(strings.TrimSpace(s), "\"", "", -1)
|
||||
|
||||
if start := strings.LastIndex(s, ":"); start != -1 {
|
||||
s = s[start+1:]
|
||||
}
|
||||
|
||||
if !ValidUUID(s) {
|
||||
return ""
|
||||
}
|
||||
|
||||
return strings.ToLower(s)
|
||||
}
|
||||
|
||||
// IsAlnum returns true if the string only contains alphanumeric ascii chars without whitespace.
|
||||
func IsAlnum(s string) bool {
|
||||
if s == "" {
|
||||
return false
|
||||
}
|
||||
|
||||
for _, r := range s {
|
||||
if (r < 48 || r > 57) && (r < 97 || r > 122) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
// IsHex returns true if the string only contains hex numbers, dashes and letters without whitespace.
|
||||
func IsHex(s string) bool {
|
||||
if s == "" {
|
||||
return false
|
||||
}
|
||||
|
||||
for _, r := range s {
|
||||
if (r < 48 || r > 57) && (r < 97 || r > 102) && (r < 65 || r > 70) && r != 45 {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
Reference in New Issue
Block a user