1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-10 01:46:55 +00:00
kyverno/pkg/engine/context/loaders/apicall.go
Vishal Choudhary 5fe16cd487
feat: add checks for max response size in API Call (#8957)
* feat: add checks for max response size in API Call GET request

Signed-off-by: Vishal Choudhary <vishal.choudhary@nirmata.com>

* fix: tests

Signed-off-by: Vishal Choudhary <vishal.choudhary@nirmata.com>

* fix: added changes suggested by jim

Signed-off-by: Vishal Choudhary <vishal.choudhary@nirmata.com>

* cleanup

Signed-off-by: Vishal Choudhary <vishal.choudhary@nirmata.com>

---------

Signed-off-by: Vishal Choudhary <vishal.choudhary@nirmata.com>
Co-authored-by: Jim Bugwadia <jim@nirmata.com>
2023-11-21 10:01:51 +00:00

65 lines
1.6 KiB
Go

package loaders
import (
"context"
"fmt"
"github.com/go-logr/logr"
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
engineapi "github.com/kyverno/kyverno/pkg/engine/api"
"github.com/kyverno/kyverno/pkg/engine/apicall"
enginecontext "github.com/kyverno/kyverno/pkg/engine/context"
"github.com/kyverno/kyverno/pkg/engine/jmespath"
)
type apiLoader struct {
ctx context.Context //nolint:containedctx
logger logr.Logger
entry kyvernov1.ContextEntry
enginectx enginecontext.Interface
jp jmespath.Interface
client engineapi.RawClient
config apicall.APICallConfiguration
data []byte
}
func NewAPILoader(
ctx context.Context,
logger logr.Logger,
entry kyvernov1.ContextEntry,
enginectx enginecontext.Interface,
jp jmespath.Interface,
client engineapi.RawClient,
apiCallConfig apicall.APICallConfiguration,
) enginecontext.Loader {
return &apiLoader{
ctx: ctx,
logger: logger,
entry: entry,
enginectx: enginectx,
jp: jp,
client: client,
config: apiCallConfig,
}
}
func (a *apiLoader) HasLoaded() bool {
return a.data != nil
}
func (a *apiLoader) LoadData() error {
executor, err := apicall.New(a.logger, a.jp, a.entry, a.enginectx, a.client, a.config)
if err != nil {
return fmt.Errorf("failed to initiaize APICal: %w", err)
}
if a.data == nil {
var err error
if a.data, err = executor.Fetch(a.ctx); err != nil {
return fmt.Errorf("failed to fetch data for APICall: %w", err)
}
}
if _, err := executor.Store(a.data); err != nil {
return fmt.Errorf("failed to store data for APICall: %w", err)
}
return nil
}