From e706451d90390732cbdf917871b8de6e45d71b98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20H=C3=BCttemann?= Date: Mon, 12 Jun 2023 16:51:56 +0200 Subject: [PATCH] Add createMembership function --- src/app.ts | 24 +++++++++++++----------- src/handlers/rooms.ts | 12 ++++++++++++ src/helpers/storage.ts | 8 ++++++++ 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/app.ts b/src/app.ts index ae9906f..dcb22bb 100644 --- a/src/app.ts +++ b/src/app.ts @@ -3,10 +3,14 @@ dotenv.config() import lineByLine from 'n-readlines' import 'reflect-metadata' import { IdMapping } from './entity/IdMapping' -import { Membership } from './entity/Membership' import { RcUser, createUser } from './handlers/users' import log from './helpers/logger' -import { getMapping, initStorage, save } from './helpers/storage' +import { + createMembership, + getMapping, + initStorage, + save, +} from './helpers/storage' import { whoami } from './helpers/synapse' import { RcRoom, createRoom } from './handlers/rooms' @@ -73,14 +77,12 @@ async function loadRcExport(entity: Entities) { log.debug('Mapping added:', mapping) // Add user to room mapping (specific to users) - rcUser.__rooms.forEach(async (rcRoomId: string) => { - const membership = new Membership() - membership.rcRoomId = rcRoomId - membership.rcUserId = rcUser._id - - await save(membership) - log.debug(`${rcUser.username} membership for ${rcRoomId} created`) - }) + Promise.all( + rcUser.__rooms.map(async (rcRoomId: string) => { + await createMembership(rcRoomId, rcUser._id) + log.debug(`${rcUser.username} membership for ${rcRoomId} created`) + }) + ) } break @@ -121,7 +123,7 @@ async function main() { try { await whoami() await initStorage() - // await loadRcExport(Entities.Users) + await loadRcExport(Entities.Users) await loadRcExport(Entities.Rooms) log.info('Done.') } catch (error) { diff --git a/src/handlers/rooms.ts b/src/handlers/rooms.ts index e247c27..e247fbb 100644 --- a/src/handlers/rooms.ts +++ b/src/handlers/rooms.ts @@ -1,4 +1,5 @@ import log from '../helpers/logger' +import { createMembership } from '../helpers/storage' import { axios, getUserSessionOptions } from '../helpers/synapse' import { RcUser } from './users' @@ -60,6 +61,17 @@ export function mapRoom(rcRoom: RcRoom): MatrixRoom { room.is_direct = true room.preset = MatrixRoomPresets.trusted room._creatorId = rcRoom.uids?.[0] || '' + + if (rcRoom.uids) { + Promise.all( + rcRoom.uids.map(async (uid) => { + await createMembership(rcRoom._id, uid) + log.debug(`${uid} membership in direct chat ${rcRoom._id} created`) + }) + ) + } else { + throw new Error('Found a direct chat without uids. This is unexpected.') + } break case RcRoomTypes.chat: diff --git a/src/helpers/storage.ts b/src/helpers/storage.ts index 7192955..3ac80d4 100644 --- a/src/helpers/storage.ts +++ b/src/helpers/storage.ts @@ -28,3 +28,11 @@ export async function save(entity: IdMapping | Membership) { export async function getAccessToken(id: string) { return (await getMapping(id, 0))?.accessToken } + +export async function createMembership(rcRoomId: string, rcUserId: string) { + const membership = new Membership() + membership.rcRoomId = rcRoomId + membership.rcUserId = rcUserId + + await save(membership) +}