Repository navigation
Conversation
🤖 Bitwarden Claude Code ReviewOverall Assessment: APPROVE This review covers head 5216750. The PR adds Code Review DetailsNo code findings. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## dirt/pm-41931/report-exclusions-api #8700 +/- ##
====================================================================
Coverage 74.51% 74.52%
====================================================================
Files 2735 2737 +2
Lines 117243 117274 +31
Branches 10626 10628 +2
====================================================================
+ Hits 87364 87393 +29
- Misses 27215 27219 +4
+ Partials 2664 2662 -2 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Per-user JSON map of cipher report exclusions, a sibling of Archives. Vault write procedures accept the new parameter but never write it, so saving a cipher cannot erase another user's exclusion.
…iphers Reads this user's entry from ReportExclusions into CipherDetails and the cipher response, so the standard sync delivers every exclusion. EF replaces never write the column.
DIRT-owned writer for Cipher.ReportExclusions. Only the user's own personal, not-deleted logins can be excluded, and only the account revision is bumped, so other devices sync without an edit conflict.
PUT ciphers/{id}/exclude-from-reports, behind the health report
exclusions flag. Requires premium, and pushes a cipher sync so the
user's other devices pick up the exclusion.
Repository tests run on every database and pin the scope rules, the per-user read, the revision date behavior, and that Vault replaces keep the exclusion. Adds command and controller unit tests.
… organizations The EF GetManyByUserIdAsync branch for users without organizations rebuilds CipherDetails field by field and dropped ReportExcludedDate, so sync on Postgres, MySQL and SQLite returned null for users with no org. MSSQL was unaffected (its procedure selects every column).
Store { "<userId>": true } instead of the exclusion date, matching the
tech breakdown and the Favorites pattern. Nothing reads the date, and a
flag tells the server less. Ciphers now expose a per-user
ExcludedFromReports boolean in place of ReportExcludedDate.
This PR now holds only the database and data-access changes, so it can merge before the endpoint. The command, controller and their unit tests move to a stacked PR.
Main gained newer migrations, so the SQL script moves to 2026-10-23 and the three EF migrations are regenerated on top of main's model.
Follow the SQL naming guide: Cipher_UpdateManyBrowserHealthExclusions.
0792477 to
8bc97ff
Compare
PUT ciphers/{id}/exclude-from-reports, behind the health report
exclusions flag. Requires premium, and pushes a cipher sync so the
user's other devices pick up the exclusion.
8bc97ff to
97b6f5d
Compare
…edure Lets the restore feature reuse the procedure. Passing 0 removes the user's key, because the SQL Server read treats any stored value as excluded.
🎟️ Tracking
PM-41931
📔 Objective
This PR adds
PUT ciphers/{id}/exclude-from-browser-health. It is stacked on #8669, which adds the storage. Merge #8669 first.The endpoint:
pm-39196-health-report-exclusionsfeature flag.RevisionDate. This follows Favorites and Folders, so other devices do not get edit conflicts.Tests: unit tests, and a live API test of 31 checks against a local server.
Security note. With this endpoint, the server learns which personal logins a user excluded. The client shows Exclude only on at-risk logins. The nearest precedent is the organization
SecurityTasktable. AppSec must review this before the PR leaves draft.The clients PR that calls this endpoint is bitwarden/clients#24109.
📸 Screenshots
Not applicable. This PR has no UI changes.