From 3e5447b8cc094d0fe17bb010898ba97c3f7461d0 Mon Sep 17 00:00:00 2001 From: matheusbsilva137 Date: Tue, 5 Oct 2021 17:08:58 -0300 Subject: [PATCH 1/4] Remove roles field from user data sync update --- app/importer/server/classes/ImportDataConverter.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/app/importer/server/classes/ImportDataConverter.ts b/app/importer/server/classes/ImportDataConverter.ts index 9f09a44d49bd6..2a7b3f90ef2f3 100644 --- a/app/importer/server/classes/ImportDataConverter.ts +++ b/app/importer/server/classes/ImportDataConverter.ts @@ -221,14 +221,7 @@ export class ImportDataConverter { // #ToDo: #TODO: Move this to the model class const updateData: Record = { - $set: { - roles: userData.roles || ['user'], - type: userData.type || 'user', - ...userData.statusText && { statusText: userData.statusText }, - ...userData.bio && { bio: userData.bio }, - ...userData.services?.ldap && { ldap: true }, - ...userData.avatarUrl && { _pendingAvatarUrl: userData.avatarUrl }, - }, + $set: {}, }; this.addCustomFields(updateData, userData); From 9ef4dae3d76d241e0f4b33825d6ff6546bb1a386 Mon Sep 17 00:00:00 2001 From: matheusbsilva137 Date: Tue, 5 Oct 2021 17:19:21 -0300 Subject: [PATCH 2/4] Remove userServices and importIds update on LDAP DataSync --- app/importer/server/classes/ImportDataConverter.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/importer/server/classes/ImportDataConverter.ts b/app/importer/server/classes/ImportDataConverter.ts index 2a7b3f90ef2f3..7d66335f76ae1 100644 --- a/app/importer/server/classes/ImportDataConverter.ts +++ b/app/importer/server/classes/ImportDataConverter.ts @@ -225,8 +225,6 @@ export class ImportDataConverter { }; this.addCustomFields(updateData, userData); - this.addUserServices(updateData, userData); - this.addUserImportId(updateData, userData); this.addUserEmails(updateData, userData, existingUser.emails || []); Users.update({ _id }, updateData); @@ -237,10 +235,6 @@ export class ImportDataConverter { if (userData.name || userData.username) { saveUserIdentity({ _id, name: userData.name, username: userData.username }); } - - if (userData.importIds.length) { - this.addUserToCache(userData.importIds[0], existingUser._id, existingUser.username); - } } insertUser(userData: IImportUser): IUser { From f9eeedfea824c41afd057afa1bd95ec8bb411325 Mon Sep 17 00:00:00 2001 From: matheusbsilva137 Date: Wed, 6 Oct 2021 10:37:28 -0300 Subject: [PATCH 3/4] Update roles field only if it is specified in the LDAP data --- .../server/classes/ImportDataConverter.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/app/importer/server/classes/ImportDataConverter.ts b/app/importer/server/classes/ImportDataConverter.ts index 7d66335f76ae1..db9cbce2edd39 100644 --- a/app/importer/server/classes/ImportDataConverter.ts +++ b/app/importer/server/classes/ImportDataConverter.ts @@ -221,10 +221,19 @@ export class ImportDataConverter { // #ToDo: #TODO: Move this to the model class const updateData: Record = { - $set: {}, + $set: { + ...userData.roles && { roles: userData.roles }, + ...userData.type && { type: userData.type }, + ...userData.statusText && { statusText: userData.statusText }, + ...userData.bio && { bio: userData.bio }, + ...userData.services?.ldap && { ldap: true }, + ...userData.avatarUrl && { _pendingAvatarUrl: userData.avatarUrl }, + }, }; this.addCustomFields(updateData, userData); + this.addUserServices(updateData, userData); + this.addUserImportId(updateData, userData); this.addUserEmails(updateData, userData, existingUser.emails || []); Users.update({ _id }, updateData); @@ -235,6 +244,10 @@ export class ImportDataConverter { if (userData.name || userData.username) { saveUserIdentity({ _id, name: userData.name, username: userData.username }); } + + if (userData.importIds.length) { + this.addUserToCache(userData.importIds[0], existingUser._id, existingUser.username); + } } insertUser(userData: IImportUser): IUser { From 2bdb7fb29581c0f563217a3522584e6a46ba81a5 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 6 Oct 2021 13:09:50 -0300 Subject: [PATCH 4/4] Send existing user type and roles on LDAP sync --- app/importer/server/classes/ImportDataConverter.ts | 4 ++-- server/lib/ldap/Manager.ts | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/importer/server/classes/ImportDataConverter.ts b/app/importer/server/classes/ImportDataConverter.ts index db9cbce2edd39..9f09a44d49bd6 100644 --- a/app/importer/server/classes/ImportDataConverter.ts +++ b/app/importer/server/classes/ImportDataConverter.ts @@ -222,8 +222,8 @@ export class ImportDataConverter { // #ToDo: #TODO: Move this to the model class const updateData: Record = { $set: { - ...userData.roles && { roles: userData.roles }, - ...userData.type && { type: userData.type }, + roles: userData.roles || ['user'], + type: userData.type || 'user', ...userData.statusText && { statusText: userData.statusText }, ...userData.bio && { bio: userData.bio }, ...userData.services?.ldap && { ldap: true }, diff --git a/server/lib/ldap/Manager.ts b/server/lib/ldap/Manager.ts index 7702d1261ba2c..da0531ea50545 100644 --- a/server/lib/ldap/Manager.ts +++ b/server/lib/ldap/Manager.ts @@ -250,6 +250,18 @@ export class LDAPManager { logger.debug({ msg: 'Syncing user data', ldapUser: _.omit(ldapUser, '_raw'), user: { ...existingUser && { email: existingUser.emails, _id: existingUser._id } } }); const userData = this.mapUserData(ldapUser, usedUsername); + + // make sure to persist existing user data when passing to sync/convert + // TODO this is only needed because ImporterDataConverter assigns a default role and type if nothing is set. we might need to figure out a better way and stop doing that there + if (existingUser) { + if (!userData.roles && existingUser.roles) { + userData.roles = existingUser.roles; + } + if (!userData.type && existingUser.type) { + userData.type = existingUser.type as IImportUser['type']; + } + } + const options = this.getConverterOptions(); LDAPDataConverter.convertSingleUser(userData, options);