feat: add B2B organization directory group synchronization through RabbitMQ.#4828
Merged
Conversation
Crash--
reviewed
Jul 6, 2026
Crash--
reviewed
Jul 6, 2026
Crash--
reviewed
Jul 6, 2026
| } | ||
|
|
||
| func managedDirectoryWriteError() error { | ||
| return jsonapi.Errorf(http.StatusForbidden, "managed organization directory documents are read-only") |
Contributor
There was a problem hiding this comment.
can you add a log? Because today it's a nightmare to have a 403 in graylog, but we are not being able to see the reason it was rejected. it's kind of complicated to debug
Member
Author
There was a problem hiding this comment.
it will be logged upper in the handler
taratatach
reviewed
Jul 8, 2026
Comment on lines
+40
to
+45
| doc.M[DirectoryMetadataKey] = map[string]interface{}{ | ||
| "managed": true, | ||
| "kind": metadataKindGroup, | ||
| "organizationId": organizationID, | ||
| "externalId": externalID, | ||
| } |
Contributor
There was a problem hiding this comment.
We could create a new struct for this directory metadata.
Comment on lines
+324
to
+326
| if orgdirectory.IsManagedDirectoryDoctype(doctype) && orgdirectory.IsManagedDirectoryDoc(&doc) { | ||
| return managedDirectoryWriteError() | ||
| } |
Contributor
There was a problem hiding this comment.
Create a rejectManagedDirectoryDelete function?
| resolvedID := organizationID | ||
| if resolvedID == "" { | ||
| for _, inst := range list { | ||
| if inst == nil { |
Contributor
There was a problem hiding this comment.
Should we remove these from the list before returning it?
| if err := ctx.Err(); err != nil { | ||
| return err | ||
| } | ||
| copy := cloneForCreateOrUpdate(g, consts.Groups) |
taratatach
approved these changes
Jul 9, 2026
b68696d to
b82f6e6
Compare
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
This introduces support for
b2b.group.*lifecycle events on theb2bexchange and replicates managed contact groups, group memberships, and related external contacts across all instances of an organization.What Changed
Added a new
stack.b2b.group.lifecyclequeue bound to:b2b.group.createdb2b.group.updatedb2b.group.deletedb2b.group.member.addedb2b.group.member.removedAdded organization directory group sync logic:
io.cozy.contacts.groupsdocumentsorganizationId + external group idtwakeDirectoryAdded membership sync:
Extended
user.createdorganization contact sync:organizationIdor organization domain resolutionAdded managed directory protections in the data API:
Added organization instance lookup by
org_id:by-orgidindexFixes #4821