Move membership creation to users

This commit is contained in:
Henrik Hüttemann 2023-06-22 16:17:05 +02:00
parent 3e1169235c
commit de87228b8d
No known key found for this signature in database
GPG Key ID: 9F7BD10E0A8A111E
3 changed files with 28 additions and 17 deletions

View File

@ -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

View File

@ -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<typeof axios>
jest.mock('../helpers/storage')
const mockedStorage = storage as jest.Mocked<typeof storage>
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)
})

View File

@ -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<AccessToken> {
return (await axios.post('/_synapse/admin/v1/register', user)).data
}
async function parseUserMemberships(rcUser: RcUser): Promise<void> {
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<MatrixUser> {
const user = mapUser(rcUser)
user.nonce = await getUserRegistrationNonce()
@ -76,5 +86,7 @@ export async function createUser(rcUser: RcUser): Promise<MatrixUser> {
delete user.nonce
delete user.mac
await parseUserMemberships(rcUser)
return user
}