github.com/System-Glitch/goyave/v2@v2.10.3-0.20200819142921-51011e75d504/validation/strings.go (about) 1 package validation 2 3 import ( 4 "encoding/json" 5 "net" 6 "net/url" 7 "strconv" 8 "strings" 9 "time" 10 11 "github.com/google/uuid" 12 ) 13 14 func validateString(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 15 _, ok := value.(string) 16 return ok 17 } 18 19 func validateDigits(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 20 str, ok := value.(string) 21 if ok { 22 return getRegex(patternDigits).FindAllString(str, 1) == nil 23 } 24 return false 25 } 26 27 func validateAlpha(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 28 params := []string{patternAlpha} 29 return validateRegex(field, value, params, form) 30 } 31 32 func validateAlphaDash(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 33 params := []string{patternAlphaDash} 34 return validateRegex(field, value, params, form) 35 } 36 37 func validateAlphaNumeric(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 38 params := []string{patternAlphaNumeric} 39 return validateRegex(field, value, params, form) 40 } 41 42 func validateEmail(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 43 params := []string{patternEmail} 44 return validateRegex(field, value, params, form) 45 } 46 47 func validateStartsWith(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 48 str, ok := value.(string) 49 if ok { 50 for _, prefix := range parameters { 51 if strings.HasPrefix(str, prefix) { 52 return true 53 } 54 } 55 } 56 return false 57 } 58 59 func validateEndsWith(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 60 str, ok := value.(string) 61 if ok { 62 for _, prefix := range parameters { 63 if strings.HasSuffix(str, prefix) { 64 return true 65 } 66 } 67 } 68 return false 69 } 70 71 func validateIP(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 72 str, ok := value.(string) 73 if ok { 74 ip := net.ParseIP(str) 75 if ip != nil { 76 form[field] = ip 77 return true 78 } 79 } 80 81 return false 82 } 83 84 func validateIPv4(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 85 if validateIP(field, value, parameters, form) { 86 return form[field].(net.IP).To4() != nil 87 } 88 return false 89 } 90 91 func validateIPv6(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 92 if validateIP(field, value, parameters, form) { 93 return form[field].(net.IP).To4() == nil 94 } 95 return false 96 } 97 98 func validateJSON(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 99 str, ok := value.(string) 100 if ok { 101 var data interface{} 102 err := json.Unmarshal([]byte(str), &data) 103 if err == nil { 104 form[field] = data 105 return true 106 } 107 } 108 return false 109 } 110 111 func validateRegex(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 112 str, ok := value.(string) 113 if ok { 114 return getRegex(parameters[0]).MatchString(str) 115 } 116 return false 117 } 118 119 func validateTimezone(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 120 tz, ok := value.(string) 121 if ok && tz != "Local" { 122 loc, err := time.LoadLocation(tz) 123 if err == nil { 124 form[field] = loc 125 return true 126 } 127 } 128 return false 129 } 130 131 func validateURL(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 132 str, ok := value.(string) 133 if ok { 134 url, err := url.ParseRequestURI(str) 135 if err == nil { 136 form[field] = url 137 return true 138 } 139 } 140 return false 141 } 142 143 func validateUUID(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 144 str, ok := value.(string) 145 if ok { 146 id, err := uuid.Parse(str) 147 if err == nil { 148 if len(parameters) == 1 { 149 version, err := strconv.Atoi(parameters[0]) 150 if err == nil && id.Version() != uuid.Version(version) { 151 return false 152 } 153 } 154 form[field] = id 155 return true 156 } 157 } 158 return false 159 }