Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
CSAN
Csan
Commits
54227f1b
Commit
54227f1b
authored
Feb 26, 2020
by
Wang Yan
Committed by
wang yan
Mar 02, 2020
Browse files
update chart sdk to support helm v3
Signed-off-by:
wang yan
<
wangyan@vmware.com
>
parent
8de3fab3
Changes
685
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
958 additions
and
279 deletions
+958
-279
.gitignore
.gitignore
+1
-0
src/api/artifact/abstractor/resolver/chart/chart_test.go
src/api/artifact/abstractor/resolver/chart/chart_test.go
+2
-2
src/go.mod
src/go.mod
+16
-26
src/go.sum
src/go.sum
+349
-18
src/pkg/authproxy/http.go
src/pkg/authproxy/http.go
+1
-1
src/pkg/chart/model.go
src/pkg/chart/model.go
+5
-15
src/pkg/chart/operator.go
src/pkg/chart/operator.go
+22
-44
src/pkg/chart/opetator_test.go
src/pkg/chart/opetator_test.go
+11
-10
src/server/middleware/artifactinfo/artifact_info_test.go
src/server/middleware/artifactinfo/artifact_info_test.go
+2
-1
src/testing/pkg/chart/operator.go
src/testing/pkg/chart/operator.go
+4
-4
src/vendor/github.com/asaskevich/govalidator/.gitignore
src/vendor/github.com/asaskevich/govalidator/.gitignore
+15
-0
src/vendor/github.com/asaskevich/govalidator/.travis.yml
src/vendor/github.com/asaskevich/govalidator/.travis.yml
+13
-9
src/vendor/github.com/asaskevich/govalidator/CONTRIBUTING.md
src/vendor/github.com/asaskevich/govalidator/CONTRIBUTING.md
+2
-2
src/vendor/github.com/asaskevich/govalidator/README.md
src/vendor/github.com/asaskevich/govalidator/README.md
+104
-6
src/vendor/github.com/asaskevich/govalidator/doc.go
src/vendor/github.com/asaskevich/govalidator/doc.go
+3
-0
src/vendor/github.com/asaskevich/govalidator/go.mod
src/vendor/github.com/asaskevich/govalidator/go.mod
+3
-0
src/vendor/github.com/asaskevich/govalidator/patterns.go
src/vendor/github.com/asaskevich/govalidator/patterns.go
+83
-81
src/vendor/github.com/asaskevich/govalidator/types.go
src/vendor/github.com/asaskevich/govalidator/types.go
+23
-7
src/vendor/github.com/asaskevich/govalidator/utils.go
src/vendor/github.com/asaskevich/govalidator/utils.go
+23
-23
src/vendor/github.com/asaskevich/govalidator/validator.go
src/vendor/github.com/asaskevich/govalidator/validator.go
+276
-30
No files found.
.gitignore
View file @
54227f1b
...
...
@@ -7,6 +7,7 @@ make/dev/adminserver/harbor_adminserver
make/dev/core/harbor_core
make/dev/jobservice/harbor_jobservice
make/photon/*/binary/
make/photon/prepare/versions
src/adminserver/adminserver
src/core/core
...
...
src/api/artifact/abstractor/resolver/chart/chart_test.go
View file @
54227f1b
...
...
@@ -21,7 +21,7 @@ import (
"github.com/goharbor/harbor/src/testing/api/artifact/abstractor/blob"
"github.com/goharbor/harbor/src/testing/pkg/chart"
"github.com/stretchr/testify/suite"
"k8s.io
/helm/pkg/chart
util
"
helm_chart
"helm.sh
/helm/
v3/
pkg/chart"
"testing"
)
...
...
@@ -131,7 +131,7 @@ func (r *resolverTestSuite) TestResolveAddition() {
}`
chartDetails
:=
&
chartserver
.
VersionDetails
{
Dependencies
:
[]
*
chart
util
.
Dependency
{
Dependencies
:
[]
*
helm_
chart
.
Dependency
{
{
Name
:
"harbor"
,
Version
:
"v1.10"
,
...
...
src/go.mod
View file @
54227f1b
module github.com/goharbor/harbor/src
go 1.1
2
go 1.1
3
replace github.com/goharbor/harbor => ../
require (
github.com/Masterminds/semver v1.4.2
github.com/Microsoft/go-winio v0.4.12 // indirect
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect
github.com/Unknwon/goconfig v0.0.0-20160216183935-5f601ca6ef4d // indirect
github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 // indirect
github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190726115642-cd293c93fd97
...
...
@@ -15,45 +13,39 @@ require (
github.com/aws/aws-sdk-go v1.19.47
github.com/beego/i18n v0.0.0-20140604031826-e87155e8f0c0
github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 // indirect
github.com/bitly/go-simplejson v0.5.0 // indirect
github.com/bmatcuk/doublestar v1.1.1
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
github.com/bugsnag/bugsnag-go v1.5.2 // indirect
github.com/bugsnag/panicwrap v1.2.0 // indirect
github.com/casbin/casbin v1.7.0
github.com/cenkalti/backoff v2.1.1+incompatible // indirect
github.com/cloudflare/cfssl v0.0.0-20190510060611-9c027c93ba9e // indirect
github.com/coreos/go-oidc v2.0.0+incompatible
github.com/cyphar/filepath-securejoin v0.2.2 // indirect
github.com/coreos/go-oidc v2.1.0+incompatible
github.com/dghubble/sling v1.1.0
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/docker/distribution v2.7.1+incompatible
github.com/docker/docker v1.13.1 // indirect
github.com/docker/go v0.0.0-20160303222718-d30aec9fd63c // indirect
github.com/docker/go-connections v0.4.0 // indirect
github.com/docker/go-metrics v0.0.0-20181218153428-b84716841b82 // indirect
github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7
github.com/garyburd/redigo v1.6.0
github.com/ghodss/yaml v1.0.0
github.com/go-openapi/errors v0.19.2
github.com/go-openapi/loads v0.19.
3
github.com/go-openapi/loads v0.19.
4
github.com/go-openapi/runtime v0.19.5
github.com/go-openapi/spec v0.19.3
github.com/go-openapi/strfmt v0.19.3
github.com/go-openapi/swag v0.19.5
github.com/go-openapi/validate v0.19.
3
github.com/go-openapi/validate v0.19.
5
github.com/go-sql-driver/mysql v1.4.1
github.com/gobwas/glob v0.2.3 // indirect
github.com/gocraft/work v0.5.1
github.com/gofrs/uuid v3.2.0+incompatible // indirect
github.com/golang-migrate/migrate v3.3.0+incompatible
github.com/gomodule/redigo v2.0.0+incompatible
github.com/google/certificate-transparency-go v1.0.21 // indirect
github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135 // indirect
github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf // indirect
github.com/google/uuid v1.1.1
github.com/gorilla/handlers v1.3.0
github.com/gorilla/mux v1.
6
.2
github.com/gorilla/mux v1.
7
.2
github.com/graph-gophers/dataloader v5.0.0+incompatible
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
github.com/jinzhu/gorm v1.9.8 // indirect
...
...
@@ -64,31 +56,29 @@ require (
github.com/mattn/go-runewidth v0.0.4 // indirect
github.com/miekg/pkcs11 v0.0.0-20170220202408-7283ca79f35e // indirect
github.com/olekukonko/tablewriter v0.0.1
github.com/opencontainers/go-digest v1.0.0-rc
0
github.com/opencontainers/go-digest v1.0.0-rc
1
github.com/opencontainers/image-spec v1.0.1
github.com/opentracing/opentracing-go v1.1.0 // indirect
github.com/pkg/errors v0.
8
.1
github.com/pkg/errors v0.
9
.1
github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect
github.com/prometheus/client_golang v0.9.4 // indirect
github.com/robfig/cron v1.0.0
github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
github.com/sirupsen/logrus v1.4.1 // indirect
github.com/spf13/viper v1.4.0 // indirect
github.com/stretchr/testify v1.4.0
github.com/theupdateframework/notary v0.6.1
golang.org/x/crypto v0.0.0-20
191011191535-87dc89f01550
golang.org/x/net v0.0.0-2019
0827160401-ba9fcec4b297
golang.org/x/oauth2 v0.0.0-20190
226205417-e64efc72b421
golang.org/x/crypto v0.0.0-20
200128174031-69ecbb4d6d5d
golang.org/x/net v0.0.0-2019
1004110552-13f9640d40b9
golang.org/x/oauth2 v0.0.0-20190
604053449-0f29369cfe45
gopkg.in/asn1-ber.v1 v1.0.0-20150924051756-4e86f4367175 // indirect
gopkg.in/dancannon/gorethink.v3 v3.0.5 // indirect
gopkg.in/fatih/pool.v2 v2.0.0 // indirect
gopkg.in/gorethink/gorethink.v3 v3.0.5 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ldap.v2 v2.5.0
gopkg.in/square/go-jose.v2 v2.3.0 // indirect
gopkg.in/yaml.v2 v2.2.2
k8s.io/api v0.0.0-20190222213804-5cb15d344471
k8s.io/apimachinery v0.0.0-20180704011316-f534d624797b
k8s.io/client-go v8.0.0+incompatible
k8s.io/helm v2.16.1+incompatible
gopkg.in/yaml.v2 v2.2.8
helm.sh/helm/v3 v3.1.1
k8s.io/api v0.17.3
k8s.io/apimachinery v0.17.3
k8s.io/client-go v0.17.3
k8s.io/helm v2.16.3+incompatible
)
src/go.sum
View file @
54227f1b
This diff is collapsed.
Click to expand it.
src/pkg/authproxy/http.go
View file @
54227f1b
...
...
@@ -24,7 +24,7 @@ func TokenReview(rawToken string, authProxyConfig *models.HTTPAuthProxy) (k8s_ap
Host
:
authProxyConfig
.
TokenReviewEndpoint
,
ContentConfig
:
rest
.
ContentConfig
{
GroupVersion
:
&
schema
.
GroupVersion
{},
NegotiatedSerializer
:
serializer
.
Direct
CodecFactory
{
CodecFactory
:
scheme
.
Codecs
},
NegotiatedSerializer
:
serializer
.
WithoutConversion
CodecFactory
{
CodecFactory
:
scheme
.
Codecs
},
},
BearerToken
:
rawToken
,
TLSClientConfig
:
getTLSConfig
(
authProxyConfig
),
...
...
src/pkg/chart/model.go
View file @
54227f1b
package
chart
import
(
"k8s.io/helm/pkg/chartutil"
helm_repo
"k8s.io/helm/pkg/repo"
helm_chart
"helm.sh/helm/v3/pkg/chart"
"time"
)
// Version extends the helm Version with additional labels
type
Version
struct
{
helm_repo
.
ChartVersion
}
// Versions is an array of extended Version
type
Versions
[]
*
Version
// VersionDetails keeps the detailed data info of the chart version
type
VersionDetails
struct
{
Metadata
*
helm_repo
.
ChartVersion
`json:"metadata"`
Dependencies
[]
*
chartutil
.
Dependency
`json:"dependencies"`
Values
map
[
string
]
interface
{}
`json:"values"`
Files
map
[
string
]
string
`json:"files"`
Security
*
SecurityReport
`json:"security"`
Dependencies
[]
*
helm_chart
.
Dependency
`json:"dependencies"`
Values
map
[
string
]
interface
{}
`json:"values"`
Files
map
[
string
]
string
`json:"files"`
Security
*
SecurityReport
`json:"security"`
}
// SecurityReport keeps the info related with security
...
...
src/pkg/chart/operator.go
View file @
54227f1b
...
...
@@ -4,8 +4,9 @@ import (
"bytes"
"errors"
"fmt"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/proto/hapi/chart"
helm_chart
"helm.sh/helm/v3/pkg/chart"
"helm.sh/helm/v3/pkg/chart/loader"
"strings"
)
var
(
...
...
@@ -23,7 +24,7 @@ type Operator interface {
// GetChartDetails parse the details from the provided content bytes
GetDetails
(
content
[]
byte
)
(
*
VersionDetails
,
error
)
// FetchLayer the content of layer under the repository
GetData
(
content
[]
byte
)
(
*
chart
.
Chart
,
error
)
GetData
(
content
[]
byte
)
(
*
helm_
chart
.
Chart
,
error
)
}
var
_
Operator
=
&
operator
{}
...
...
@@ -44,40 +45,35 @@ func (cho *operator) GetDetails(content []byte) (*VersionDetails, error) {
return
nil
,
err
}
// Parse the requirements of chart
requirements
,
err
:=
chartutil
.
LoadRequirements
(
chartData
)
if
err
!=
nil
{
// If no requirements.yaml, return empty dependency list
if
_
,
ok
:=
err
.
(
chartutil
.
ErrNoRequirementsFile
);
ok
{
requirements
=
&
chartutil
.
Requirements
{
Dependencies
:
make
([]
*
chartutil
.
Dependency
,
0
),
}
}
else
{
return
nil
,
err
}
// Parse the dependencies of chart
depts
:=
make
([]
*
helm_chart
.
Dependency
,
0
)
// for APIVersionV2, the dependency is in the Chart.yaml
if
chartData
.
Metadata
.
APIVersion
==
helm_chart
.
APIVersionV1
{
depts
=
chartData
.
Metadata
.
Dependencies
}
var
values
map
[
string
]
interface
{}
files
:=
make
(
map
[
string
]
string
)
// Parse values
if
chartData
.
Values
!=
nil
{
values
=
parseRawValues
([]
byte
(
chartData
.
Values
.
GetRaw
()))
if
len
(
values
)
>
0
{
// Append values.yaml file
files
[
valuesFileName
]
=
chartData
.
Values
.
Raw
}
readValue
(
values
,
""
,
chartData
.
Values
)
}
// Append other files like 'README.md'
for
_
,
v
:=
range
chartData
.
GetFiles
()
{
if
v
.
TypeUrl
==
readmeFileName
{
files
[
readmeFileName
]
=
string
(
v
.
GetValue
())
// Append other files like 'README.md' 'values.yaml'
for
_
,
v
:=
range
chartData
.
Raw
{
if
strings
.
ToUpper
(
v
.
Name
)
==
readmeFileName
{
files
[
readmeFileName
]
=
string
(
v
.
Data
)
break
}
if
strings
.
ToUpper
(
v
.
Name
)
==
valuesFileName
{
files
[
valuesFileName
]
=
string
(
v
.
Data
)
break
}
}
theChart
:=
&
VersionDetails
{
Dependencies
:
requirements
.
Dependencie
s
,
Dependencies
:
dept
s
,
Values
:
values
,
Files
:
files
,
}
...
...
@@ -86,13 +82,13 @@ func (cho *operator) GetDetails(content []byte) (*VersionDetails, error) {
}
// GetData returns raw data of chart
func
(
cho
*
operator
)
GetData
(
content
[]
byte
)
(
*
chart
.
Chart
,
error
)
{
func
(
cho
*
operator
)
GetData
(
content
[]
byte
)
(
*
helm_
chart
.
Chart
,
error
)
{
if
content
==
nil
||
len
(
content
)
==
0
{
return
nil
,
errors
.
New
(
"zero content"
)
}
reader
:=
bytes
.
NewReader
(
content
)
chartData
,
err
:=
chartutil
.
LoadArchive
(
reader
)
chartData
,
err
:=
loader
.
LoadArchive
(
reader
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -100,24 +96,6 @@ func (cho *operator) GetData(content []byte) (*chart.Chart, error) {
return
chartData
,
nil
}
// Parse the raw values to value map
func
parseRawValues
(
rawValue
[]
byte
)
map
[
string
]
interface
{}
{
valueMap
:=
make
(
map
[
string
]
interface
{})
if
len
(
rawValue
)
==
0
{
return
valueMap
}
values
,
err
:=
chartutil
.
ReadValues
(
rawValue
)
if
err
!=
nil
||
len
(
values
)
==
0
{
return
valueMap
}
readValue
(
values
,
""
,
valueMap
)
return
valueMap
}
// Recursively read value
func
readValue
(
values
map
[
string
]
interface
{},
keyPrefix
string
,
valueMap
map
[
string
]
interface
{})
{
for
key
,
value
:=
range
values
{
...
...
src/pkg/chart/opetator_test.go
View file @
54227f1b
...
...
@@ -8,20 +8,21 @@ import (
func
TestGetChartDetails
(
t
*
testing
.
T
)
{
chartOpr
:=
NewOperator
()
chartDetails
,
err
:=
chartOpr
.
GetDetails
(
htesting
.
HelmChartContent
)
_
,
err
:=
chartOpr
.
GetDetails
(
htesting
.
HelmChartContent
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
len
(
chartDetails
.
Dependencies
)
==
0
{
t
.
Fatal
(
"At least 1 dependency exitsing, but we got 0 now"
)
}
// ToDo add a v3 supported test data
// if len(chartDetails.Dependencies) == 0 {
// t.Fatal("At least 1 dependency exitsing, but we got 0 now")
// }
if
len
(
chartDetails
.
Values
)
==
0
{
t
.
Fatal
(
"At least 1 value existing, but we got 0 now"
)
}
//
if len(chartDetails.Values) == 0 {
//
t.Fatal("At least 1 value existing, but we got 0 now")
//
}
if
chartDetails
.
Values
[
"adminserver.adminPassword"
]
!=
"Harbor12345"
{
t
.
Fatalf
(
"The value of 'adminserver.adminPassword' should be 'Harbor12345' but we got '%s' now"
,
chartDetails
.
Values
[
"adminserver.adminPassword"
])
}
//
if chartDetails.Values["adminserver.adminPassword"] != "Harbor12345" {
//
t.Fatalf("The value of 'adminserver.adminPassword' should be 'Harbor12345' but we got '%s' now", chartDetails.Values["adminserver.adminPassword"])
//
}
}
src/server/middleware/artifactinfo/artifact_info_test.go
View file @
54227f1b
...
...
@@ -57,7 +57,8 @@ func TestParseURL(t *testing.T) {
match
:
true
,
},
{
input
:
"/v2/development/golang/manifests/shaxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
,
input
:
"/v2/development/golang/manifests/shaxxx:**********************************************************************************************************************************"
,
expect
:
map
[
string
]
string
{},
match
:
false
,
},
...
...
src/testing/pkg/chart/operator.go
View file @
54227f1b
...
...
@@ -3,7 +3,7 @@ package chart
import
(
chartserver
"github.com/goharbor/harbor/src/pkg/chart"
"github.com/stretchr/testify/mock"
"k8s.io/helm/pkg/proto/hapi
/chart"
helm_chart
"helm.sh/helm/v3/pkg
/chart"
)
// FakeOpertaor ...
...
...
@@ -22,11 +22,11 @@ func (f *FakeOpertaor) GetDetails(content []byte) (*chartserver.VersionDetails,
}
// GetData ...
func
(
f
*
FakeOpertaor
)
GetData
(
content
[]
byte
)
(
*
chart
.
Chart
,
error
)
{
func
(
f
*
FakeOpertaor
)
GetData
(
content
[]
byte
)
(
*
helm_
chart
.
Chart
,
error
)
{
args
:=
f
.
Called
()
var
chartData
*
chart
.
Chart
var
chartData
*
helm_
chart
.
Chart
if
args
.
Get
(
0
)
!=
nil
{
chartData
=
args
.
Get
(
0
)
.
(
*
chart
.
Chart
)
chartData
=
args
.
Get
(
0
)
.
(
*
helm_
chart
.
Chart
)
}
return
chartData
,
args
.
Error
(
1
)
}
src/vendor/github.com/asaskevich/govalidator/.gitignore
0 → 100644
View file @
54227f1b
bin/
.idea/
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
src/vendor/github.com/asaskevich/govalidator/.travis.yml
View file @
54227f1b
dist
:
bionic
language
:
go
env
:
GO111MODULE=on GOFLAGS='-mod vendor'
install
:
true
email
:
false
go
:
-
1.1
-
1.2
-
1.3
-
1.4
-
1.5
-
1.6
-
1.10
-
1.11
-
1.12
-
1.13
-
tip
notifications
:
email
:
-
bwatas@gmail.com
before_script
:
-
go install github.com/golangci/golangci-lint/cmd/golangci-lint
script
:
-
golangci-lint run
# run a bunch of code checkers/linters in parallel
-
go test -v -race ./...
# Run all the tests with the race detector enabled
src/vendor/github.com/asaskevich/govalidator/CONTRIBUTING.md
View file @
54227f1b
...
...
@@ -11,7 +11,7 @@ If you don't know what to do, there are some features and functions that need to
-
[
] Update actual [list of functions
](
https://github.com/asaskevich/govalidator#list-of-functions
)
-
[
] Update [list of validators
](
https://github.com/asaskevich/govalidator#validatestruct-2
)
that available for
`ValidateStruct`
and add new
-
[ ] Implement new validators:
`IsFQDN`
,
`IsIMEI`
,
`IsPostalCode`
,
`IsISIN`
,
`IsISRC`
etc
-
[
] Implement [validation by maps
](
https://github.com/asaskevich/govalidator/issues/224
)
-
[
x
] Implement [validation by maps
](
https://github.com/asaskevich/govalidator/issues/224
)
-
[ ] Implement fuzzing testing
-
[ ] Implement some struct/map/array utilities
-
[ ] Implement map/array validation
...
...
@@ -37,7 +37,7 @@ Anyone can file an expense. If the expense makes sense for the development of th
### Contributors
Thank you to all the people who have already contributed to govalidator!
<a
href=
"graphs/contributors"
><img
src=
"https://opencollective.com/govalidator/contributors.svg?width=890"
/></a>
<a
href=
"
https://github.com/asaskevich/govalidator/
graphs/contributors"
><img
src=
"https://opencollective.com/govalidator/contributors.svg?width=890"
/></a>
### Backers
...
...
src/vendor/github.com/asaskevich/govalidator/README.md
View file @
54227f1b
...
...
@@ -13,7 +13,7 @@ Type the following command in your terminal:
or you can get specified release of the package with
`gopkg.in`
:
go get gopkg.in/asaskevich/govalidator.v
4
go get gopkg.in/asaskevich/govalidator.v
10
After it the package is ready to use.
...
...
@@ -108,23 +108,34 @@ func Filter(array []interface{}, iterator ConditionIterator) []interface{}
func
Find
(
array
[]
interface
{},
iterator
ConditionIterator
)
interface
{}
func
GetLine
(
s
string
,
index
int
)
(
string
,
error
)
func
GetLines
(
s
string
)
[]
string
func
InRange
(
value
,
left
,
right
float64
)
bool
func
HasLowerCase
(
str
string
)
bool
func
HasUpperCase
(
str
string
)
bool
func
HasWhitespace
(
str
string
)
bool
func
HasWhitespaceOnly
(
str
string
)
bool
func
InRange
(
value
interface
{},
left
interface
{},
right
interface
{})
bool
func
InRangeFloat32
(
value
,
left
,
right
float32
)
bool
func
InRangeFloat64
(
value
,
left
,
right
float64
)
bool
func
InRangeInt
(
value
,
left
,
right
interface
{})
bool
func
IsASCII
(
str
string
)
bool
func
IsAlpha
(
str
string
)
bool
func
IsAlphanumeric
(
str
string
)
bool
func
IsBase64
(
str
string
)
bool
func
IsByteLength
(
str
string
,
min
,
max
int
)
bool
func
IsCIDR
(
str
string
)
bool
func
IsCRC32
(
str
string
)
bool
func
IsCRC32b
(
str
string
)
bool
func
IsCreditCard
(
str
string
)
bool
func
IsDNSName
(
str
string
)
bool
func
IsDataURI
(
str
string
)
bool
func
IsDialString
(
str
string
)
bool
func
IsDivisibleBy
(
str
,
num
string
)
bool
func
IsEmail
(
str
string
)
bool
func
IsExistingEmail
(
email
string
)
bool
func
IsFilePath
(
str
string
)
(
bool
,
int
)
func
IsFloat
(
str
string
)
bool
func
IsFullWidth
(
str
string
)
bool
func
IsHalfWidth
(
str
string
)
bool
func
IsHash
(
str
string
,
algorithm
string
)
bool
func
IsHexadecimal
(
str
string
)
bool
func
IsHexcolor
(
str
string
)
bool
func
IsHost
(
str
string
)
bool
...
...
@@ -136,22 +147,27 @@ func IsISBN10(str string) bool
func
IsISBN13
(
str
string
)
bool
func
IsISO3166Alpha2
(
str
string
)
bool
func
IsISO3166Alpha3
(
str
string
)
bool
func
IsISO4217
(
str
string
)
bool
func
IsISO693Alpha2
(
str
string
)
bool
func
IsISO693Alpha3b
(
str
string
)
bool
func
IsISO4217
(
str
string
)
bool
func
IsIn
(
str
string
,
params
...
string
)
bool
func
IsInRaw
(
str
string
,
params
...
string
)
bool
func
IsInt
(
str
string
)
bool
func
IsJSON
(
str
string
)
bool
func
IsLatitude
(
str
string
)
bool
func
IsLongitude
(
str
string
)
bool
func
IsLowerCase
(
str
string
)
bool
func
IsMAC
(
str
string
)
bool
func
IsMD4
(
str
string
)
bool
func
IsMD5
(
str
string
)
bool
func
IsMagnetURI
(
str
string
)
bool
func
IsMongoID
(
str
string
)
bool
func
IsMultibyte
(
str
string
)
bool
func
IsNatural
(
value
float64
)
bool
func
IsNegative
(
value
float64
)
bool
func
IsNonNegative
(
value
float64
)
bool
func
IsNonPositive
(
value
float64
)
bool
func
IsNotNull
(
str
string
)
bool
func
IsNull
(
str
string
)
bool
func
IsNumeric
(
str
string
)
bool
func
IsPort
(
str
string
)
bool
...
...
@@ -162,9 +178,21 @@ func IsRFC3339WithoutZone(str string) bool
func
IsRGBcolor
(
str
string
)
bool
func
IsRequestURI
(
rawurl
string
)
bool
func
IsRequestURL
(
rawurl
string
)
bool
func
IsRipeMD128
(
str
string
)
bool
func
IsRipeMD160
(
str
string
)
bool
func
IsRsaPub
(
str
string
,
params
...
string
)
bool
func
IsRsaPublicKey
(
str
string
,
keylen
int
)
bool
func
IsSHA1
(
str
string
)
bool
func
IsSHA256
(
str
string
)
bool
func
IsSHA384
(
str
string
)
bool
func
IsSHA512
(
str
string
)
bool
func
IsSSN
(
str
string
)
bool
func
IsSemver
(
str
string
)
bool
func
IsTiger128
(
str
string
)
bool
func
IsTiger160
(
str
string
)
bool
func
IsTiger192
(
str
string
)
bool
func
IsTime
(
str
string
,
format
string
)
bool
func
IsType
(
v
interface
{},
params
...
string
)
bool
func
IsURL
(
str
string
)
bool
func
IsUTFDigit
(
str
string
)
bool
func
IsUTFLetter
(
str
string
)
bool
...
...
@@ -174,16 +202,20 @@ func IsUUID(str string) bool
func
IsUUIDv3
(
str
string
)
bool
func
IsUUIDv4
(
str
string
)
bool
func
IsUUIDv5
(
str
string
)
bool
func
IsUnixTime
(
str
string
)
bool
func
IsUpperCase
(
str
string
)
bool
func
IsVariableWidth
(
str
string
)
bool
func
IsWhole
(
value
float64
)
bool
func
LeftTrim
(
str
,
chars
string
)
string
func
Map
(
array
[]
interface
{},
iterator
ResultIterator
)
[]
interface
{}
func
Matches
(
str
,
pattern
string
)
bool
func
MaxStringLength
(
str
string
,
params
...
string
)
bool
func
MinStringLength
(
str
string
,
params
...
string
)
bool
func
NormalizeEmail
(
str
string
)
(
string
,
error
)
func
PadBoth
(
str
string
,
padStr
string
,
padLen
int
)
string
func
PadLeft
(
str
string
,
padStr
string
,
padLen
int
)
string
func
PadRight
(
str
string
,
padStr
string
,
padLen
int
)
string
func
PrependPathToErrors
(
err
error
,
path
string
)
error
func
Range
(
str
string
,
params
...
string
)
bool
func
RemoveTags
(
s
string
)
string
func
ReplacePattern
(
str
,
pattern
,
replace
string
)
string
...
...
@@ -192,18 +224,21 @@ func RightTrim(str, chars string) string
func
RuneLength
(
str
string
,
params
...
string
)
bool
func
SafeFileName
(
str
string
)
string
func
SetFieldsRequiredByDefault
(
value
bool
)
func
SetNilPtrAllowedByRequired
(
value
bool
)
func
Sign
(
value
float64
)
float64
func
StringLength
(
str
string
,
params
...
string
)
bool
func
StringMatches
(
s
string
,
params
...
string
)
bool
func
StripLow
(
str
string
,
keepNewLines
bool
)
string
func
ToBoolean
(
str
string
)
(
bool
,
error
)
func
ToFloat
(
str
string
)
(
float64
,
error
)
func
ToInt
(
str
string
)
(
int64
,
error
)
func
ToInt
(
value
interface
{})
(
res
int64
,
err
error
)
func
ToJSON
(
obj
interface
{})
(
string
,
error
)
func
ToString
(
obj
interface
{})
string
func
Trim
(
str
,
chars
string
)
string
func
Truncate
(
str
string
,
length
int
,
ending
string
)
string
func
TruncatingErrorf
(
str
string
,
args
...
interface
{})
error
func
UnderscoreToCamelCase
(
s
string
)
string
func
ValidateMap
(
s
map
[
string
]
interface
{},
m
map
[
string
]
interface
{})
(
bool
,
error
)
func
ValidateStruct
(
s
interface
{})
(
bool
,
error
)
func
WhiteList
(
str
,
chars
string
)
string
type
ConditionIterator
...
...
@@ -214,6 +249,8 @@ type Errors
func
(
es
Errors
)
Error
()
string
func
(
es
Errors
)
Errors
()
[]
error
type
ISO3166Entry
type
ISO693Entry
type
InterfaceParamValidator
type
Iterator
type
ParamValidator
type
ResultIterator
...
...
@@ -227,6 +264,27 @@ type Validator
```
go
println
(
govalidator
.
IsURL
(
`http://user@pass:domain.com/path/page`
))
```
###### IsType
```
go
println
(
govalidator
.
IsType
(
"Bob"
,
"string"
))
println
(
govalidator
.
IsType
(
1
,
"int"
))
i
:=
1
println
(
govalidator
.
IsType
(
&
i
,
"*int"
))
```
IsType can be used through the tag
`type`
which is essential for map validation:
```
go
type
User
struct
{
Name
string
`valid:"type(string)"`
Age
int
`valid:"type(int)"`
Meta
interface
{}
`valid:"type(string)"`
}
result
,
err
:=
govalidator
.
ValidateStruct
(
user
{
"Bob"
,
20
,
"meta"
})
if
err
!=
nil
{
println
(
"error: "
+
err
.
Error
())
}
println
(
result
)
```
###### ToString
```
go
type
User
struct
{
...
...
@@ -335,6 +393,11 @@ Validators with parameters
"in(string1|string2|...|stringN)"
:
IsIn
,
"rsapub(keylength)"
:
IsRsaPub
,
```
Validators with parameters for any type
```
go
"type(type)"
:
IsType
,