mirror of
https://github.com/kyverno/kyverno.git
synced 2024-12-15 17:51:20 +00:00
9387d20443
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
54 lines
1.8 KiB
Go
54 lines
1.8 KiB
Go
package adapters
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
|
|
"github.com/kyverno/kyverno/pkg/auth"
|
|
"github.com/kyverno/kyverno/pkg/clients/dclient"
|
|
engineapi "github.com/kyverno/kyverno/pkg/engine/api"
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
)
|
|
|
|
type dclientAdapter struct {
|
|
client dclient.Interface
|
|
}
|
|
|
|
func Client(client dclient.Interface) engineapi.Client {
|
|
return &dclientAdapter{client}
|
|
}
|
|
|
|
func (a *dclientAdapter) RawAbsPath(ctx context.Context, path, method string, dataReader io.Reader) ([]byte, error) {
|
|
return a.client.RawAbsPath(ctx, path, method, dataReader)
|
|
}
|
|
|
|
func (a *dclientAdapter) GetResources(ctx context.Context, group, version, kind, subresource, namespace, name string) ([]engineapi.Resource, error) {
|
|
resources, err := dclient.GetResources(ctx, a.client, group, version, kind, subresource, namespace, name)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var result []engineapi.Resource
|
|
for _, resource := range resources {
|
|
result = append(result, engineapi.Resource{
|
|
Group: resource.Group,
|
|
Version: resource.Version,
|
|
Resource: resource.Resource,
|
|
SubResource: resource.SubResource,
|
|
Unstructured: resource.Unstructured,
|
|
})
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (a *dclientAdapter) GetResource(ctx context.Context, apiVersion, kind, namespace, name string, subresources ...string) (*unstructured.Unstructured, error) {
|
|
return a.client.GetResource(ctx, apiVersion, kind, namespace, name, subresources...)
|
|
}
|
|
|
|
func (a *dclientAdapter) CanI(ctx context.Context, kind, namespace, verb, subresource, user string) (bool, error) {
|
|
canI := auth.NewCanI(a.client.Discovery(), a.client.GetKubeClient().AuthorizationV1().SubjectAccessReviews(), kind, namespace, verb, subresource, user)
|
|
ok, err := canI.RunAccessCheck(ctx)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return ok, nil
|
|
}
|