Skip to content

fix(embedded): block custom SQL injection in guest user chart payloads - #43111

Open
alexandrusoare wants to merge 13 commits into
masterfrom
alexandrusoare/fix/block-guest-custom-sql-injection
Open

fix(embedded): block custom SQL injection in guest user chart payloads#43111
alexandrusoare wants to merge 13 commits into
masterfrom
alexandrusoare/fix/block-guest-custom-sql-injection

Conversation

@alexandrusoare

Copy link
Copy Markdown
Contributor

SUMMARY

Embedded dashboard users (guest tokens) could modify chart data requests to inject custom SQL that wasn't part of the original chart. This change validates that any SQL in the request matches what's saved on the chart — if it doesn't, the request is rejected.

BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF

TESTING INSTRUCTIONS

ADDITIONAL INFORMATION

  • Has associated issue:
  • Required feature flags:
  • Changes UI
  • Includes DB Migration (follow approval process in SIP-59)
    • Migration is atomic, supports rollback & is backwards-compatible
    • Confirm DB migration upgrade and downgrade tested
    • Runtime estimates and downtime expectations provided
  • Introduces new feature or API
  • Removes existing feature or API

@dosubot dosubot Bot added authentication Related to authentication embedded labels Aug 13, 2026
@bito-code-review

bito-code-review Bot commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Code Review Agent Run #7c2c01

Actionable Suggestions - 0
Review Details
  • Files reviewed - 2 · Commit Range: 8ed9a30..8ed9a30
    • superset/security/manager.py
    • tests/unit_tests/security/manager_test.py
  • Files skipped - 0
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

@github-actions github-actions Bot removed the embedded label Aug 13, 2026
Comment thread tests/unit_tests/security/manager_test.py
Comment thread tests/unit_tests/security/manager_test.py Outdated
@codecov

codecov Bot commented Aug 13, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 21.92982% with 89 lines in your changes missing coverage. Please review.
✅ Project coverage is 66.50%. Comparing base (8b67fb4) to head (a4628aa).
⚠️ Report is 1 commits behind head on master.

Files with missing lines Patch % Lines
superset/security/manager.py 21.92% 82 Missing and 7 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master   #43111      +/-   ##
==========================================
- Coverage   66.73%   66.50%   -0.24%     
==========================================
  Files        2876     2870       -6     
  Lines      164218   163612     -606     
  Branches    37890    37633     -257     
==========================================
- Hits       109590   108808     -782     
- Misses      52469    52638     +169     
- Partials     2159     2166       +7     
Flag Coverage Δ
hive 38.06% <9.64%> (-0.05%) ⬇️
mysql 57.71% <21.92%> (-0.06%) ⬇️
postgres 57.75% <21.92%> (-0.06%) ⬇️
presto 39.99% <9.64%> (-0.05%) ⬇️
python 59.13% <21.92%> (-0.06%) ⬇️
sqlite 57.38% <21.92%> (-0.06%) ⬇️
unit 100.00% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@netlify

netlify Bot commented Aug 14, 2026

Copy link
Copy Markdown

Deploy Preview for superset-docs-preview ready!

Name Link
🔨 Latest commit a4628aa
🔍 Latest deploy log https://app.netlify.com/projects/superset-docs-preview/deploys/6a86dc4a662364000750a486
😎 Deploy Preview https://deploy-preview-43111--superset-docs-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@bito-code-review

bito-code-review Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Code Review Agent Run #788203

Actionable Suggestions - 0
Review Details
  • Files reviewed - 1 · Commit Range: 8ed9a30..bf3ecac
    • tests/unit_tests/security/manager_test.py
  • Files skipped - 0
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

Comment thread superset/security/manager.py Outdated
Comment thread superset/security/manager.py Outdated
@bito-code-review

Copy link
Copy Markdown
Contributor

AI Code Review is in progress (usually takes 3 to 15 minutes unless it's a very large PR).

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

@bito-code-review

Copy link
Copy Markdown
Contributor

Code Review Agent Run #2bd1d2

Actionable Suggestions - 0
Review Details
  • Files reviewed - 2 · Commit Range: bf3ecac..4bcd5c8
    • superset/security/manager.py
    • tests/unit_tests/security/manager_test.py
  • Files skipped - 0
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

Comment thread superset/security/manager.py Outdated
Comment thread superset/security/manager.py Outdated
Comment thread superset/security/manager.py Outdated
Comment thread superset/security/manager.py

# SQL predicates (extras.where/having, SQL adhoc filters) must match
# what was saved on the chart; injected custom SQL is rejected.
if _sql_filters_modified(

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This guard is reachable only with a slice_id: omit it and QueryContextFactory leaves slice_ None (query_context_factory.py:67), query_context_modified takes the chartless branch, _native_filter_request_modified returns False with no native-filter marker, and arbitrary extras.where is accepted — and the explicit NATIVE_FILTER path never inspects extras either.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

@bito-code-review

bito-code-review Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Code Review Agent Run #28bffa

Actionable Suggestions - 0
Review Details
  • Files reviewed - 2 · Commit Range: 4bcd5c8..583cec6
    • superset/security/manager.py
    • tests/unit_tests/security/manager_test.py
  • Files skipped - 0
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

@alexandrusoare
alexandrusoare requested a review from msyavuz August 18, 2026 15:22
Comment thread superset/security/manager.py Outdated
# Chartless non-native-filter requests (drill-to-detail, drill-by,
# samples) must not carry SQL extras; there is no stored chart to
# validate them against. Only the empty-filter sentinel is allowed.
sentinel_only: set[str] = {_EMPTY_FILTER_SENTINEL}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The chartless branch now allows only the sentinel, which over-blocks two real guest paths:

  • Native Select filters put their "Pre-filter available values" adhoc filters into extras.where (filters/components/Select/buildQuery.tsprocessFilters), so a dashboard whose native filter pre-filters with Custom SQL 403s.
  • Drill-to-detail is chartless too (/datasource/samplesget_samples builds the context with form_data={"dashboardId": ...} and calls raise_for_access), and getDrillPayload sends the chart's extras.where plus drill filters whose col is the raw dimension — an adhoc dict whenever that dimension is custom SQL.

What should these validate against when there is no stored chart — the filter's own config, the dashboard's charts?

Nits while here: _native_filter_request_modified's docstring still says drill-to-detail/samples "are not treated as modified here" and that filter/extras are not constrained, both now untrue; _collect_allowed_sql calls flt.get on stored adhoc_filters without the isinstance(flt, dict) guard used further down; and sanitizeClause appends \n when an expression contains --, so (expr\n) won't match the stored raw expr on charts with no saved query_context.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed the chartless guard — SQL extras validation now applies only to chart payloads (with a slice_id), which is the scope of this PR. Chartless paths (native-filter pre-filtering, drill-to-detail, samples) are left unchanged and remain protected by datasource-access checks in raise_for_access. Also fixed the nits: added isinstance(flt, dict) guard in _collect_allowed_sql, and strip trailing \n from split clauses to handle _sanitize_clause's comment-termination behavior.

@bito-code-review

bito-code-review Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Code Review Agent Run #681a3a

Actionable Suggestions - 0
Review Details
  • Files reviewed - 1 · Commit Range: 583cec6..88a1c50
    • superset/security/manager.py
  • Files skipped - 0
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

@alexandrusoare
alexandrusoare requested a review from msyavuz August 19, 2026 09:12
"""
extras = getattr(query, "extras", None) or {}
for param in ("where", "having"):
composed = extras.get(param, "")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

QueryObject._sanitize_filters rewrites extras["where"/"having"] in place and get_payload_result caches the rewritten value into cache_values["queries"], so the GET /api/v1/chart/data/<cache_key> re-validation compares normalized SQL against the chart's raw stored sqlExpression — with GLOBAL_ASYNC_QUERIES on, a saved custom SQL filter containing -- is cached as (a > 0 /* x */) (was (a > 0 -- x\n)) and the guest's result fetch 403s.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checked — not an issue. The async cache stores the original form_data, not the sanitized QueryObject.extras. On cache fetch, the QueryContext is rebuilt from that original form_data, so our validation sees the pre-sanitization value.

# tightening this would break legitimate chartless flows (native-filter
# pre-filtering, drill-to-detail) that carry SQL extras. These paths
# are still protected by datasource-access checks in raise_for_access.
# The _sql_filters_modified check below covers chart payloads only.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Datasource-access checks gate which dataset is queried, not what SQL runs against it, so a guest can simply omit slice_idslice_ stays None, _native_filter_request_modified returns False for any payload without the NATIVE_FILTER/native_filter_id marker, and arbitrary extras.where (including subqueries) executes against any dataset the dashboard grants. Is leaving that path open intentional here?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, intentional

@EnxDev

EnxDev commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

EnxDev's Review Agent — #43111 · HEAD 5bec901

comment — right direction and the vectors it does cover are handled carefully, but the control is bypassed by omitting slice_id, and two legitimate guest flows now 403.

On the earlier bot comments: the multi-query "predicate transfer" flag is a non-issue (all queries in a context share one datasource and predicates only restrict rows — the docstring at manager_test.py:3876 states this correctly), and the missing end-to-end coverage is addressed by test_raise_for_access_guest_user_sql_filter_injection_blocked. CI is green.

🔴 Functional

  • superset/security/manager.py:1403-1410 · High — the fix is bypassed by dropping slice_id. A guest POSTs /api/v1/chart/data with form_data: {"dashboardId": N} (no slice_id, no chart_id, no type: NATIVE_FILTER) and arbitrary extras.where: slice_ stays None (query_context_factory.py:64-68), so query_context_modified takes the chartless branch and _native_filter_request_modified returns False at its marker check (manager.py:797-800) — the new check never runs. Datasource access is still granted, via has_drill_access (manager.py:2076-2081: slice_id is None and chart_id is None and datasource in dashboard.datasources) plus can_access_dashboard. So the exact attack in the PR summary still executes against any dataset on the embedded dashboard, including blind exfiltration through subqueries in the WHERE clause. Related: the new comment "these paths are still protected by datasource-access checks in raise_for_access" is not accurate — those checks gate which dataset is queried, not what SQL runs against it (_native_filter_request_modified's docstring makes the same claim). Constrain extras.where/having and adhoc filter[].col on the chartless path against the charts of the dashboard in form_data["dashboardId"], or reject extras that derive from no chart on it. regression test: guest raise_for_access with form_data={"dashboardId": 1}, no slice_id, extras={"where": "1=1"} → must raise.

  • superset/security/manager.py:1224-1229 · High — cross-filtering from a custom-SQL dimension now 403s the other charts. getCrossFilterDataMask emits {col, op, val} carrying the source chart's raw QueryFormColumn (plugin-chart-echarts/src/utils/eventHandlers.ts:67-81), which is an adhoc dict whenever that dimension is Custom SQL, and buildQueryObject appends it to every in-scope chart's filters (buildQueryObject.ts:91). allowed is built only from the target chart, so unless the target happens to store the same expression the guest gets "Guest user cannot modify chart payload". Before this PR an adhoc col that didn't resolve degraded gracefully (rejected_adhoc_filters_columns, models/helpers.py:4361-4368); now it's a hard 403. Allow adhoc col.sqlExpression values found on any chart of the requesting dashboard. regression test: stored chart B without the expression + filter[0].col.sqlExpression = chart A's dimension, same dashboardId → not modified.

  • superset/security/manager.py:1216-1222 · Medium — the async results fetch compares normalized SQL against the raw stored SQL. QueryObject._sanitize_filters rewrites extras["where"/"having"] in place (common/query_object.py:342-380): Jinja is rendered when ENABLE_TEMPLATE_PROCESSING is on, and sanitize_clause re-renders any clause containing a comment (sql/parse.py:2425-2437). get_payload_result then merges query.to_dict() into cache_values["queries"] and caches it (common/query_context_processor.py:516-528), and the guest's GET /api/v1/chart/data/<cache_key> rebuilds from that cached value and re-runs raise_for_access (charts/data/api.py:411-417). With GLOBAL_ASYNC_QUERIES on, a chart whose saved Custom SQL filter contains -- or Jinja passes the POST and then 403s on the results fetch — the chart renders as an error for the guest. Normalize both sides before comparing (run the stored expression through sanitize_clause too), or skip the SQL comparison when the context was rehydrated from the query-context cache. regression test: saved filter a > 0 -- note, re-validate with the sanitized (a > 0 /* note */) → not modified.

🟡 Should-fix

  • tests/unit_tests/security/manager_test.py — the \n strip added in _split_extras_clauses:1142 (in response to review feedback) has no test. Add the case it exists for: stored sqlExpression = "a > 0 -- x", request extras.where = "(a > 0 -- x\n)" → allowed. Without it the next refactor silently drops comment handling.

🔵 Nits

  • superset/security/manager.py:1206-1214 — the docstring's ) AND ( caveat only fails closed for charts with a stored query_context; the full-composed fallback is collected solely from stored query contexts (_add_allowed_sql_from_query_context:1155-1159), so a chart with query_context = NULL and such an expression 403s. Worth saying so, since NULL query contexts are common.

🙌 Praise

  • superset/security/manager.py:1120-1143 — reversing sanitizeClause's parenthesis wrapping and its -- newline, and allowing the 1 = 0 required-filter sentinel, is exactly the frontend detail this check needed to not break real dashboards.

Reviewed by EnxDev's Review Agent — @EnxDev · HEAD 5bec901.

@bito-code-review

bito-code-review Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Code Review Agent Run #c19013

Actionable Suggestions - 0
Review Details
  • Files reviewed - 2 · Commit Range: 88a1c50..a0403ee
    • superset/security/manager.py
    • tests/unit_tests/security/manager_test.py
  • Files skipped - 0
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

@msyavuz

msyavuz commented Aug 19, 2026

Copy link
Copy Markdown
Member

Two issues on the latest commits (a0403ee):

1. _add_dashboard_column_expressions trusts an unauthorized dashboardId. form_data["dashboardId"] is request-controlled and the lookup does no authorization check — no has_guest_access(dashboard), and no check that stored_chart is actually on that dashboard. Dashboard ids are sequential ints, so a guest can name any dashboard and pull every adhoc-column sqlExpression from every chart on it into allowed. The re-check then runs the full _query_has_novel_sql, which covers extras.where/having and not just the filters[].col vector the docstring describes, so those foreign expressions become injectable as complete WHERE/HAVING predicates (correlated subqueries included) against the datasource the guest can already reach. Suggest resolving the dashboard through the guest-access check and confirming stored_chart.id in {s.id for s in dashboard.slices}, then scoping the expansion to the filters[].col vector rather than re-running the whole check.

2. Scalar column params are silently dropped, in both _collect_allowed_sql and the new _add_dashboard_column_expressions. _STORED_COLUMN_PARAMS mixes list-valued controls (columns, groupby) with scalar ones (x_axis, entity, series, granularity_sqla); for the scalars params[key] is an adhoc-column dict, so for col in params.get(key) or [] iterates the dict's keys, isinstance(col, dict) is always False, and nothing is added — no error:

params = {"x_axis":  {"sqlExpression": "DATE_TRUNC('month', ts)", "label": "m"},
          "groupby": [{"sqlExpression": "UPPER(country)", "label": "c"}]}
_collect_allowed_sql(...)  # -> {'1 = 0', 'UPPER(country)'}   x_axis missing

So a cross-filter from a sibling chart whose dimension is an adhoc x-axis — the case these commits were added to fix — still 403s. _stored_param_values already handles this correctly (items = value if isinstance(value, (list, tuple)) else [value]); reusing that pattern in both places is the fix. The new test only exercises a list-valued columns, which is why it passes.

@bito-code-review

bito-code-review Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Code Review Agent Run #67f6d8

Actionable Suggestions - 0
Review Details
  • Files reviewed - 2 · Commit Range: a0403ee..b30403a
    • superset/security/manager.py
    • tests/unit_tests/security/manager_test.py
  • Files skipped - 0
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

@bito-code-review

bito-code-review Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Code Review Agent Run #184aff

Actionable Suggestions - 0
Filtered by Review Rules

Bito filtered these suggestions based on rules created automatically for your feedback. Manage rules.

  • tests/unit_tests/security/manager_test.py - 1
Review Details
  • Files reviewed - 1 · Commit Range: b30403a..a4628aa
    • tests/unit_tests/security/manager_test.py
  • Files skipped - 0
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

authentication Related to authentication size/XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants