Merge branch 'develop' of https://gitee.com/fusenpack/fusenapi into develop
This commit is contained in:
61
utils/check/check.go
Normal file
61
utils/check/check.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package check
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"regexp"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
)
|
||||
|
||||
var category = map[string]bool{
|
||||
"personalization": true,
|
||||
}
|
||||
|
||||
// CheckCategory 检查是否存在该类型
|
||||
func CheckCategory(key string) bool {
|
||||
_, ok := category[key]
|
||||
return ok
|
||||
}
|
||||
|
||||
// CheckValidS3Key 检查s3的文件名是否符合要求
|
||||
func CheckValidS3Key(key string) (bool, error) {
|
||||
if utf8.RuneCountInString(key) > 1024 {
|
||||
return false, errors.New("对象键长度超过 1024 字节")
|
||||
}
|
||||
|
||||
if strings.HasPrefix(key, "/") || strings.HasPrefix(key, ".") {
|
||||
return false, errors.New("对象键不应以 / 或 . 开头")
|
||||
}
|
||||
|
||||
if !utf8.ValidString(key) {
|
||||
return false, errors.New("对象键必须是 UTF-8 字符串")
|
||||
}
|
||||
|
||||
if hasControlCharacters(key) {
|
||||
return false, errors.New("对象键包含控制字符")
|
||||
}
|
||||
|
||||
if hasInvalidPatterns(key) {
|
||||
return false, errors.New("对象键包含无效的字符或模式")
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func hasControlCharacters(key string) bool {
|
||||
controlCharPattern := "[\\x00-\\x1F\\x7F]"
|
||||
match, _ := regexp.MatchString(controlCharPattern, key)
|
||||
return match
|
||||
}
|
||||
|
||||
func hasInvalidPatterns(key string) bool {
|
||||
invalidPatterns := []string{"[\\s]+$", "^\\s+", "\\\\", "//", "\\.\\."}
|
||||
for _, pattern := range invalidPatterns {
|
||||
match, _ := regexp.MatchString(pattern, key)
|
||||
if match {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user