MCPcopy Create free account
hub / github.com/chainloop-dev/chainloop / getGroupLoader

Function getGroupLoader

pkg/policies/policy_groups.go:262–290  ·  view source on GitHub ↗

getGroupLoader creates a suitable group loader for a group attachment

(attachment *v1.PolicyGroupAttachment, opts *LoadPolicyGroupOptions)

Source from the content-addressed store, hash-verified

260
261// getGroupLoader creates a suitable group loader for a group attachment
262func getGroupLoader(attachment *v1.PolicyGroupAttachment, opts *LoadPolicyGroupOptions) (GroupLoader, error) {
263 ref := attachment.GetRef()
264
265 if ref == "" {
266 return nil, errors.New("policy group must be referenced in the attachment")
267 }
268
269 var loader GroupLoader
270 scheme, _ := RefParts(ref)
271 switch scheme {
272 // No scheme means chainloop loader
273 case chainloopScheme, "":
274 groupCache := opts.GroupCache
275 if groupCache == nil {
276 groupCache, _ = cache.New[*groupWithReference](cache.WithTTL(defaultPolicyCacheTTL))
277 }
278 loader = NewChainloopGroupLoader(opts.Client, groupCache)
279 case fileScheme:
280 loader = new(FileGroupLoader)
281 case httpsScheme, httpScheme:
282 loader = new(HTTPSGroupLoader)
283 default:
284 return nil, fmt.Errorf("policy scheme not supported: %q", scheme)
285 }
286
287 opts.Logger.Debug().Msgf("loading policy group %q using %T", ref, loader)
288
289 return loader, nil
290}
291
292// Gets the policies that can be applied to a material within a group
293func (pgv *PolicyGroupVerifier) requiredPoliciesForMaterial(ctx context.Context, material *api.Attestation_Material, group *v1.PolicyGroup, groupArgs map[string]string) ([]*v1.PolicyAttachment, error) {

Callers 2

LoadPolicyGroupFunction · 0.85
TestGroupLoaderMethod · 0.85

Calls 5

WithTTLFunction · 0.92
RefPartsFunction · 0.85
NewChainloopGroupLoaderFunction · 0.85
GetRefMethod · 0.45
DebugMethod · 0.45

Tested by 1

TestGroupLoaderMethod · 0.68