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 { IdMapping } from './entity/IdMapping'
import { RcUser, createUser } from './handlers/users' import { RcUser, createUser } from './handlers/users'
import log from './helpers/logger' import log from './helpers/logger'
import { import { getRoomId, getUserId, initStorage, save } from './helpers/storage'
createMembership,
getMapping,
getRoomId,
getUserId,
initStorage,
save,
} from './helpers/storage'
import { whoami } from './helpers/synapse' import { whoami } from './helpers/synapse'
import { RcRoom, createRoom } from './handlers/rooms' import { RcRoom, createRoom } from './handlers/rooms'
@ -77,14 +70,6 @@ async function loadRcExport(entity: Entities) {
await save(mapping) await save(mapping)
log.debug('Mapping added:', 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 break

View File

@ -1,6 +1,7 @@
process.env.REGISTRATION_SHARED_SECRET = 'ThisIsSoSecretWow' process.env.REGISTRATION_SHARED_SECRET = 'ThisIsSoSecretWow'
import { expect, jest, test } from '@jest/globals' import { expect, jest, test } from '@jest/globals'
import axios from 'axios' import axios from 'axios'
import * as storage from '../helpers/storage'
import { import {
MatrixUser, MatrixUser,
RcUser, RcUser,
@ -12,12 +13,15 @@ import {
jest.mock('axios') jest.mock('axios')
const mockedAxios = axios as jest.Mocked<typeof axios> const mockedAxios = axios as jest.Mocked<typeof axios>
jest.mock('../helpers/storage')
const mockedStorage = storage as jest.Mocked<typeof storage>
const rcUser: RcUser = { const rcUser: RcUser = {
_id: 'testRc', _id: 'testRc',
name: 'Tester McDelme', name: 'Tester McDelme',
username: 'testuser', username: 'testuser',
roles: ['user'], roles: ['user'],
__rooms: [], __rooms: ['room0', 'room1'],
} }
const matrixUser: MatrixUser = { const matrixUser: MatrixUser = {
@ -65,4 +69,14 @@ test('creating users', async () => {
// nonce, // nonce,
// mac: 'be0537407ab3c82de908c5763185556e98a7211c', // 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 { createHmac } from 'node:crypto'
import log from '../helpers/logger' import log from '../helpers/logger'
import { axios } from '../helpers/synapse' import { axios } from '../helpers/synapse'
import { createMembership } from '../helpers/storage'
export type RcUser = { export type RcUser = {
_id: string _id: string
@ -64,6 +65,15 @@ async function registerUser(user: MatrixUser): Promise<AccessToken> {
return (await axios.post('/_synapse/admin/v1/register', user)).data 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> { export async function createUser(rcUser: RcUser): Promise<MatrixUser> {
const user = mapUser(rcUser) const user = mapUser(rcUser)
user.nonce = await getUserRegistrationNonce() user.nonce = await getUserRegistrationNonce()
@ -76,5 +86,7 @@ export async function createUser(rcUser: RcUser): Promise<MatrixUser> {
delete user.nonce delete user.nonce
delete user.mac delete user.mac
await parseUserMemberships(rcUser)
return user return user
} }