getGroupLoader creates a suitable group loader for a group attachment
(attachment *v1.PolicyGroupAttachment, opts *LoadPolicyGroupOptions)
| 260 | |
| 261 | // getGroupLoader creates a suitable group loader for a group attachment |
| 262 | func 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 |
| 293 | func (pgv *PolicyGroupVerifier) requiredPoliciesForMaterial(ctx context.Context, material *api.Attestation_Material, group *v1.PolicyGroup, groupArgs map[string]string) ([]*v1.PolicyAttachment, error) { |