diff --git a/internal/validator/validator.go b/internal/validator/validator.go index 3a161738..b71daf0a 100644 --- a/internal/validator/validator.go +++ b/internal/validator/validator.go @@ -21,6 +21,7 @@ const ( REGEX_RFC1123_DNS_LABEL = "[a-z0-9]([-a-z0-9]*[a-z0-9])?" REGEX_RESOURCE_NAME = `^` + REGEX_RFC1123_DNS_LABEL + "$" REGEX_RFC1123_SUBDOMAIN = `^` + REGEX_RFC1123_DNS_LABEL + `(\.` + REGEX_RFC1123_DNS_LABEL + `)*$` + REGEX_TEMPLATE_KIND = `^[A-Z][a-zA-Z0-9]+$` ) func NewValidator() (*validator.Validate, *ut.UniversalTranslator) { @@ -42,6 +43,7 @@ func NewValidator() (*validator.Validate, *ut.UniversalTranslator) { _ = v.RegisterValidation("resourcename", validateResourceName) _ = v.RegisterValidation("matchnamespace", validateMatchNamespace) _ = v.RegisterValidation("matchkinds", validateMatchKinds) + _ = v.RegisterValidation("templatekind", validateTemplateKind) // register custom error _ = v.RegisterTranslation("required", trans, func(ut ut.Translator) error { @@ -125,6 +127,15 @@ func validateMatchKinds(fl validator.FieldLevel) bool { return true } +func validateTemplateKind(fl validator.FieldLevel) bool { + if fl.Field().String() == "" { + return false + } + + r, _ := regexp.Compile(REGEX_TEMPLATE_KIND) + return r.MatchString(fl.Field().String()) +} + func validateMatchKindAPIGroup(apigroups []string) bool { if len(apigroups) == 0 { return true diff --git a/pkg/domain/admin/policy-template.go b/pkg/domain/admin/policy-template.go index 9ce9e483..2da72e16 100644 --- a/pkg/domain/admin/policy-template.go +++ b/pkg/domain/admin/policy-template.go @@ -45,7 +45,7 @@ type SimplePolicyTemplateResponse struct { type CreatePolicyTemplateRequest struct { TemplateName string `json:"templateName" validate:"required,name" example:"필수 Label 검사"` - Kind string `json:"kind" example:"K8sRequiredLabels" validate:"required,pascalcase"` + Kind string `json:"kind" example:"K8sRequiredLabels" validate:"required,templatekind"` Severity string `json:"severity" validate:"required,oneof=low medium high" enums:"low,medium,high" example:"medium"` Deprecated bool `json:"deprecated" example:"false"` Description string `json:"description,omitempty" example:"이 정책은 ..."` diff --git a/pkg/domain/policy-template.go b/pkg/domain/policy-template.go index 835a1225..7f4919c7 100644 --- a/pkg/domain/policy-template.go +++ b/pkg/domain/policy-template.go @@ -57,7 +57,7 @@ type SimplePolicyTemplateResponse struct { type CreatePolicyTemplateRequest struct { TemplateName string `json:"templateName" validate:"required,name" example:"필수 Label 검사"` - Kind string `json:"kind" example:"K8sRequiredLabels" validate:"required,pascalcase"` + Kind string `json:"kind" example:"K8sRequiredLabels" validate:"required,templatekind"` Severity string `json:"severity" validate:"required,oneof=low medium high" enums:"low,medium,high" example:"medium"` Deprecated bool `json:"deprecated" example:"false"` Description string `json:"description,omitempty" example:"이 정책은 ..."`