@@ -16,7 +16,6 @@ import (
1616 vaultcommon "github.com/smartcontractkit/chainlink-common/pkg/capabilities/actions/vault"
1717 "github.com/smartcontractkit/chainlink-common/pkg/capabilities/consensus/requests"
1818 "github.com/smartcontractkit/chainlink-common/pkg/logger"
19- "github.com/smartcontractkit/chainlink-common/pkg/services/orgresolver"
2019 "github.com/smartcontractkit/chainlink-common/pkg/settings/cresettings"
2120 "github.com/smartcontractkit/chainlink-common/pkg/settings/limits"
2221 "github.com/smartcontractkit/chainlink-common/pkg/types/core"
@@ -32,7 +31,6 @@ type Capability struct {
3231 handler * requests.Handler [* vaulttypes.Request , * vaulttypes.Response ]
3332 capabilitiesRegistry core.CapabilitiesRegistry
3433 publicKey * LazyPublicKey
35- linker * OrgIDToWorkflowOwnerLinker
3634 lifecycle * RequestLifecycleTracker
3735 * RequestValidator
3836}
@@ -89,10 +87,6 @@ func (s *Capability) Close() error {
8987 err = errors .Join (err , fmt .Errorf ("error closing identifier namespace length limiter: %w" , lerr ))
9088 }
9189
92- if lerr := s .linker .Close (); lerr != nil {
93- err = errors .Join (err , fmt .Errorf ("error closing org_id linker: %w" , lerr ))
94- }
95-
9690 return err
9791}
9892
@@ -155,11 +149,8 @@ func (s *Capability) Execute(ctx context.Context, request capabilities.Capabilit
155149 }
156150 id := fmt .Sprintf ("%s::%s::%s" , md .WorkflowID , phaseOrExecution , md .ReferenceID )
157151
158- // When VaultOrgIdAsSecretOwnerEnabled is disabled, request.WorkflowOwner is
159- // not populated, so it has to be fetched from the first request's secret owner.
160- if r .WorkflowOwner == "" && len (r .Requests ) > 0 && r .Requests [0 ] != nil && r .Requests [0 ].Id != nil {
161- r .WorkflowOwner = r .Requests [0 ].Id .Owner
162- }
152+ // Workflow DON reads populate secret identifiers explicitly; OCR paths do not rely on legacy
153+ // top-level protobuf identity fields.
163154
164155 resp , err := s .handleRequest (ctx , id , r )
165156 if err != nil {
@@ -186,17 +177,10 @@ func (s *Capability) Execute(ctx context.Context, request capabilities.Capabilit
186177
187178func (s * Capability ) CreateSecrets (ctx context.Context , request * vaultcommon.CreateSecretsRequest ) (* vaulttypes.Response , error ) {
188179 s .lggr .Debugw ("received create secrets request" , "request" , request .String ())
189- resolvedIdentity , err := s .resolveRequestIdentity (ctx , request .OrgId , request .WorkflowOwner )
190- if err != nil {
180+ if err := validateEncryptedSecretsUniformOwners (request .EncryptedSecrets ); err != nil {
191181 return nil , err
192182 }
193- request .OrgId = resolvedIdentity .OrgID
194- request .WorkflowOwner = resolvedIdentity .WorkflowOwner
195- if ownerErr := validateEncryptedSecretOwnersMatchResolvedIdentity (request .EncryptedSecrets , resolvedIdentity ); ownerErr != nil {
196- s .lggr .Debugw ("failed identity owner checks" , "requestID" , request .RequestId , "err" , ownerErr )
197- return nil , ownerErr
198- }
199- err = s .ValidateCreateSecretsRequest (ctx , s .publicKey .Get (), request , false )
183+ err := s .ValidateCreateSecretsRequest (ctx , s .publicKey .Get (), request , false )
200184 if err != nil {
201185 s .lggr .Debugw ("failed validation checks" , "requestID" , request .RequestId , "err" , err )
202186 return nil , err
@@ -206,17 +190,10 @@ func (s *Capability) CreateSecrets(ctx context.Context, request *vaultcommon.Cre
206190
207191func (s * Capability ) UpdateSecrets (ctx context.Context , request * vaultcommon.UpdateSecretsRequest ) (* vaulttypes.Response , error ) {
208192 s .lggr .Debugw ("received update secrets request" , "request" , request .String ())
209- resolvedIdentity , err := s .resolveRequestIdentity (ctx , request .OrgId , request .WorkflowOwner )
210- if err != nil {
193+ if err := validateEncryptedSecretsUniformOwners (request .EncryptedSecrets ); err != nil {
211194 return nil , err
212195 }
213- request .OrgId = resolvedIdentity .OrgID
214- request .WorkflowOwner = resolvedIdentity .WorkflowOwner
215- if ownerErr := validateEncryptedSecretOwnersMatchResolvedIdentity (request .EncryptedSecrets , resolvedIdentity ); ownerErr != nil {
216- s .lggr .Debugw ("failed identity owner checks" , "requestID" , request .RequestId , "err" , ownerErr )
217- return nil , ownerErr
218- }
219- err = s .ValidateUpdateSecretsRequest (ctx , s .publicKey .Get (), request , false )
196+ err := s .ValidateUpdateSecretsRequest (ctx , s .publicKey .Get (), request , false )
220197 if err != nil {
221198 s .lggr .Debugw ("failed validation checks" , "requestID" , request .RequestId , "err" , err )
222199 return nil , err
@@ -231,14 +208,8 @@ func (s *Capability) DeleteSecrets(ctx context.Context, request *vaultcommon.Del
231208 s .lggr .Debugw ("failed validation checks" , "requestID" , request .RequestId , "request" , request .String (), "err" , err )
232209 return nil , err
233210 }
234- resolvedIdentity , err := s .resolveRequestIdentity (ctx , request .OrgId , request .WorkflowOwner )
235- if err != nil {
236- return nil , err
237- }
238- request .OrgId = resolvedIdentity .OrgID
239- request .WorkflowOwner = resolvedIdentity .WorkflowOwner
240- if err := validateSecretIdentifierOwnersMatchResolvedIdentity (request .Ids , resolvedIdentity ); err != nil {
241- s .lggr .Debugw ("failed identity owner checks" , "requestID" , request .RequestId , "request" , request .String (), "err" , err )
211+ if err := validateSecretIdentifiersUniformOwners (request .Ids ); err != nil {
212+ s .lggr .Debugw ("failed uniform owner checks" , "requestID" , request .RequestId , "request" , request .String (), "err" , err )
242213 return nil , err
243214 }
244215 return s .handleRequest (ctx , request .RequestId , request )
@@ -262,16 +233,6 @@ func (s *Capability) ListSecretIdentifiers(ctx context.Context, request *vaultco
262233 s .lggr .Debugw ("failed validation checks" , "requestID" , request .RequestId , "request" , request .String (), "err" , err )
263234 return nil , err
264235 }
265- resolvedIdentity , err := s .resolveRequestIdentity (ctx , request .OrgId , request .WorkflowOwner )
266- if err != nil {
267- return nil , err
268- }
269- request .OrgId = resolvedIdentity .OrgID
270- request .WorkflowOwner = resolvedIdentity .WorkflowOwner
271- if err := validateOwnerMatchesResolvedIdentity ("owner" , request .Owner , resolvedIdentity ); err != nil {
272- s .lggr .Debugw ("failed identity owner checks" , "requestID" , request .RequestId , "request" , request .String (), "err" , err )
273- return nil , err
274- }
275236 return s .handleRequest (ctx , request .RequestId , request )
276237}
277238
@@ -300,47 +261,40 @@ func normalizeOwner(owner string) string {
300261 return strings .ToLower (strings .TrimPrefix (owner , "0x" ))
301262}
302263
303- func validateEncryptedSecretOwnersMatchResolvedIdentity (encryptedSecrets []* vaultcommon.EncryptedSecret , resolvedIdentity LinkedVaultRequestIdentity ) error {
304- for idx , encryptedSecret := range encryptedSecrets {
305- if encryptedSecret == nil || encryptedSecret .Id == nil {
264+ func validateEncryptedSecretsUniformOwners (encryptedSecrets []* vaultcommon.EncryptedSecret ) error {
265+ var owner string
266+ for idx , enc := range encryptedSecrets {
267+ if enc == nil || enc .Id == nil {
268+ continue
269+ }
270+ if owner == "" {
271+ owner = enc .Id .Owner
306272 continue
307273 }
308- if err := validateOwnerMatchesResolvedIdentity ( fmt . Sprintf ( "encrypted secret owner at index %d" , idx ), encryptedSecret . Id .Owner , resolvedIdentity ); err != nil {
309- return err
274+ if normalizeOwner ( enc . Id .Owner ) != normalizeOwner ( owner ) {
275+ return fmt . Errorf ( "encrypted secret owner at index %d %q does not match batch owner %q" , idx , enc . Id . Owner , owner )
310276 }
311277 }
312-
313278 return nil
314279}
315280
316- func validateSecretIdentifierOwnersMatchResolvedIdentity (ids []* vaultcommon.SecretIdentifier , resolvedIdentity LinkedVaultRequestIdentity ) error {
281+ func validateSecretIdentifiersUniformOwners (ids []* vaultcommon.SecretIdentifier ) error {
282+ var owner string
317283 for idx , id := range ids {
318284 if id == nil {
319285 continue
320286 }
321- if err := validateOwnerMatchesResolvedIdentity (fmt .Sprintf ("secret identifier owner at index %d" , idx ), id .Owner , resolvedIdentity ); err != nil {
322- return err
287+ if owner == "" {
288+ owner = id .Owner
289+ continue
290+ }
291+ if normalizeOwner (id .Owner ) != normalizeOwner (owner ) {
292+ return fmt .Errorf ("secret identifier owner at index %d %q does not match batch owner %q" , idx , id .Owner , owner )
323293 }
324294 }
325-
326295 return nil
327296}
328297
329- func validateOwnerMatchesResolvedIdentity (field string , owner string , resolvedIdentity LinkedVaultRequestIdentity ) error {
330- if resolvedIdentity .WorkflowOwner == "" && resolvedIdentity .OrgID == "" {
331- return nil
332- }
333-
334- if resolvedIdentity .WorkflowOwner != "" && normalizeOwner (owner ) == normalizeOwner (resolvedIdentity .WorkflowOwner ) {
335- return nil
336- }
337- if resolvedIdentity .OrgID != "" && owner == resolvedIdentity .OrgID {
338- return nil
339- }
340-
341- return fmt .Errorf ("%s %q must match resolved workflow owner %q or org_id %q" , field , owner , resolvedIdentity .WorkflowOwner , resolvedIdentity .OrgID )
342- }
343-
344298func (s * Capability ) handleRequest (ctx context.Context , requestID string , request proto.Message ) (* vaulttypes.Response , error ) {
345299 s .lifecycle .RecordReceived (ctx , requestID , s .clock .Now ())
346300 respCh := make (chan * vaulttypes.Response , 1 )
@@ -370,27 +324,13 @@ func (s *Capability) handleRequest(ctx context.Context, requestID string, reques
370324 }
371325}
372326
373- // resolveRequestIdentity validates and normalizes the org/workflow-owner pair that the vault plugin consumes.
374- func (s * Capability ) resolveRequestIdentity (ctx context.Context , orgID string , workflowOwner string ) (LinkedVaultRequestIdentity , error ) {
375- s .lggr .Debugw ("resolving request identity" , "orgID" , orgID , "workflowOwner" , workflowOwner )
376- linked , err := s .linker .Link (ctx , orgID , workflowOwner )
377- if err != nil {
378- s .lggr .Errorw ("failed to resolve request identity" , "orgID" , orgID , "workflowOwner" , workflowOwner , "err" , err )
379- return LinkedVaultRequestIdentity {}, err
380- }
381- s .lggr .Debugw ("resolved request identity" , "orgID" , linked .OrgID , "workflowOwner" , linked .WorkflowOwner )
382-
383- return linked , nil
384- }
385-
386327func NewCapability (
387328 lggr logger.Logger ,
388329 clock clockwork.Clock ,
389330 expiresAfter time.Duration ,
390331 handler * requests.Handler [* vaulttypes.Request , * vaulttypes.Response ],
391332 capabilitiesRegistry core.CapabilitiesRegistry ,
392333 publicKey * LazyPublicKey ,
393- orgResolver orgresolver.OrgResolver ,
394334 limitsFactory limits.Factory ,
395335 lifecycle * RequestLifecycleTracker ,
396336) (* Capability , error ) {
@@ -401,10 +341,6 @@ func NewCapability(
401341 if err != nil {
402342 return nil , fmt .Errorf ("could not create request batch size limiter: %w" , err )
403343 }
404- linker , err := NewOrgIDToWorkflowOwnerLinker (orgResolver , limitsFactory )
405- if err != nil {
406- return nil , err
407- }
408344 ciphertextLimiter , err := limits .MakeUpperBoundLimiter (limitsFactory , cresettings .Default .VaultCiphertextSizeLimit )
409345 if err != nil {
410346 return nil , fmt .Errorf ("could not create ciphertext size limiter: %w" , err )
@@ -428,7 +364,6 @@ func NewCapability(
428364 handler : handler ,
429365 capabilitiesRegistry : capabilitiesRegistry ,
430366 publicKey : publicKey ,
431- linker : linker ,
432367 lifecycle : lifecycle ,
433368 RequestValidator : NewRequestValidator (limiter , ciphertextLimiter , idKeyLengthLimiter , idOwnerLengthLimiter , idNamespaceLengthLimiter ),
434369 }, nil
0 commit comments