@@ -35,8 +35,9 @@ const (
3535 validateAction = "validate"
3636 groupsEndpoint = "groups"
3737
38- digestParam = "digest"
39- orgNameParam = "organization_name"
38+ digestParam = "digest"
39+ orgNameParam = "organization_name"
40+ organizationHeader = "Chainloop-Organization"
4041)
4142
4243// PolicyProvider represents an external policy provider
@@ -72,12 +73,17 @@ type PolicyReference struct {
7273 Digest string
7374}
7475
76+ type ProviderAuthOpts struct {
77+ Token string
78+ OrgName string
79+ }
80+
7581var ErrNotFound = fmt .Errorf ("policy not found" )
7682
7783// Resolve calls the remote provider for retrieving a policy
78- func (p * PolicyProvider ) Resolve (policyName , orgName , token string ) (* schemaapi.Policy , * PolicyReference , error ) {
79- if policyName == "" || token == "" {
80- return nil , nil , fmt .Errorf ("both policyname and token are mandatory" )
84+ func (p * PolicyProvider ) Resolve (policyName , policyOrgName string , authOpts ProviderAuthOpts ) (* schemaapi.Policy , * PolicyReference , error ) {
85+ if policyName == "" || authOpts . Token == "" {
86+ return nil , nil , fmt .Errorf ("both policyname and auth opts are mandatory" )
8187 }
8288
8389 // the policy name might include a digest in the form of <name>@sha256:<digest>
@@ -94,7 +100,7 @@ func (p *PolicyProvider) Resolve(policyName, orgName, token string) (*schemaapi.
94100 }
95101 // we want to override the orgName with the one in the response
96102 // since we might have resolved it implicitly
97- providerDigest , orgName , err := p .queryProvider (url , digest , orgName , token , & policy )
103+ providerDigest , orgName , err := p .queryProvider (url , digest , policyOrgName , authOpts , & policy )
98104 if err != nil {
99105 return nil , nil , fmt .Errorf ("failed to resolve policy: %w" , err )
100106 }
@@ -170,8 +176,8 @@ func (p *PolicyProvider) ValidateAttachment(att *schemaapi.PolicyAttachment, tok
170176}
171177
172178// ResolveGroup calls remote provider for retrieving a policy group definition
173- func (p * PolicyProvider ) ResolveGroup (groupName , orgName , token string ) (* schemaapi.PolicyGroup , * PolicyReference , error ) {
174- if groupName == "" || token == "" {
179+ func (p * PolicyProvider ) ResolveGroup (groupName , groupOrgName string , authOpts ProviderAuthOpts ) (* schemaapi.PolicyGroup , * PolicyReference , error ) {
180+ if groupName == "" || authOpts . Token == "" {
175181 return nil , nil , fmt .Errorf ("both policyname and token are mandatory" )
176182 }
177183
@@ -189,7 +195,7 @@ func (p *PolicyProvider) ResolveGroup(groupName, orgName, token string) (*schema
189195 }
190196 // we want to override the orgName with the one in the response
191197 // since we might have resolved it implicitly
192- providerDigest , orgName , err := p .queryProvider (url , digest , orgName , token , & group )
198+ providerDigest , orgName , err := p .queryProvider (url , digest , groupOrgName , authOpts , & group )
193199 if err != nil {
194200 return nil , nil , fmt .Errorf ("failed to resolve group: %w" , err )
195201 }
@@ -198,7 +204,7 @@ func (p *PolicyProvider) ResolveGroup(groupName, orgName, token string) (*schema
198204}
199205
200206// returns digest, orgname, error
201- func (p * PolicyProvider ) queryProvider (url * url.URL , digest , orgName , token string , out proto.Message ) (string , string , error ) {
207+ func (p * PolicyProvider ) queryProvider (url * url.URL , digest , orgName string , authOpts ProviderAuthOpts , out proto.Message ) (string , string , error ) {
202208 query := url .Query ()
203209 if digest != "" {
204210 query .Set (digestParam , digest )
@@ -215,7 +221,10 @@ func (p *PolicyProvider) queryProvider(url *url.URL, digest, orgName, token stri
215221 return "" , "" , fmt .Errorf ("error creating policy request: %w" , err )
216222 }
217223
218- req .Header .Set ("Authorization" , fmt .Sprintf ("Bearer %s" , token ))
224+ req .Header .Set ("Authorization" , fmt .Sprintf ("Bearer %s" , authOpts .Token ))
225+ if authOpts .OrgName != "" {
226+ req .Header .Set (organizationHeader , authOpts .OrgName )
227+ }
219228
220229 // make the request
221230 resp , err := http .DefaultClient .Do (req )
0 commit comments