Repository navigation
fix(relay): say "channel owner or admin" in the call_webhook save refusal - #9169
Merged
Merged
Conversation
…usal The SEC-006 save gate in handle_workflow_def checks the saver's role with get_member_role(community, channel_id, ...), which is the per-channel role. Its refusal said "require the owner or admin role", which reads as the community owner or admin. Clients now show this text when the relay refuses a save, so a member was pointed at the wrong role. The refusal now reads "forbidden: workflows with call_webhook actions require the channel owner or admin role". The role check is unchanged. The `forbidden:` prefix is unchanged, so clients still classify it as a permission refusal. No test, fixture, doc or client copy in this repo quoted the old text, so nothing else changed. block/buzz-app's transport.test.ts uses the old text as a fixture; it builds its own 400 body, so it does not depend on the relay's wording. Not verified: no tests, builds, clippy or formatters were run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: mtoohey <mtoohey@squareup.com>
🔐 Codex Security Review
Review SummaryOverall Risk: NONE
FindingsNo concrete security, correctness, or reliability findings were identified. Notes
Generated by Codex Security Review | |
baxen
approved these changes
Nov 8, 2026
morgmart
added a commit
that referenced
this pull request
Nov 9, 2026
…ived-solo-read * origin/main: fix(relay): say "channel owner or admin" in the call_webhook save refusal (#9169) feat(mobile): consolidate Solo chat settings in one sheet (#9255) fix(cli): preserve attachments across successive edits (#9226) fix(mobile): swipe left to reply so swipe-back keeps rightward drags (#9127) mobile: long-press a message link for open, copy and share (#9135) feat(mobile): long-press a Solo chat to open its details sheet (#9163) fix(mobile): shimmer loading photos in the iOS carousel (#9167)
bostonaholic
added a commit
that referenced
this pull request
Nov 9, 2026
…ction-p * origin/main: (111 commits) feat(mobile): tag the reacted-to message author on reactions (#9141) fix(mobile): steady New DM picker rows and animate picks (#9249) perf(mobile): keep remote images on disk and show small ones as thumbnails (#9158) fix(relay): deliver slow cross-node events late instead of closing their recipients (#9235) fix(mobile): read only shown events from filtered Activity rows (#9215) fix(mobile): show the channel name as the notification subtitle (#9173) fix(mobile): keep Home's header clean under sheets (#9152) fix(mobile): show already-loaded custom emoji in the iOS reactions sheet (#9150) mobile: add follow and remind actions to inbox row menu (#9142) fix(mobile): start no threads in Solo chats (#9123) mobile: persist user profiles so names and avatars render on launch (#9116) fix(mobile): keep a sent thread reply above the composer (#9026) [buzz] Recover database pool capacity after stalled connections (#9267) feat: send a User-Agent on relay WebSocket upgrades (#9246) Record why relay connections close and quiet close warnings (#9245) fix(relay): say "channel owner or admin" in the call_webhook save refusal (#9169) feat(mobile): consolidate Solo chat settings in one sheet (#9255) fix(cli): preserve attachments across successive edits (#9226) fix(mobile): swipe left to reply so swipe-back keeps rightward drags (#9127) mobile: long-press a message link for open, copy and share (#9135) ... Signed-off-by: Matthew Boston <mboston@squareup.com>
This branch was previously deployed
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
The SEC-006 save gate in
handle_workflow_defrefuses acall_webhookworkflow unless the saver is an owner or admin. It looks up the role withget_member_role(community, channel_id, …), so this is the saver's channel role. The refusal text said only "require the owner or admin role", which reads as the community owner or admin.Clients now show the relay's refusal text when a save is refused (block/buzz-app is about to pass it through as written), so a member would be sent after the wrong role. The refusal now says:
forbidden:prefix is unchanged, so clients still treat it as a permission refusal.No test, fixture, doc or client copy in this repo quoted the old text, so this is a one-line change.
Related issue
None found for the save-path wording. #5135 (open) rewrites the SEC-006 refusals on the trigger path (
handle_workflow_trigger) but leaves this save-path string alone, so the two don't overlap.Testing
Not verified locally: no tests, builds, clippy or rustfmt were run, and the commit was pushed with
--no-verify. CI is the first check. The change only edits a string literal.🤖 Generated with Claude Code