feat(core): Allow dynamic credentials to be used via slack - #27177
Closed
phyllis-noester wants to merge 20 commits into
Closed
feat(core): Allow dynamic credentials to be used via slack#27177phyllis-noester wants to merge 20 commits into
phyllis-noester wants to merge 20 commits into
Conversation
Rename the dynamic credentials node and all related types, services, and helper functions from "Gate" to "Check" for clearer intent. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…gration-for-dynamic-credentials
Bundle ReportBundle size has no change ✅ Affected Assets, Files, and Routes:view changes for bundle: editor-ui-esmAssets Changed:
|
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
Contributor
Author
Contributor
|
@phyllis-noester I have started the AI code review. It will take a few minutes to complete. |
Contributor
There was a problem hiding this comment.
2 issues found across 25 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/slack-credential-resolver.ts">
<violation number="1" location="packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/slack-credential-resolver.ts:103">
P2: `cipher.decrypt(data)` is outside the try-catch block. If stored credential data is corrupted or was encrypted with a different key, the crypto layer will throw an opaque `ERR_OSSL_BAD_DECRYPT` instead of the intended `CredentialResolverDataNotFoundError`. Move the decrypt call inside the try-catch so callers get a consistent error.</violation>
<violation number="2" location="packages/cli/src/modules/dynamic-credentials.ee/credential-resolvers/slack-credential-resolver.ts:107">
P1: Custom agent: **Security Review**
Logging the `error` from `jsonParse` of decrypted credential plaintext risks leaking credential fragments into application logs. `JSON.parse` `SyntaxError` messages can include portions of the input string. Replace the raw error with a generic message or redact the error details.</violation>
</file>
Architecture diagram
sequenceDiagram
participant Slack as Slack API
participant Webhook as Webhook Node
participant Extractor as NEW: SlackSignatureExtractor
participant CheckNode as NEW: DynamicCredentialCheck Node
participant Proxy as NEW: CredentialCheckProxyService
participant Resolver as NEW: SlackCredentialResolver
participant Identifier as NEW: SlackSignatureIdentifier
participant DB as Dynamic Credential Storage
Note over Slack, Extractor: Webhook Context Establishment
Slack->>Webhook: POST Webhook Request (Signature + Body)
Webhook->>Extractor: execute(triggerItems)
Extractor->>Extractor: Extract identity (user_id/team_id)
Extractor->>Extractor: NEW: Mask signature headers in items
Extractor-->>Webhook: Return CredentialContext (Identity + Unverified Metadata)
Note over Webhook, DB: Workflow Execution Flow
Webhook->>CheckNode: Flow continues to check node
CheckNode->>Proxy: NEW: checkCredentialStatus(workflowId, context)
Proxy->>Resolver: getWorkflowStatus(workflowId, context)
Resolver->>Identifier: NEW: resolve(context, options)
Identifier->>Identifier: RE-VERIFY Slack Signature (HMAC-SHA256)
alt Signature Valid
Identifier-->>Resolver: Return derived Storage Key (user_id)
Resolver->>DB: getCredentialData(key, resolverId)
DB-->>Resolver: data / null
else Signature Invalid / Expired
Identifier-->>Resolver: Throw IdentifierValidationError
end
alt Credential Configured
Resolver-->>Proxy: status: 'configured'
Proxy-->>CheckNode: readyToExecute: true
CheckNode->>CheckNode: Route to 'Ready' output
else Credential Missing
Resolver-->>Proxy: status: 'missing'
Proxy->>Proxy: NEW: generateAuthorizationUrl()
Proxy-->>CheckNode: readyToExecute: false + authorizationUrl
CheckNode->>CheckNode: Route to 'Not Ready' output
end
Note over CheckNode, Proxy: Security & Redaction
alt Execution Finished
CheckNode->>CheckNode: CHANGED: apply redaction strategy
Note right of CheckNode: Wildcard [*] traverses array<br/>to hide authorizationUrl in logs
end
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
github-actions
Bot
deleted the
iam-211-spike-slack-integration-for-dynamic-credentials
branch
July 6, 2026 11:30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds Slack integration for the dynamic credentials system, enabling n8n to dynamically resolve
credentials from incoming Slack webhook requests.
x-slack-request-timestamp / x-slack-signature headers) and extracts identifying signatures (team_id,
user_id) from the payload.
(slackOAuth2Api), enabling the system to know which kind of credential to look up.
incoming request against stored Slack OAuth credentials accessible to the user.
Related Linear tickets, Github issues, and Community forum posts
https://linear.app/n8n/issue/IAM-211/spike-slack-integration-for-dynamic-credentials
Review / Merge checklist
Backport to Beta,Backport to Stable, orBackport to v1(if the PR is an urgent fix that needs to be backported)