[FIX] LDAP and SAML: changed usernames are not reflected on old data (#22304)

* [FIX] LDAP and SAML: When a user's username is changed, their old data is not being updated
pull/22350/head^2
pierre-lehnen-rc 4 years ago committed by GitHub
parent cc1b66b192
commit f0457c2550
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      app/ldap/server/sync.js
  2. 1
      app/lib/server/functions/index.js
  3. 2
      app/lib/server/functions/saveUser.js
  4. 7
      app/lib/server/functions/saveUserIdentity.js
  5. 2
      app/lib/server/methods/setUsername.js
  6. 5
      app/meteor-accounts-saml/server/lib/SAML.ts
  7. 2
      server/methods/saveUserProfile.js

@ -10,13 +10,12 @@ import { RocketChatFile } from '../../file';
import { settings } from '../../settings';
import { Users, Roles, Rooms, Subscriptions } from '../../models';
import { Logger } from '../../logger';
import { _setRealName, _setUsername } from '../../lib';
import { _setRealName } from '../../lib';
import { templateVarHandler } from '../../utils';
import { FileUpload } from '../../file-upload';
import { addUserToRoom, removeUserFromRoom, createRoom } from '../../lib/server/functions';
import { addUserToRoom, removeUserFromRoom, createRoom, saveUserIdentity } from '../../lib/server/functions';
import { api } from '../../../server/sdk/api';
export const logger = new Logger('LDAPSync', {});
export function isUserInLDAPGroup(ldap, ldapUser, user, ldapGroup) {
@ -409,7 +408,7 @@ export function syncUserData(user, ldapUser, ldap) {
const username = slug(getLdapUsername(ldapUser));
if (user && user._id && username !== user.username) {
logger.info('Syncing user username', user.username, '->', username);
_setUsername(user._id, username);
saveUserIdentity({ _id: user._id, username });
}
}

@ -23,6 +23,7 @@ export { relinquishRoomOwnerships } from './relinquishRoomOwnerships';
export { saveCustomFields } from './saveCustomFields';
export { saveCustomFieldsWithoutValidation } from './saveCustomFieldsWithoutValidation';
export { saveUser } from './saveUser';
export { saveUserIdentity } from './saveUserIdentity';
export { sendMessage } from './sendMessage';
export { setEmail } from './setEmail';
export { setRealName, _setRealName } from './setRealName';

@ -305,7 +305,7 @@ export const saveUser = function(userId, userData) {
// update user
if (userData.hasOwnProperty('username') || userData.hasOwnProperty('name')) {
if (!saveUserIdentity(userId, {
if (!saveUserIdentity({
_id: userData._id,
username: userData.username,
name: userData.name,

@ -1,4 +1,4 @@
import { setUsername } from './setUsername';
import { _setUsername } from './setUsername';
import { setRealName } from './setRealName';
import { Messages, Rooms, Subscriptions, LivechatDepartmentAgents, Users } from '../../../models/server';
import { FileUpload } from '../../../file-upload/server';
@ -7,10 +7,9 @@ import { validateName } from './validateName';
/**
*
* @param {string} userId user performing the action
* @param {object} changes changes to the user
*/
export function saveUserIdentity(userId, { _id, name: rawName, username: rawUsername }) {
export function saveUserIdentity({ _id, name: rawName, username: rawUsername }) {
if (!_id) {
return false;
}
@ -30,7 +29,7 @@ export function saveUserIdentity(userId, { _id, name: rawName, username: rawUser
return false;
}
if (!setUsername(_id, username, user)) {
if (!_setUsername(_id, username, user)) {
return false;
}
user.username = username;

@ -43,7 +43,7 @@ Meteor.methods({
throw new Meteor.Error('error-field-unavailable', `<strong>${ _.escape(username) }</strong> is already in use :(`, { method: 'setUsername', field: username });
}
if (!saveUserIdentity(user._id, { _id: user._id, username })) {
if (!saveUserIdentity({ _id: user._id, username })) {
throw new Meteor.Error('error-could-not-change-username', 'Could not change username', { method: 'setUsername' });
}

@ -11,14 +11,13 @@ import { settings } from '../../../settings/server';
import { Users, Rooms, CredentialTokens } from '../../../models/server';
import { IUser } from '../../../../definition/IUser';
import { IIncomingMessage } from '../../../../definition/IIncomingMessage';
import { _setUsername, createRoom, generateUsernameSuggestion, addUserToRoom } from '../../../lib/server/functions';
import { saveUserIdentity, createRoom, generateUsernameSuggestion, addUserToRoom } from '../../../lib/server/functions';
import { SAMLServiceProvider } from './ServiceProvider';
import { IServiceProviderOptions } from '../definition/IServiceProviderOptions';
import { ISAMLAction } from '../definition/ISAMLAction';
import { ISAMLUser } from '../definition/ISAMLUser';
import { SAMLUtils } from './Utils';
const showErrorMessage = function(res: ServerResponse, err: string): void {
res.writeHead(200, {
'Content-Type': 'text/html',
@ -197,7 +196,7 @@ export class SAML {
});
if (username && username !== user.username) {
_setUsername(user._id, username);
saveUserIdentity({ _id: user._id, username });
}
// sending token along with the userId

@ -26,7 +26,7 @@ function saveUserProfile(settings, customFields) {
const user = Users.findOneById(this.userId);
if (settings.realname || settings.username) {
if (!saveUserIdentity(this.userId, {
if (!saveUserIdentity({
_id: this.userId,
name: settings.realname,
username: settings.username,

Loading…
Cancel
Save