diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..050501d90 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "pkg/validator/data/disposable-email-domains"] + path = pkg/validator/data/disposable-email-domains + url = git@github.com:disposable-email-domains/disposable-email-domains.git diff --git a/pkg/trust/trust_center_access_service.go b/pkg/trust/trust_center_access_service.go index ddf55d7d1..e3ca66eef 100644 --- a/pkg/trust/trust_center_access_service.go +++ b/pkg/trust/trust_center_access_service.go @@ -31,6 +31,7 @@ import ( "go.probo.inc/probo/pkg/gid" "go.probo.inc/probo/pkg/probo" "go.probo.inc/probo/pkg/statelesstoken" + "go.probo.inc/probo/pkg/validator" ) type ( @@ -54,6 +55,14 @@ const ( TrustCenterAccessURLFormat = "https://%s/organizations/%s/trust-center/access" ) +func (tcar *TrustCenterAccessRequest) Validate() error { + v := validator.New() + + v.Check(tcar.Email, "email", validator.NotOneOfSlice([]string{})) + + return nil +} + func (s TrustCenterAccessService) ValidateToken( ctx context.Context, trustCenterID gid.GID, diff --git a/pkg/validator/data/disposable-email-domains b/pkg/validator/data/disposable-email-domains new file mode 160000 index 000000000..e38ace196 --- /dev/null +++ b/pkg/validator/data/disposable-email-domains @@ -0,0 +1 @@ +Subproject commit e38ace196d9d5b99ebd8c386f0f06ebe0b0b5c8a diff --git a/pkg/validator/validator_email.go b/pkg/validator/validator_email.go new file mode 100644 index 000000000..47f2da9cc --- /dev/null +++ b/pkg/validator/validator_email.go @@ -0,0 +1 @@ +package validator diff --git a/pkg/validator/validator_string.go b/pkg/validator/validator_string.go index ccc6d7d70..b9b4fc339 100644 --- a/pkg/validator/validator_string.go +++ b/pkg/validator/validator_string.go @@ -225,6 +225,25 @@ func OneOfSlice[T any](allowed []T) ValidatorFunc { } } +// NotOneOfSlice validates that a value is not one of the values in the slice. +// Accepts a slice of any type. Compares by value first, then by string representation. +func NotOneOfSlice[T any](disallowed []T) ValidatorFunc { + oneOfSlice := OneOfSlice(disallowed) + + return func(value any) *ValidationError { + err := oneOfSlice(disallowed) + + if err == nil { + return newValidationError( + ErrorCodeInvalidEnum, + "must not be one of the disallowed values", + ) + } + + return nil + } +} + // OneOf validates that a value is one of the allowed values. // Accepts strings or types that implement fmt.Stringer as variadic arguments. func OneOf(allowed ...any) ValidatorFunc {