/
composite.go
36 lines (29 loc) · 1.07 KB
/
composite.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Copyright 2024 The Carvel Authors.
// SPDX-License-Identifier: Apache-2.0
package permissions
import (
"context"
ctlres "carvel.dev/kapp/pkg/kapp/resources"
"k8s.io/apimachinery/pkg/runtime/schema"
)
var _ Validator = (*CompositeValidator)(nil)
// CompositeValidator implements Validator and is used
// for composing multiple validators into a single validator
// that can handle specifying unique validators for different
// GroupVersionKinds
type CompositeValidator struct {
validators map[schema.GroupVersionKind]Validator
defaultValidator Validator
}
func NewCompositeValidator(defaultValidator Validator, validators map[schema.GroupVersionKind]Validator) *CompositeValidator {
return &CompositeValidator{
validators: validators,
defaultValidator: defaultValidator,
}
}
func (cv *CompositeValidator) Validate(ctx context.Context, res ctlres.Resource, verb string) error {
if validator, ok := cv.validators[res.GroupVersion().WithKind(res.Kind())]; ok {
return validator.Validate(ctx, res, verb)
}
return cv.defaultValidator.Validate(ctx, res, verb)
}