Skip to content

Commit 3fb2860

Browse files
vault: address auth handler review feedback
1 parent 43a9b9a commit 3fb2860

2 files changed

Lines changed: 25 additions & 3 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"chainlink": patch
3+
---
4+
5+
#changed
6+
7+
Move Vault node-side request authorization into the gateway handler and remove duplicated authorization from the Vault capability.

core/capabilities/vault/gw_handler.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,9 @@ func (h *GatewayHandler) HandleGatewayMessage(ctx context.Context, gatewayID str
170170

171171
func (h *GatewayHandler) authorizeAndPrefixRequest(ctx context.Context, req *jsonrpc.Request[json.RawMessage]) (string, error) {
172172
if h.requestAuthorizer == nil {
173-
return "", errors.New("request authorizer is nil")
173+
err := errors.New("request authorizer is nil")
174+
h.lggr.Errorw("failed to authorize gateway request", "method", req.Method, "requestID", req.ID, "error", err)
175+
return "", err
174176
}
175177

176178
originalRequestID := req.ID
@@ -183,15 +185,21 @@ func (h *GatewayHandler) authorizeAndPrefixRequest(ctx context.Context, req *jso
183185
authReq := *req
184186
authReq.ID = originalRequestID
185187

188+
h.lggr.Debugw("authorizing gateway request", "method", req.Method, "requestID", originalRequestID)
186189
isAuthorized, owner, err := h.requestAuthorizer.AuthorizeRequest(ctx, authReq)
187190
if !isAuthorized {
188-
return "", fmt.Errorf("request not authorized: %w", err)
191+
authErr := fmt.Errorf("request not authorized: %w", err)
192+
h.lggr.Errorw("gateway request authorization failed", "method", req.Method, "requestID", originalRequestID, "owner", owner, "error", authErr)
193+
return "", authErr
189194
}
190195
if incomingOwner != "" && normalizeOwner(incomingOwner) != normalizeOwner(owner) {
191-
return "", fmt.Errorf("request owner prefix %q does not match authorized owner %q", incomingOwner, owner)
196+
prefixErr := fmt.Errorf("request owner prefix %q does not match authorized owner %q", incomingOwner, owner)
197+
h.lggr.Errorw("gateway request owner prefix mismatch", "method", req.Method, "requestID", originalRequestID, "incomingOwner", incomingOwner, "authorizedOwner", owner, "error", prefixErr)
198+
return "", prefixErr
192199
}
193200

194201
req.ID = owner + vaulttypes.RequestIDSeparator + originalRequestID
202+
h.lggr.Debugw("authorized gateway request", "method", req.Method, "requestID", req.ID, "owner", owner)
195203
return owner, nil
196204
}
197205

@@ -204,10 +212,12 @@ func (h *GatewayHandler) handleSecretsCreate(ctx context.Context, gatewayID stri
204212
vaultCapRequest.RequestId = req.ID
205213
for idx, encryptedSecret := range vaultCapRequest.EncryptedSecrets {
206214
if encryptedSecret != nil && encryptedSecret.Id != nil && normalizeOwner(encryptedSecret.Id.Owner) != normalizeOwner(owner) {
215+
h.lggr.Debugw("create secrets request owner mismatch", "requestID", req.ID, "secretOwner", encryptedSecret.Id.Owner, "authorizedOwner", owner, "index", idx)
207216
return h.errorResponse(ctx, gatewayID, req, api.FatalError, fmt.Errorf("secret ID owner %q does not match authorized owner %q at index %d", encryptedSecret.Id.Owner, owner, idx))
208217
}
209218
}
210219

220+
h.lggr.Debugf("Processing authorized and normalized create secrets request [%s]", vaultCapRequest.String())
211221
vaultCapResponse, err := h.secretsService.CreateSecrets(ctx, &vaultCapRequest)
212222
if err != nil {
213223
return h.errorResponse(ctx, gatewayID, req, api.FatalError, err)
@@ -228,10 +238,12 @@ func (h *GatewayHandler) handleSecretsUpdate(ctx context.Context, gatewayID stri
228238
vaultCapRequest.RequestId = req.ID
229239
for idx, encryptedSecret := range vaultCapRequest.EncryptedSecrets {
230240
if encryptedSecret != nil && encryptedSecret.Id != nil && normalizeOwner(encryptedSecret.Id.Owner) != normalizeOwner(owner) {
241+
h.lggr.Debugw("update secrets request owner mismatch", "requestID", req.ID, "secretOwner", encryptedSecret.Id.Owner, "authorizedOwner", owner, "index", idx)
231242
return h.errorResponse(ctx, gatewayID, req, api.FatalError, fmt.Errorf("secret ID owner %q does not match authorized owner %q at index %d", encryptedSecret.Id.Owner, owner, idx))
232243
}
233244
}
234245

246+
h.lggr.Debugf("Processing authorized and normalized update secrets request [%s]", vaultCapRequest.String())
235247
vaultCapResponse, err := h.secretsService.UpdateSecrets(ctx, &vaultCapRequest)
236248
if err != nil {
237249
return h.errorResponse(ctx, gatewayID, req, api.FatalError, err)
@@ -297,10 +309,12 @@ func (h *GatewayHandler) handleSecretsDelete(ctx context.Context, gatewayID stri
297309
r.RequestId = req.ID
298310
for idx, secretID := range r.Ids {
299311
if secretID != nil && normalizeOwner(secretID.Owner) != normalizeOwner(owner) {
312+
h.lggr.Debugw("delete secrets request owner mismatch", "requestID", req.ID, "secretOwner", secretID.Owner, "authorizedOwner", owner, "index", idx)
300313
return h.errorResponse(ctx, gatewayID, req, api.FatalError, fmt.Errorf("secret ID owner %q does not match authorized owner %q at index %d", secretID.Owner, owner, idx))
301314
}
302315
}
303316

317+
h.lggr.Debugf("Processing authorized and normalized delete secrets request [%s]", r.String())
304318
resp, err := h.secretsService.DeleteSecrets(ctx, r)
305319
if err != nil {
306320
return h.errorResponse(ctx, gatewayID, req, api.HandlerError, fmt.Errorf("failed to delete secrets: %w", err))
@@ -327,6 +341,7 @@ func (h *GatewayHandler) handleSecretsList(ctx context.Context, gatewayID string
327341
r.RequestId = req.ID
328342
r.Owner = owner
329343

344+
h.lggr.Debugf("Processing authorized and normalized list secrets request [%s]", r.String())
330345
resp, err := h.secretsService.ListSecretIdentifiers(ctx, r)
331346
if err != nil {
332347
return h.errorResponse(ctx, gatewayID, req, api.HandlerError, fmt.Errorf("failed to list secret identifiers: %w", err))

0 commit comments

Comments
 (0)