fix(workflows): harden workflow API auth routes#3559
fix(workflows): harden workflow API auth routes#3559PlaneInABottle wants to merge 8 commits intosimstudioai:stagingfrom
Conversation
PR SummaryMedium Risk Overview Extends Adds/updates Vitest route tests to assert API-key callers can perform deploy/undeploy/activate/revert/delete where allowed and that public-API restrictions and audit actor IDs use the resolved hybrid Written by Cursor Bugbot for commit a264ee9. This will update automatically on new commits. Configure here. |
|
Someone is attempting to deploy a commit to the Sim Team on Vercel. A member of the Team first needs to authorize it. |
Greptile SummaryThis PR hardens the workflow API auth layer by introducing a shared Key observations:
Confidence Score: 3/5
Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Incoming Request] --> B{Auth Type?}
B -->|Bearer JWT| C[verifyInternalToken\ndeployed/route only]
C -->|valid| D[Skip validateWorkflowAccess\nload deployed state directly]
C -->|invalid| E[validateWorkflowAccess]
B -->|Session / API Key / Internal Secret| E
E --> F[getWorkflowById]
F -->|not found| G[404 Workflow not found]
F -->|found, no workspaceId| H[403 Personal workflow deprecated]
F -->|requireDeployment: false| I[checkHybridAuth]
I -->|fail / no userId| J[401 Unauthorized]
I -->|success + userId| K[authorizeWorkflowByWorkspacePermission\naction: read / write / admin]
K -->|denied| L[403 / 404 Access denied]
K -->|allowed| M[Return workflow + auth]
F -->|requireDeployment: true| N{isDeployed?}
N -->|false| O[403 Workflow not deployed]
N -->|true| P{Internal Secret header?}
P -->|valid + allowInternalSecret| Q[Return workflow — no userId]
P -->|missing / invalid| R[Check X-Api-Key header]
R -->|missing| S[401 API key required]
R -->|present| T[authenticateApiKeyFromHeader\nworkspace or personal]
T -->|fail| U[401 Invalid API key]
T -->|success| V[updateApiKeyLastUsed\nReturn workflow]
M --> W[Route handler\nDELETE / PUT / POST / PATCH / GET]
V --> W
Q --> W
|
73c1328 to
888a246
Compare
Co-authored-by: GitHub Copilot <github-copilot[bot]@users.noreply.github.com>
Co-authored-by: GitHub Copilot <github-copilot[bot]@users.noreply.github.com>
Co-authored-by: GitHub Copilot <github-copilot[bot]@users.noreply.github.com>
888a246 to
aab58cb
Compare
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Use the shared audit actor helper consistently so workflow deletion matches deploy behavior and remove the redundant deploy wrapper raised in review.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Call validateWorkflowAccess directly in workflow deployment lifecycle routes and clean up the related test helper formatting raised in review.
|
@PlaneInABottle this PR might have to wait till our v0.6 release. Lot of auth changes there that might overwrite this potentially |

Summary
Problem / current behavior
Proposed fix / behavior after
apps/sim/app/api/workflows/middleware.tsso workflow access validation can be driven by explicit action, deployment, and internal-secret optionsapps/sim/app/api/workflows/[id]/route.ts,deploy/route.ts,deployed/route.ts,status/route.ts, anddeployments/**routes onto the shared workflow access validation pathfix: harden workflow API auth routes) to repair route regressions and update the matching route testsWhy this matters
Files changed / surfaces affected
apps/sim/app/api/workflows/middleware.tsapps/sim/app/api/workflows/[id]/route.tsapps/sim/app/api/workflows/[id]/deploy/route.tsapps/sim/app/api/workflows/[id]/deployed/route.tsapps/sim/app/api/workflows/[id]/status/route.tsapps/sim/app/api/workflows/[id]/deployments/route.tsapps/sim/app/api/workflows/[id]/deployments/[version]/route.tsapps/sim/app/api/workflows/[id]/deployments/[version]/revert/route.tsValidation / tests run
Notes / non-goals / follow-ups