mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-01 10:40:30 -05:00
Bumps [github.com/open-policy-agent/opa](https://github.com/open-policy-agent/opa) from 0.70.0 to 1.1.0. - [Release notes](https://github.com/open-policy-agent/opa/releases) - [Changelog](https://github.com/open-policy-agent/opa/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-policy-agent/opa/compare/v0.70.0...v1.1.0) --- updated-dependencies: - dependency-name: github.com/open-policy-agent/opa dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
135 lines
4.9 KiB
Go
135 lines
4.9 KiB
Go
// Copyright 2018 The OPA Authors. All rights reserved.
|
|
// Use of this source code is governed by an Apache2
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package bundle implements bundle loading.
|
|
package bundle
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/open-policy-agent/opa/ast"
|
|
v1 "github.com/open-policy-agent/opa/v1/bundle"
|
|
)
|
|
|
|
// Common file extensions and file names.
|
|
const (
|
|
RegoExt = v1.RegoExt
|
|
WasmFile = v1.WasmFile
|
|
PlanFile = v1.PlanFile
|
|
ManifestExt = v1.ManifestExt
|
|
SignaturesFile = v1.SignaturesFile
|
|
|
|
DefaultSizeLimitBytes = v1.DefaultSizeLimitBytes
|
|
DeltaBundleType = v1.DeltaBundleType
|
|
SnapshotBundleType = v1.SnapshotBundleType
|
|
)
|
|
|
|
// Bundle represents a loaded bundle. The bundle can contain data and policies.
|
|
type Bundle = v1.Bundle
|
|
|
|
// Raw contains raw bytes representing the bundle's content
|
|
type Raw = v1.Raw
|
|
|
|
// Patch contains an array of objects wherein each object represents the patch operation to be
|
|
// applied to the bundle data.
|
|
type Patch = v1.Patch
|
|
|
|
// PatchOperation models a single patch operation against a document.
|
|
type PatchOperation = v1.PatchOperation
|
|
|
|
// SignaturesConfig represents an array of JWTs that encapsulate the signatures for the bundle.
|
|
type SignaturesConfig = v1.SignaturesConfig
|
|
|
|
// DecodedSignature represents the decoded JWT payload.
|
|
type DecodedSignature = v1.DecodedSignature
|
|
|
|
// FileInfo contains the hashing algorithm used, resulting digest etc.
|
|
type FileInfo = v1.FileInfo
|
|
|
|
// NewFile returns a new FileInfo.
|
|
func NewFile(name, hash, alg string) FileInfo {
|
|
return v1.NewFile(name, hash, alg)
|
|
}
|
|
|
|
// Manifest represents the manifest from a bundle. The manifest may contain
|
|
// metadata such as the bundle revision.
|
|
type Manifest = v1.Manifest
|
|
|
|
// WasmResolver maps a wasm module to an entrypoint ref.
|
|
type WasmResolver = v1.WasmResolver
|
|
|
|
// ModuleFile represents a single module contained in a bundle.
|
|
type ModuleFile = v1.ModuleFile
|
|
|
|
// WasmModuleFile represents a single wasm module contained in a bundle.
|
|
type WasmModuleFile = v1.WasmModuleFile
|
|
|
|
// PlanModuleFile represents a single plan module contained in a bundle.
|
|
//
|
|
// NOTE(tsandall): currently the plans are just opaque binary blobs. In the
|
|
// future we could inject the entrypoints so that the plans could be executed
|
|
// inside of OPA proper like we do for Wasm modules.
|
|
type PlanModuleFile = v1.PlanModuleFile
|
|
|
|
// Reader contains the reader to load the bundle from.
|
|
type Reader = v1.Reader
|
|
|
|
// NewReader is deprecated. Use NewCustomReader instead.
|
|
func NewReader(r io.Reader) *Reader {
|
|
return v1.NewReader(r).WithRegoVersion(ast.DefaultRegoVersion)
|
|
}
|
|
|
|
// NewCustomReader returns a new Reader configured to use the
|
|
// specified DirectoryLoader.
|
|
func NewCustomReader(loader DirectoryLoader) *Reader {
|
|
return v1.NewCustomReader(loader).WithRegoVersion(ast.DefaultRegoVersion)
|
|
}
|
|
|
|
// Write is deprecated. Use NewWriter instead.
|
|
func Write(w io.Writer, bundle Bundle) error {
|
|
return v1.Write(w, bundle)
|
|
}
|
|
|
|
// Writer implements bundle serialization.
|
|
type Writer = v1.Writer
|
|
|
|
// NewWriter returns a bundle writer that writes to w.
|
|
func NewWriter(w io.Writer) *Writer {
|
|
return v1.NewWriter(w)
|
|
}
|
|
|
|
// Merge accepts a set of bundles and merges them into a single result bundle. If there are
|
|
// any conflicts during the merge (e.g., with roots) an error is returned. The result bundle
|
|
// will have an empty revision except in the special case where a single bundle is provided
|
|
// (and in that case the bundle is just returned unmodified.)
|
|
func Merge(bundles []*Bundle) (*Bundle, error) {
|
|
return MergeWithRegoVersion(bundles, ast.DefaultRegoVersion, false)
|
|
}
|
|
|
|
// MergeWithRegoVersion creates a merged bundle from the provided bundles, similar to Merge.
|
|
// If more than one bundle is provided, the rego version of the result bundle is set to the provided regoVersion.
|
|
// Any Rego files in a bundle of conflicting rego version will be marked in the result's manifest with the rego version
|
|
// of its original bundle. If the Rego file already had an overriding rego version, it will be preserved.
|
|
// If a single bundle is provided, it will retain any rego version information it already had. If it has none, the
|
|
// provided regoVersion will be applied to it.
|
|
// If usePath is true, per-file rego-versions will be calculated using the file's ModuleFile.Path; otherwise, the file's
|
|
// ModuleFile.URL will be used.
|
|
func MergeWithRegoVersion(bundles []*Bundle, regoVersion ast.RegoVersion, usePath bool) (*Bundle, error) {
|
|
if regoVersion == ast.RegoUndefined {
|
|
regoVersion = ast.DefaultRegoVersion
|
|
}
|
|
|
|
return v1.MergeWithRegoVersion(bundles, regoVersion, usePath)
|
|
}
|
|
|
|
// RootPathsOverlap takes in two bundle root paths and returns true if they overlap.
|
|
func RootPathsOverlap(pathA string, pathB string) bool {
|
|
return v1.RootPathsOverlap(pathA, pathB)
|
|
}
|
|
|
|
// RootPathsContain takes a set of bundle root paths and returns true if the path is contained.
|
|
func RootPathsContain(roots []string, path string) bool {
|
|
return v1.RootPathsContain(roots, path)
|
|
}
|