Add membership handling
This commit is contained in:
parent
8b8b7b290d
commit
ab597195da
@ -51,7 +51,7 @@ async function loadRcExport(entity: Entities) {
|
|||||||
switch (entity) {
|
switch (entity) {
|
||||||
case Entities.Users:
|
case Entities.Users:
|
||||||
const rcUser: RcUser = item
|
const rcUser: RcUser = item
|
||||||
log.debug(`Parsing user: ${rcUser.name}: ${rcUser._id}`)
|
log.info(`Parsing user: ${rcUser.name}: ${rcUser._id}`)
|
||||||
|
|
||||||
// Check for exclusion
|
// Check for exclusion
|
||||||
if (
|
if (
|
||||||
@ -89,7 +89,7 @@ async function loadRcExport(entity: Entities) {
|
|||||||
|
|
||||||
case Entities.Rooms:
|
case Entities.Rooms:
|
||||||
const rcRoom: RcRoom = item
|
const rcRoom: RcRoom = item
|
||||||
log.debug(`Room: ${rcRoom.name}`, rcRoom)
|
log.info(`Parsing room ${rcRoom.name || 'with ID: ' + rcRoom._id}`)
|
||||||
|
|
||||||
let roomMapping = await getMapping(
|
let roomMapping = await getMapping(
|
||||||
rcRoom._id,
|
rcRoom._id,
|
||||||
|
|||||||
@ -1,5 +1,10 @@
|
|||||||
|
import { IdMapping } from '../entity/IdMapping'
|
||||||
import log from '../helpers/logger'
|
import log from '../helpers/logger'
|
||||||
import { createMembership } from '../helpers/storage'
|
import {
|
||||||
|
createMembership,
|
||||||
|
getMapping,
|
||||||
|
getMemberships,
|
||||||
|
} from '../helpers/storage'
|
||||||
import { axios, getUserSessionOptions } from '../helpers/synapse'
|
import { axios, getUserSessionOptions } from '../helpers/synapse'
|
||||||
import { RcUser } from './users'
|
import { RcUser } from './users'
|
||||||
|
|
||||||
@ -102,11 +107,13 @@ export async function parseMemberships(rcRoom: RcRoom) {
|
|||||||
|
|
||||||
export async function createRoom(rcRoom: RcRoom): Promise<MatrixRoom> {
|
export async function createRoom(rcRoom: RcRoom): Promise<MatrixRoom> {
|
||||||
const room: MatrixRoom = mapRoom(rcRoom)
|
const room: MatrixRoom = mapRoom(rcRoom)
|
||||||
|
const creatorId = room._creatorId || ''
|
||||||
|
delete room._creatorId
|
||||||
await parseMemberships(rcRoom)
|
await parseMemberships(rcRoom)
|
||||||
let sessionOptions = {}
|
let sessionOptions = {}
|
||||||
if (room._creatorId) {
|
if (room._creatorId) {
|
||||||
try {
|
try {
|
||||||
sessionOptions = await getUserSessionOptions(room._creatorId)
|
sessionOptions = await getUserSessionOptions(creatorId)
|
||||||
log.debug('Room user session generated:', sessionOptions)
|
log.debug('Room user session generated:', sessionOptions)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log.warn(error)
|
log.warn(error)
|
||||||
@ -114,13 +121,46 @@ export async function createRoom(rcRoom: RcRoom): Promise<MatrixRoom> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug('Creating room:', room)
|
log.debug('Creating room:', room)
|
||||||
delete room._creatorId
|
|
||||||
|
|
||||||
room.room_id = (
|
room.room_id = (
|
||||||
await axios.post('/_matrix/client/v3/createRoom', room, sessionOptions)
|
await axios.post('/_matrix/client/v3/createRoom', room, sessionOptions)
|
||||||
).data.room_id
|
).data.room_id
|
||||||
|
|
||||||
// TODO: Invite members and let them join
|
// TODO: Invite members and let them join
|
||||||
|
const members = await getMemberships(rcRoom._id)
|
||||||
|
log.info(`Inviting members to room ${rcRoom._id}:`, members)
|
||||||
|
|
||||||
|
const memberMappings = (
|
||||||
|
await Promise.all(
|
||||||
|
members
|
||||||
|
.filter((rcMemberId) => rcMemberId != creatorId)
|
||||||
|
.map(async (rcMemberId) => await getMapping(rcMemberId, 0))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.filter((mapping): mapping is IdMapping => mapping != null)
|
||||||
|
.map(async (mapping) => {
|
||||||
|
log.http(`Invite member ${mapping.rcId} aka. ${mapping.matrixId}`)
|
||||||
|
await axios.post(
|
||||||
|
`/_matrix/client/v3/rooms/${room.room_id}/invite`,
|
||||||
|
{ user_id: mapping.matrixId },
|
||||||
|
sessionOptions
|
||||||
|
)
|
||||||
|
|
||||||
|
log.http(
|
||||||
|
`Accepting invitation for member ${mapping.rcId} aka. ${mapping.matrixId}`
|
||||||
|
)
|
||||||
|
await axios.post(
|
||||||
|
`/_matrix/client/v3/join/${room.room_id}`,
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${mapping.accessToken}`,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
await Promise.all(memberMappings)
|
||||||
|
|
||||||
return room
|
return room
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,3 +36,16 @@ export async function createMembership(rcRoomId: string, rcUserId: string) {
|
|||||||
|
|
||||||
await save(membership)
|
await save(membership)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getMemberships(rcRoomId: string) {
|
||||||
|
return (
|
||||||
|
await AppDataSource.manager.find(Membership, {
|
||||||
|
select: {
|
||||||
|
rcUserId: true,
|
||||||
|
},
|
||||||
|
where: {
|
||||||
|
rcRoomId: rcRoomId,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
).map((entity) => entity.rcUserId)
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user