Tree:
780cb9e293
cached-config-operations
main
revert-7033-patch-1
test_dylint
various_fixes
0.10.0
0.11.0
0.12.0
0.13.0
0.9.0
1.0.0
1.1.0
1.10.0
1.11.0
1.12.0
1.13.0
1.13.1
1.14
1.14.1
1.14.2
1.15.0
1.15.1
1.16.0
1.16.1
1.16.2
1.16.3
1.17.0
1.18.0
1.19.0
1.2.0
1.20.0
1.21.0
1.22.0
1.22.1
1.22.2
1.23.0
1.23.1
1.24.0
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.28.0
1.28.1
1.29.0
1.29.1
1.29.2
1.3.0
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.31.0
1.32.0
1.32.1
1.32.2
1.32.3
1.32.4
1.32.5
1.32.6
1.32.7
1.33.0
1.33.1
1.33.2
1.34.0
1.34.1
1.34.2
1.34.3
1.35.0
1.35.1
1.35.2
1.35.3
1.35.4
1.35.5
1.35.6
1.35.7
1.35.8
1.36.0
1.4.0
1.5.0
1.6.0
1.6.1
1.7.0
1.8.0
1.9.0
1.9.1
${ noResults }
3 Commits (780cb9e293207d1e2c40db6b18b68c26ae7568c2)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
780cb9e293 |
Add SCIM Groups endpoints with diff-based member sync
Phase 3 of the SCIM v2 implementation: - Groups CRUD at /scim/v2/<org>/Groups: filters on displayName/externalId, pagination, excludedAttributes=members honored on list (Entra sends it on every sync cycle). - PATCH implements true add/remove diffs on groups_users, including Entra's filter-path removal form members[value eq "id"] used by provisioning apps created without the aadOptscim062020 flag. Duplicate adds are idempotent; removals of absent members are no-ops (Entra retries removals). - PUT and PATCH-replace do full member-set replacement, the one place ldap_import's replace semantics are actually correct. - Member values resolve to memberships of the token's org only; unknown or cross-org ids are rejected before any write, so a failed create leaves nothing behind. Users must be provisioned before group assignment (GroupUser keys on MembershipId). - Group DELETE is a real delete: groups carry no E2EE state, unlike memberships. - Gated on ORG_GROUPS_ENABLED with a loud SCIM 501, not ldap_import's silent skip. Audit events use the 1400-range group event types. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
5 days ago |
|
|
45f19e004e |
Add SCIM Users PUT, externalId updates, and attribute-patch tolerance
Phase 2 of the SCIM v2 implementation: - PUT /scim/v2/<org>/Users/<id> replaces the attributes SCIM owns (externalId, active) and returns the true state for everything else. userName/email and role deliberately do not sync: email is the login identity, user.name is global to the person across orgs, and roles cannot round-trip through Vaultwarden's membership types. - PATCH now applies externalId changes (path and path-less forms) with per-org uniqueness enforced, logged as OrganizationUserUpdated. - Attributes Entra maps by default but Vaultwarden does not sync (displayName, name.*, emails, title, roles, preferredLanguage, the enterprise extension) are accepted and ignored instead of rejected: a 400 would surface as an Entra sync error on every directory rename. Genuinely unknown paths still fail with invalidPath. - Pagination edges covered: middle pages, count=0 (total only), and startIndex past the end. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
5 days ago |
|
|
a4d1d870b1 |
Add SCIM Users endpoints: provision, deprovision, restore
Phase 1 of the SCIM v2 implementation - the deprovisioning core: - GET /scim/v2/<org>/Users with eq filters on userName/externalId (filter values are matched against the lowercased stored email, avoiding the Entra create-409-quarantine loop) plus startIndex/count pagination. - POST creates or links the user and invites: shell account for unknown emails, membership at Invited (Accepted when mail is off and the account already has credentials), invite mail with rollback on failure. Honors active:false on create by storing the membership pre-revoked. - PATCH handles Entra's active toggle in all observed shapes: op casing, string booleans, and the path-less value-object form. - PATCH active:false and DELETE both map to revoke, never delete: the row and akey survive so restore is lossless. Documented RFC deviation. - Last-confirmed-owner protection returns a SCIM 409 mutability error. - Restore re-runs the org policy check like restore_member_impl. - Unknown member ids and other orgs' member ids return identical 404s. - Audit events (invited/revoked/restored) recorded with a synthetic SCIM actor, following the admin panel's ACTING_ADMIN_USER precedent. - ScimJson data guard accepts application/scim+json bodies under the scim size limit; 413 catcher added. Tests: 24 new (unit: filter grammar, PatchOp quirks, status-offset table with the -126/-128 revocation encoding, regression canary on from_i32; integration: full lifecycle, duplicate 409s, last-owner 409, enumeration shape, born-disabled create). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
5 days ago |