Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions is/rules.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,8 @@ var (
ErrSSN = validation.NewError("validation_is_ssn", "must be a valid social security number")
// ErrSemver is the error that returns in case of an invalid semver.
ErrSemver = validation.NewError("validation_is_semver", "must be a valid semantic version")
// ErrOrigin is the error that returns in case of an invalid origin.
ErrOrigin = validation.NewError("validation_is_origin", "must be a valid origin")
)

var (
Expand Down Expand Up @@ -235,6 +237,8 @@ var (
SSN = validation.NewStringRuleWithError(govalidator.IsSSN, ErrSSN)
// Semver validates if a string is a valid semantic version
Semver = validation.NewStringRuleWithError(govalidator.IsSemver, ErrSemver)
// Origin validates if a string is valid origin
Origin = validation.NewStringRuleWithError(isOrigin, ErrOrigin)
)

var (
Expand All @@ -247,6 +251,8 @@ var (
// Slightly modified: Removed 255 max length validation since Go regex does not
// support lookarounds. More info: https://stackoverflow.com/a/38935027
reDomain = regexp.MustCompile(`^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-z0-9])?\.)+(?:[a-zA-Z]{1,63}| xn--[a-z0-9]{1,59})$`)
// Origin https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
reOrigin = regexp.MustCompile(`^(https?):\/\/([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+(\.[a-zA-Z]{2,})?(:\d+)?$`)
)

func isISBN(value string) bool {
Expand Down Expand Up @@ -281,3 +287,11 @@ func isUTFNumeric(value string) bool {
}
return true
}

func isOrigin(value string) bool {
if len(value) > 255 {
return false
}

return reOrigin.MatchString(value)
}
2 changes: 2 additions & 0 deletions is/rules_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ func TestAll(t *testing.T) {
{"Int", Int, "100", "1.1", "must be an integer number"},
{"Float", Float, "1.1", "a.1", "must be a floating point number"},
{"VariableWidth", VariableWidth, "", "", ""},
{"Origin", Origin, "https://example.com", "example.com", "must be a valid origin"},
{"Origin", Origin, "https://127.0.0.1:8080", "ws://example.com", "must be a valid origin"},
}

for _, test := range tests {
Expand Down