The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/apps/meteor/app/lib/server/functions/saveCustomFieldsWithoutVali...

45 lines
1.6 KiB

import { Meteor } from 'meteor/meteor';
import { Subscriptions, Users } from '@rocket.chat/models';
import type { IUser, DeepWritable } from '@rocket.chat/core-typings';
import type { UpdateFilter } from 'mongodb';
import { settings } from '../../../settings/server';
import { trim } from '../../../../lib/utils/stringUtils';
export const saveCustomFieldsWithoutValidation = async function (userId: string, formData: Record<string, any>): Promise<void> {
if (trim(settings.get('Accounts_CustomFields')) !== '') {
let customFieldsMeta;
try {
customFieldsMeta = JSON.parse(settings.get('Accounts_CustomFields'));
} catch (e) {
throw new Meteor.Error('error-invalid-customfield-json', 'Invalid JSON for Custom Fields');
}
const customFields: Record<string, any> = {};
Object.keys(customFieldsMeta).forEach((key) => {
customFields[key] = formData[key];
});
await Users.setCustomFields(userId, customFields);
// Update customFields of all Direct Messages' Rooms for userId
await Subscriptions.setCustomFieldsDirectMessagesByUserId(userId, customFields);
for await (const fieldName of Object.keys(customFields)) {
if (!customFieldsMeta[fieldName].modifyRecordField) {
return;
}
const { modifyRecordField } = customFieldsMeta[fieldName];
const update: DeepWritable<UpdateFilter<IUser>> = {};
if (modifyRecordField.array) {
update.$addToSet = {};
update.$addToSet[modifyRecordField.field] = customFields[fieldName];
} else {
update.$set = {};
update.$set[modifyRecordField.field] = customFields[fieldName];
}
await Users.updateOne({ _id: userId }, update);
}
}
};