snapshot of https://github.com/RocketChat/Rocket.Chat.git (develop, 2026-09-16; blobs > 131072B omitted)
Some checks failed
Create issues from TODOs / todos (push) Failing after 3s
Close inactive issues / close-issues (push) Has been cancelled
Deploy GitHub Pages / deploy-preview (push) Has been cancelled
CI / ⚙️ Variables Setup (push) Has been cancelled
CI / ⚙️ Test Guard (push) Has been cancelled
CI / 🚀 Notify external services - draft (push) Has been cancelled
CI / 📦 Build Packages (push) Has been cancelled
CI / 📦 Meteor Build (coverage) (push) Has been cancelled
CI / 📦 Meteor Build (production) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], fips) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Publish Docker Images (ghcr.io) (push) Has been cancelled
CI / 📦 Track Image Sizes (push) Has been cancelled
CI / 🔎 Code Check - Action Lint (push) Has been cancelled
CI / 🔎 Code Check (push) Has been cancelled
CI / 🔨 Test Storybook (push) Has been cancelled
CI / 🔨 Test Unit (push) Has been cancelled
CI / 🔨 Test API (CE) (push) Has been cancelled
CI / 🔨 Test API Livechat (CE) (push) Has been cancelled
CI / 🔨 Test UI (CE) (push) Has been cancelled
CI / 🔨 Test API (EE) (push) Has been cancelled
CI / 🔨 Test API Livechat (EE) (push) Has been cancelled
CI / 🔨 Test API Apps (deno-runtime - EE) (push) Has been cancelled
CI / 🔨 Test UI (EE) (push) Has been cancelled
CI / 🔨 Test API (FIPS) (push) Has been cancelled
CI / 🔨 Test API Livechat (FIPS) (push) Has been cancelled
CI / 🔨 Test UI (FIPS) (push) Has been cancelled
CI / 🔨 Test Federation Matrix (push) Has been cancelled
CI / 📊 Report Coverage (push) Has been cancelled
CI / ✅ Tests Done (push) Has been cancelled
CI / 🚀 Publish build assets (push) Has been cancelled
CI / 🚀 Publish Docker Images (DockerHub) (push) Has been cancelled
CI / 🚀 Notify external services (push) Has been cancelled
CI / Update Version Durability (push) Has been cancelled
Release / Release (push) Has been cancelled
Auto-close duplicate issues / auto-close-duplicates (push) Failing after 1s
Code scanning - action / CodeQL-Build (push) Failing after 1s
Some checks failed
Create issues from TODOs / todos (push) Failing after 3s
Close inactive issues / close-issues (push) Has been cancelled
Deploy GitHub Pages / deploy-preview (push) Has been cancelled
CI / ⚙️ Variables Setup (push) Has been cancelled
CI / ⚙️ Test Guard (push) Has been cancelled
CI / 🚀 Notify external services - draft (push) Has been cancelled
CI / 📦 Build Packages (push) Has been cancelled
CI / 📦 Meteor Build (coverage) (push) Has been cancelled
CI / 📦 Meteor Build (production) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], fips) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Publish Docker Images (ghcr.io) (push) Has been cancelled
CI / 📦 Track Image Sizes (push) Has been cancelled
CI / 🔎 Code Check - Action Lint (push) Has been cancelled
CI / 🔎 Code Check (push) Has been cancelled
CI / 🔨 Test Storybook (push) Has been cancelled
CI / 🔨 Test Unit (push) Has been cancelled
CI / 🔨 Test API (CE) (push) Has been cancelled
CI / 🔨 Test API Livechat (CE) (push) Has been cancelled
CI / 🔨 Test UI (CE) (push) Has been cancelled
CI / 🔨 Test API (EE) (push) Has been cancelled
CI / 🔨 Test API Livechat (EE) (push) Has been cancelled
CI / 🔨 Test API Apps (deno-runtime - EE) (push) Has been cancelled
CI / 🔨 Test UI (EE) (push) Has been cancelled
CI / 🔨 Test API (FIPS) (push) Has been cancelled
CI / 🔨 Test API Livechat (FIPS) (push) Has been cancelled
CI / 🔨 Test UI (FIPS) (push) Has been cancelled
CI / 🔨 Test Federation Matrix (push) Has been cancelled
CI / 📊 Report Coverage (push) Has been cancelled
CI / ✅ Tests Done (push) Has been cancelled
CI / 🚀 Publish build assets (push) Has been cancelled
CI / 🚀 Publish Docker Images (DockerHub) (push) Has been cancelled
CI / 🚀 Notify external services (push) Has been cancelled
CI / Update Version Durability (push) Has been cancelled
Release / Release (push) Has been cancelled
Auto-close duplicate issues / auto-close-duplicates (push) Failing after 1s
Code scanning - action / CodeQL-Build (push) Failing after 1s
This commit is contained in:
106
apps/meteor/server/lib/import/slack-users/SlackUsersImporter.ts
Normal file
106
apps/meteor/server/lib/import/slack-users/SlackUsersImporter.ts
Normal file
@@ -0,0 +1,106 @@
|
||||
import fs from 'node:fs';
|
||||
|
||||
import type { IImport, IImportUser } from '@rocket.chat/core-typings';
|
||||
import { Settings } from '@rocket.chat/models';
|
||||
import { parse } from 'csv-parse/lib/sync';
|
||||
|
||||
import { Importer, ProgressStep } from '..';
|
||||
import { RocketChatFile } from '../../media/file';
|
||||
import { notifyOnSettingChanged } from '../../notifyListener';
|
||||
import type { ConverterOptions } from '../classes/ImportDataConverter';
|
||||
import type { ImporterProgress } from '../classes/ImporterProgress';
|
||||
import type { ImporterInfo } from '../definitions/ImporterInfo';
|
||||
|
||||
export class SlackUsersImporter extends Importer {
|
||||
private csvParser: (csv: string) => string[];
|
||||
|
||||
constructor(info: ImporterInfo, importRecord: IImport, converterOptions: ConverterOptions = {}) {
|
||||
super(info, importRecord, converterOptions);
|
||||
|
||||
this.csvParser = parse;
|
||||
}
|
||||
|
||||
override async prepareUsingLocalFile(fullFilePath: string): Promise<ImporterProgress> {
|
||||
this.logger.debug('start preparing import operation');
|
||||
await this.converter.clearImportData();
|
||||
|
||||
const file = fs.readFileSync(fullFilePath);
|
||||
const buffer = Buffer.isBuffer(file) ? file : Buffer.from(file);
|
||||
|
||||
const { contentType } = this.importRecord;
|
||||
const fileName = this.importRecord.file;
|
||||
|
||||
const data = buffer.toString('base64');
|
||||
const dataURI = `data:${contentType};base64,${data}`;
|
||||
|
||||
return this.prepare(dataURI, fileName || '');
|
||||
}
|
||||
|
||||
async prepare(dataURI: string, fileName: string): Promise<ImporterProgress> {
|
||||
this.logger.debug('start preparing import operation');
|
||||
await this.converter.clearImportData();
|
||||
await this.updateRecord({ file: fileName });
|
||||
|
||||
await super.updateProgress(ProgressStep.PREPARING_USERS);
|
||||
const uriResult = RocketChatFile.dataURIParse(dataURI);
|
||||
const buf = Buffer.from(uriResult.image, 'base64');
|
||||
const parsed = this.csvParser(buf.toString());
|
||||
|
||||
let userCount = 0;
|
||||
for (const [index, user] of parsed.entries()) {
|
||||
// Ignore the first column
|
||||
if (index === 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const username = user[0];
|
||||
const email = user[1];
|
||||
if (!email) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const name = user[7] || user[8] || username;
|
||||
|
||||
const newUser: IImportUser = {
|
||||
emails: [email],
|
||||
importIds: [email],
|
||||
username,
|
||||
name,
|
||||
type: 'user',
|
||||
};
|
||||
|
||||
switch (user[2]) {
|
||||
case 'Admin':
|
||||
newUser.roles = ['admin'];
|
||||
break;
|
||||
case 'Bot':
|
||||
newUser.roles = ['bot'];
|
||||
newUser.type = 'bot';
|
||||
break;
|
||||
case 'Deactivated':
|
||||
newUser.deleted = true;
|
||||
break;
|
||||
}
|
||||
|
||||
await this.converter.addUser(newUser);
|
||||
userCount++;
|
||||
}
|
||||
|
||||
if (userCount === 0) {
|
||||
this.logger.error('No users found in the import file.');
|
||||
await super.updateProgress(ProgressStep.ERROR);
|
||||
return super.getProgress();
|
||||
}
|
||||
|
||||
await super.updateProgress(ProgressStep.USER_SELECTION);
|
||||
await super.addCountToTotal(userCount);
|
||||
|
||||
const value = await Settings.incrementValueById('Slack_Users_Importer_Count', userCount, { returnDocument: 'after' });
|
||||
if (value) {
|
||||
void notifyOnSettingChanged(value);
|
||||
}
|
||||
|
||||
await super.updateRecord({ 'count.users': userCount });
|
||||
return super.getProgress();
|
||||
}
|
||||
}
|
||||
8
apps/meteor/server/lib/import/slack-users/index.ts
Normal file
8
apps/meteor/server/lib/import/slack-users/index.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { Importers } from '..';
|
||||
import { SlackUsersImporter } from './SlackUsersImporter';
|
||||
|
||||
Importers.add({
|
||||
key: 'slack-users',
|
||||
name: 'Slack_Users',
|
||||
importer: SlackUsersImporter,
|
||||
});
|
||||
Reference in New Issue
Block a user