mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-04-28 14:59:49 -05:00
Merge pull request #571 from opencloud-eu/dependabot/go_modules/github.com/go-playground/validator/v10-10.26.0
build(deps): bump github.com/go-playground/validator/v10 from 10.25.0 to 10.26.0
This commit is contained in:
+102
@@ -0,0 +1,102 @@
|
||||
version: "2"
|
||||
linters:
|
||||
default: all
|
||||
disable:
|
||||
- asasalint
|
||||
- asciicheck
|
||||
- bidichk
|
||||
- bodyclose
|
||||
- canonicalheader
|
||||
- containedctx
|
||||
- contextcheck
|
||||
- copyloopvar
|
||||
- cyclop
|
||||
- decorder
|
||||
- depguard
|
||||
- dogsled
|
||||
- dupl
|
||||
- dupword
|
||||
- durationcheck
|
||||
- err113
|
||||
- errcheck
|
||||
- errchkjson
|
||||
- errname
|
||||
- errorlint
|
||||
- exhaustive
|
||||
- exhaustruct
|
||||
- exptostd
|
||||
- fatcontext
|
||||
- forbidigo
|
||||
- forcetypeassert
|
||||
- funlen
|
||||
- ginkgolinter
|
||||
- gocheckcompilerdirectives
|
||||
- gochecknoglobals
|
||||
- gochecknoinits
|
||||
- gochecksumtype
|
||||
- gocognit
|
||||
- goconst
|
||||
- gocritic
|
||||
- gocyclo
|
||||
- godot
|
||||
- godox
|
||||
- goheader
|
||||
- gomoddirectives
|
||||
- gomodguard
|
||||
- goprintffuncname
|
||||
- gosec
|
||||
- gosmopolitan
|
||||
- govet
|
||||
- grouper
|
||||
- iface
|
||||
- importas
|
||||
- inamedparam
|
||||
- ineffassign
|
||||
- interfacebloat
|
||||
- intrange
|
||||
- ireturn
|
||||
- lll
|
||||
- loggercheck
|
||||
- maintidx
|
||||
- makezero
|
||||
- mirror
|
||||
- misspell
|
||||
- mnd
|
||||
- musttag
|
||||
- nakedret
|
||||
- nestif
|
||||
- nilerr
|
||||
- nilnesserr
|
||||
- nilnil
|
||||
- nlreturn
|
||||
- noctx
|
||||
- nolintlint
|
||||
- nonamedreturns
|
||||
- nosprintfhostport
|
||||
- paralleltest
|
||||
- perfsprint
|
||||
- prealloc
|
||||
- predeclared
|
||||
- promlinter
|
||||
- protogetter
|
||||
- reassign
|
||||
- recvcheck
|
||||
- revive
|
||||
- rowserrcheck
|
||||
- sloglint
|
||||
- spancheck
|
||||
- sqlclosecheck
|
||||
- staticcheck
|
||||
- tagalign
|
||||
- tagliatelle
|
||||
- testableexamples
|
||||
- testifylint
|
||||
- testpackage
|
||||
- thelper
|
||||
- tparallel
|
||||
- unparam
|
||||
- varnamelen
|
||||
- whitespace
|
||||
- wrapcheck
|
||||
- wsl
|
||||
- zerologlint
|
||||
+1
-1
@@ -3,7 +3,7 @@ GOCMD=go
|
||||
linters-install:
|
||||
@golangci-lint --version >/dev/null 2>&1 || { \
|
||||
echo "installing linting tools..."; \
|
||||
curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s v1.41.1; \
|
||||
curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s v2.0.2; \
|
||||
}
|
||||
|
||||
lint: linters-install
|
||||
|
||||
+2
-2
@@ -1,7 +1,6 @@
|
||||
Package validator
|
||||
=================
|
||||
<img align="right" src="logo.png">[](https://gitter.im/go-playground/validator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||

|
||||
<img align="right" src="logo.png">
|
||||
[](https://github.com/go-playground/validator/actions)
|
||||
[](https://coveralls.io/github/go-playground/validator?branch=master)
|
||||
[](https://goreportcard.com/report/github.com/go-playground/validator)
|
||||
@@ -173,6 +172,7 @@ validate := validator.New(validator.WithRequiredStructEnabled())
|
||||
| spicedb | SpiceDb ObjectID/Permission/Type |
|
||||
| datetime | Datetime |
|
||||
| e164 | e164 formatted phone number |
|
||||
| ein | U.S. Employeer Identification Number |
|
||||
| email | E-mail String
|
||||
| eth_addr | Ethereum Address |
|
||||
| hexadecimal | Hexadecimal String |
|
||||
|
||||
+27
-8
@@ -9,6 +9,7 @@ import (
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"net"
|
||||
"net/mail"
|
||||
"net/url"
|
||||
"os"
|
||||
"reflect"
|
||||
@@ -242,6 +243,7 @@ var (
|
||||
"mongodb_connection_string": isMongoDBConnectionString,
|
||||
"cron": isCron,
|
||||
"spicedb": isSpiceDB,
|
||||
"ein": isEIN,
|
||||
}
|
||||
)
|
||||
|
||||
@@ -258,7 +260,7 @@ func parseOneOfParam2(s string) []string {
|
||||
oneofValsCacheRWLock.Lock()
|
||||
vals = splitParamsRegex().FindAllString(s, -1)
|
||||
for i := 0; i < len(vals); i++ {
|
||||
vals[i] = strings.Replace(vals[i], "'", "", -1)
|
||||
vals[i] = strings.ReplaceAll(vals[i], "'", "")
|
||||
}
|
||||
oneofValsCache[s] = vals
|
||||
oneofValsCacheRWLock.Unlock()
|
||||
@@ -1376,7 +1378,6 @@ func isEqIgnoreCase(fl FieldLevel) bool {
|
||||
param := fl.Param()
|
||||
|
||||
switch field.Kind() {
|
||||
|
||||
case reflect.String:
|
||||
return strings.EqualFold(field.String(), param)
|
||||
}
|
||||
@@ -1606,7 +1607,6 @@ func isImage(fl FieldLevel) bool {
|
||||
case reflect.String:
|
||||
filePath := field.String()
|
||||
fileInfo, err := os.Stat(filePath)
|
||||
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
@@ -1619,7 +1619,9 @@ func isImage(fl FieldLevel) bool {
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
defer file.Close()
|
||||
defer func() {
|
||||
_ = file.Close()
|
||||
}()
|
||||
|
||||
mime, err := mimetype.DetectReader(file)
|
||||
if err != nil {
|
||||
@@ -1635,7 +1637,6 @@ func isImage(fl FieldLevel) bool {
|
||||
|
||||
// isFilePath is the validation function for validating if the current field's value is a valid file path.
|
||||
func isFilePath(fl FieldLevel) bool {
|
||||
|
||||
var exists bool
|
||||
var err error
|
||||
|
||||
@@ -1695,6 +1696,10 @@ func isE164(fl FieldLevel) bool {
|
||||
|
||||
// isEmail is the validation function for validating if the current field's value is a valid email address.
|
||||
func isEmail(fl FieldLevel) bool {
|
||||
_, err := mail.ParseAddress(fl.Field().String())
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return emailRegex().MatchString(fl.Field().String())
|
||||
}
|
||||
|
||||
@@ -2227,7 +2232,6 @@ func isGt(fl FieldLevel) bool {
|
||||
case reflect.Struct:
|
||||
|
||||
if field.Type().ConvertibleTo(timeType) {
|
||||
|
||||
return field.Convert(timeType).Interface().(time.Time).After(time.Now().UTC())
|
||||
}
|
||||
}
|
||||
@@ -2464,7 +2468,6 @@ func isLt(fl FieldLevel) bool {
|
||||
case reflect.Struct:
|
||||
|
||||
if field.Type().ConvertibleTo(timeType) {
|
||||
|
||||
return field.Convert(timeType).Interface().(time.Time).Before(time.Now().UTC())
|
||||
}
|
||||
}
|
||||
@@ -2644,7 +2647,6 @@ func isDir(fl FieldLevel) bool {
|
||||
|
||||
// isDirPath is the validation function for validating if the current field's value is a valid directory.
|
||||
func isDirPath(fl FieldLevel) bool {
|
||||
|
||||
var exists bool
|
||||
var err error
|
||||
|
||||
@@ -2957,6 +2959,12 @@ func isCveFormat(fl FieldLevel) bool {
|
||||
// a valid dns RFC 1035 label, defined in RFC 1035.
|
||||
func isDnsRFC1035LabelFormat(fl FieldLevel) bool {
|
||||
val := fl.Field().String()
|
||||
|
||||
size := len(val)
|
||||
if size > 63 {
|
||||
return false
|
||||
}
|
||||
|
||||
return dnsRegexRFC1035Label().MatchString(val)
|
||||
}
|
||||
|
||||
@@ -3060,3 +3068,14 @@ func isCron(fl FieldLevel) bool {
|
||||
cronString := fl.Field().String()
|
||||
return cronRegex().MatchString(cronString)
|
||||
}
|
||||
|
||||
// isEIN is the validation function for validating if the current field's value is a valid U.S. Employer Identification Number (EIN)
|
||||
func isEIN(fl FieldLevel) bool {
|
||||
field := fl.Field()
|
||||
|
||||
if field.Len() != 10 {
|
||||
return false
|
||||
}
|
||||
|
||||
return einRegex().MatchString(field.String())
|
||||
}
|
||||
|
||||
+1
-1
@@ -309,7 +309,7 @@ func (v *Validate) parseFieldTagsRecursive(tag string, fieldName string, alias s
|
||||
}
|
||||
|
||||
if len(vals) > 1 {
|
||||
current.param = strings.Replace(strings.Replace(vals[1], utf8HexComma, ",", -1), utf8Pipe, "|", -1)
|
||||
current.param = strings.ReplaceAll(strings.ReplaceAll(vals[1], utf8HexComma, ","), utf8Pipe, "|")
|
||||
}
|
||||
}
|
||||
current.isBlockEnd = true
|
||||
|
||||
+7
-1
@@ -959,7 +959,7 @@ Although an empty string is a valid base64 URL safe value, this will report
|
||||
an empty string as an error, if you wish to accept an empty string as valid
|
||||
you can use this with the omitempty tag.
|
||||
|
||||
Usage: base64url
|
||||
Usage: base64rawurl
|
||||
|
||||
# Bitcoin Address
|
||||
|
||||
@@ -1134,6 +1134,12 @@ This validates that a string value contains a valid longitude.
|
||||
|
||||
Usage: longitude
|
||||
|
||||
# Employeer Identification Number EIN
|
||||
|
||||
This validates that a string value contains a valid U.S. Employer Identification Number.
|
||||
|
||||
Usage: ein
|
||||
|
||||
# Social Security Number SSN
|
||||
|
||||
This validates that a string value contains a valid U.S. Social Security Number.
|
||||
|
||||
+3
-1
@@ -69,7 +69,7 @@ const (
|
||||
splitParamsRegexString = `'[^']*'|\S+`
|
||||
bicRegexString = `^[A-Za-z]{6}[A-Za-z0-9]{2}([A-Za-z0-9]{3})?$`
|
||||
semverRegexString = `^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$` // numbered capture groups https://semver.org/
|
||||
dnsRegexStringRFC1035Label = "^[a-z]([-a-z0-9]*[a-z0-9]){0,62}$"
|
||||
dnsRegexStringRFC1035Label = "^[a-z]([-a-z0-9]*[a-z0-9])?$"
|
||||
cveRegexString = `^CVE-(1999|2\d{3})-(0[^0]\d{2}|0\d[^0]\d{1}|0\d{2}[^0]|[1-9]{1}\d{3,})$` // CVE Format Id https://cve.mitre.org/cve/identifiers/syntaxchange.html
|
||||
mongodbIdRegexString = "^[a-f\\d]{24}$"
|
||||
mongodbConnStringRegexString = "^mongodb(\\+srv)?:\\/\\/(([a-zA-Z\\d]+):([a-zA-Z\\d$:\\/?#\\[\\]@]+)@)?(([a-z\\d.-]+)(:[\\d]+)?)((,(([a-z\\d.-]+)(:(\\d+))?))*)?(\\/[a-zA-Z-_]{1,64})?(\\?(([a-zA-Z]+)=([a-zA-Z\\d]+))(&(([a-zA-Z\\d]+)=([a-zA-Z\\d]+))?)*)?$"
|
||||
@@ -77,6 +77,7 @@ const (
|
||||
spicedbIDRegexString = `^(([a-zA-Z0-9/_|\-=+]{1,})|\*)$`
|
||||
spicedbPermissionRegexString = "^([a-z][a-z0-9_]{1,62}[a-z0-9])?$"
|
||||
spicedbTypeRegexString = "^([a-z][a-z0-9_]{1,61}[a-z0-9]/)?[a-z][a-z0-9_]{1,62}[a-z0-9]$"
|
||||
einRegexString = "^(\\d{2}-\\d{7})$"
|
||||
)
|
||||
|
||||
func lazyRegexCompile(str string) func() *regexp.Regexp {
|
||||
@@ -160,4 +161,5 @@ var (
|
||||
spicedbIDRegex = lazyRegexCompile(spicedbIDRegexString)
|
||||
spicedbPermissionRegex = lazyRegexCompile(spicedbPermissionRegexString)
|
||||
spicedbTypeRegex = lazyRegexCompile(spicedbTypeRegexString)
|
||||
einRegex = lazyRegexCompile(einRegexString)
|
||||
)
|
||||
|
||||
+3
-3
@@ -46,9 +46,9 @@ type StructLevel interface {
|
||||
//
|
||||
// NOTES:
|
||||
//
|
||||
// fieldName and altName get appended to the existing namespace that
|
||||
// validator is on. e.g. pass 'FirstName' or 'Names[0]' depending
|
||||
// on the nesting
|
||||
// fieldName and structFieldName get appended to the existing
|
||||
// namespace that validator is on. e.g. pass 'FirstName' or
|
||||
// 'Names[0]' depending on the nesting
|
||||
//
|
||||
// tag can be an existing validation tag or just something you make up
|
||||
// and process on the flip side it's up to you.
|
||||
|
||||
+56
-14
@@ -217,17 +217,18 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
|
||||
customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
|
||||
var err error
|
||||
var t string
|
||||
|
||||
var f64 float64
|
||||
var digits uint64
|
||||
var kind reflect.Kind
|
||||
|
||||
if idx := strings.Index(fe.Param(), "."); idx != -1 {
|
||||
digits = uint64(len(fe.Param()[idx+1:]))
|
||||
}
|
||||
fn := func() (err error) {
|
||||
if idx := strings.Index(fe.Param(), "."); idx != -1 {
|
||||
digits = uint64(len(fe.Param()[idx+1:]))
|
||||
}
|
||||
|
||||
f64, err := strconv.ParseFloat(fe.Param(), 64)
|
||||
if err != nil {
|
||||
goto END
|
||||
f64, err = strconv.ParseFloat(fe.Param(), 64)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
kind = fe.Kind()
|
||||
@@ -240,6 +241,11 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
|
||||
|
||||
var c string
|
||||
|
||||
err = fn()
|
||||
if err != nil {
|
||||
goto END
|
||||
}
|
||||
|
||||
c, err = ut.C("min-string-character", f64, digits, ut.FmtNumber(f64, digits))
|
||||
if err != nil {
|
||||
goto END
|
||||
@@ -250,6 +256,11 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
|
||||
case reflect.Slice, reflect.Map, reflect.Array:
|
||||
var c string
|
||||
|
||||
err = fn()
|
||||
if err != nil {
|
||||
goto END
|
||||
}
|
||||
|
||||
c, err = ut.C("min-items-item", f64, digits, ut.FmtNumber(f64, digits))
|
||||
if err != nil {
|
||||
goto END
|
||||
@@ -258,6 +269,16 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
|
||||
t, err = ut.T("min-items", fe.Field(), c)
|
||||
|
||||
default:
|
||||
if fe.Type() == reflect.TypeOf(time.Duration(0)) {
|
||||
t, err = ut.T("min-number", fe.Field(), fe.Param())
|
||||
goto END
|
||||
}
|
||||
|
||||
err = fn()
|
||||
if err != nil {
|
||||
goto END
|
||||
}
|
||||
|
||||
t, err = ut.T("min-number", fe.Field(), ut.FmtNumber(f64, digits))
|
||||
}
|
||||
|
||||
@@ -305,17 +326,18 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
|
||||
customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
|
||||
var err error
|
||||
var t string
|
||||
|
||||
var f64 float64
|
||||
var digits uint64
|
||||
var kind reflect.Kind
|
||||
|
||||
if idx := strings.Index(fe.Param(), "."); idx != -1 {
|
||||
digits = uint64(len(fe.Param()[idx+1:]))
|
||||
}
|
||||
fn := func() (err error) {
|
||||
if idx := strings.Index(fe.Param(), "."); idx != -1 {
|
||||
digits = uint64(len(fe.Param()[idx+1:]))
|
||||
}
|
||||
|
||||
f64, err := strconv.ParseFloat(fe.Param(), 64)
|
||||
if err != nil {
|
||||
goto END
|
||||
f64, err = strconv.ParseFloat(fe.Param(), 64)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
kind = fe.Kind()
|
||||
@@ -328,6 +350,11 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
|
||||
|
||||
var c string
|
||||
|
||||
err = fn()
|
||||
if err != nil {
|
||||
goto END
|
||||
}
|
||||
|
||||
c, err = ut.C("max-string-character", f64, digits, ut.FmtNumber(f64, digits))
|
||||
if err != nil {
|
||||
goto END
|
||||
@@ -338,6 +365,11 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
|
||||
case reflect.Slice, reflect.Map, reflect.Array:
|
||||
var c string
|
||||
|
||||
err = fn()
|
||||
if err != nil {
|
||||
goto END
|
||||
}
|
||||
|
||||
c, err = ut.C("max-items-item", f64, digits, ut.FmtNumber(f64, digits))
|
||||
if err != nil {
|
||||
goto END
|
||||
@@ -346,6 +378,16 @@ func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (er
|
||||
t, err = ut.T("max-items", fe.Field(), c)
|
||||
|
||||
default:
|
||||
if fe.Type() == reflect.TypeOf(time.Duration(0)) {
|
||||
t, err = ut.T("max-number", fe.Field(), fe.Param())
|
||||
goto END
|
||||
}
|
||||
|
||||
err = fn()
|
||||
if err != nil {
|
||||
goto END
|
||||
}
|
||||
|
||||
t, err = ut.T("max-number", fe.Field(), ut.FmtNumber(f64, digits))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user