1
0
mirror of https://github.com/bitwarden/directory-connector synced 2025-12-14 15:23:16 +00:00

[PM-20134] Fix overwriteExisting and largeImport causing users to be deleted (#737)

* Fix mixed up bools, use whole object

* disallow overwriteExisting on large syncs

* remove unused file

* add test, always set overwriteExisting to false for batched requests

* add more tests

* wip

* Clean up

---------

Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
This commit is contained in:
Brandon Treston
2025-04-30 09:26:15 -04:00
committed by GitHub
parent 23d285a9f6
commit 3573e201a6
10 changed files with 322 additions and 68 deletions

View File

@@ -3,7 +3,7 @@ import { OrganizationImportRequest } from "@/jslib/common/src/models/request/org
import { GroupEntry } from "@/src/models/groupEntry";
import { UserEntry } from "@/src/models/userEntry";
import { RequestBuilder } from "../abstractions/request-builder.service";
import { RequestBuilder, RequestBuilderOptions } from "../abstractions/request-builder.service";
import { batchSize } from "./sync.service";
@@ -16,9 +16,14 @@ export class BatchRequestBuilder implements RequestBuilder {
buildRequest(
groups: GroupEntry[],
users: UserEntry[],
removeDisabled: boolean,
overwriteExisting: boolean,
options: RequestBuilderOptions,
): OrganizationImportRequest[] {
if (options.overwriteExisting) {
throw new Error(
"You cannot use the 'Remove and re-add organization users during the next sync' option with large imports.",
);
}
const requests: OrganizationImportRequest[] = [];
if (users.length > 0) {
@@ -26,7 +31,7 @@ export class BatchRequestBuilder implements RequestBuilder {
return {
email: u.email,
externalId: u.externalId,
deleted: u.deleted || (removeDisabled && u.disabled),
deleted: u.deleted || (options.removeDisabled && u.disabled),
};
});
@@ -37,7 +42,7 @@ export class BatchRequestBuilder implements RequestBuilder {
groups: [],
users: u,
largeImport: true,
overwriteExisting,
overwriteExisting: false,
});
requests.push(req);
}
@@ -59,7 +64,7 @@ export class BatchRequestBuilder implements RequestBuilder {
groups: g,
users: [],
largeImport: true,
overwriteExisting,
overwriteExisting: false,
});
requests.push(req);
}