diff --git a/src/app.ts b/src/app.ts index 869c105..f4630b1 100644 --- a/src/app.ts +++ b/src/app.ts @@ -5,14 +5,7 @@ import 'reflect-metadata' import { IdMapping } from './entity/IdMapping' import { RcUser, createUser } from './handlers/users' import log from './helpers/logger' -import { - createMembership, - getMapping, - getRoomId, - getUserId, - initStorage, - save, -} from './helpers/storage' +import { getRoomId, getUserId, initStorage, save } from './helpers/storage' import { whoami } from './helpers/synapse' import { RcRoom, createRoom } from './handlers/rooms' @@ -77,14 +70,6 @@ async function loadRcExport(entity: Entities) { await save(mapping) log.debug('Mapping added:', mapping) - - // Add user to room mapping (specific to users) - await Promise.all( - rcUser.__rooms.map(async (rcRoomId: string) => { - await createMembership(rcRoomId, rcUser._id) - log.debug(`${rcUser.username} membership for ${rcRoomId} created`) - }) - ) } break diff --git a/src/handlers/users.test.ts b/src/handlers/users.test.ts index 2882fa8..cb86e11 100644 --- a/src/handlers/users.test.ts +++ b/src/handlers/users.test.ts @@ -1,6 +1,7 @@ process.env.REGISTRATION_SHARED_SECRET = 'ThisIsSoSecretWow' import { expect, jest, test } from '@jest/globals' import axios from 'axios' +import * as storage from '../helpers/storage' import { MatrixUser, RcUser, @@ -12,12 +13,15 @@ import { jest.mock('axios') const mockedAxios = axios as jest.Mocked +jest.mock('../helpers/storage') +const mockedStorage = storage as jest.Mocked + const rcUser: RcUser = { _id: 'testRc', name: 'Tester McDelme', username: 'testuser', roles: ['user'], - __rooms: [], + __rooms: ['room0', 'room1'], } const matrixUser: MatrixUser = { @@ -65,4 +69,14 @@ test('creating users', async () => { // nonce, // mac: 'be0537407ab3c82de908c5763185556e98a7211c', // }) + + expect(mockedStorage.createMembership).toHaveBeenCalledWith( + rcUser.__rooms[0], + rcUser._id + ) + expect(mockedStorage.createMembership).toHaveBeenCalledWith( + rcUser.__rooms[1], + rcUser._id + ) + expect(mockedStorage.createMembership).toHaveBeenCalledTimes(2) }) diff --git a/src/handlers/users.ts b/src/handlers/users.ts index c6867ed..b6a59bc 100644 --- a/src/handlers/users.ts +++ b/src/handlers/users.ts @@ -1,6 +1,7 @@ import { createHmac } from 'node:crypto' import log from '../helpers/logger' import { axios } from '../helpers/synapse' +import { createMembership } from '../helpers/storage' export type RcUser = { _id: string @@ -64,6 +65,15 @@ async function registerUser(user: MatrixUser): Promise { return (await axios.post('/_synapse/admin/v1/register', user)).data } +async function parseUserMemberships(rcUser: RcUser): Promise { + await Promise.all( + rcUser.__rooms.map(async (rcRoomId: string) => { + await createMembership(rcRoomId, rcUser._id) + log.debug(`${rcUser.username} membership for ${rcRoomId} created`) + }) + ) +} + export async function createUser(rcUser: RcUser): Promise { const user = mapUser(rcUser) user.nonce = await getUserRegistrationNonce() @@ -76,5 +86,7 @@ export async function createUser(rcUser: RcUser): Promise { delete user.nonce delete user.mac + await parseUserMemberships(rcUser) + return user }