Edit mapping types to use constants
This commit is contained in:
parent
6b723db5a1
commit
8ba2ce4cab
27
src/Entities.ts
Normal file
27
src/Entities.ts
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
export const enum Entity {
|
||||||
|
Users = 'users',
|
||||||
|
Rooms = 'rooms',
|
||||||
|
Messages = 'messages',
|
||||||
|
}
|
||||||
|
|
||||||
|
type EntityConfig = {
|
||||||
|
filename: string
|
||||||
|
mappingType: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export const entities: {
|
||||||
|
[key in Entity]: EntityConfig
|
||||||
|
} = {
|
||||||
|
users: {
|
||||||
|
filename: 'users.json',
|
||||||
|
mappingType: 0,
|
||||||
|
},
|
||||||
|
rooms: {
|
||||||
|
filename: 'rocketchat_room.json',
|
||||||
|
mappingType: 1,
|
||||||
|
},
|
||||||
|
messages: {
|
||||||
|
filename: 'rocketchat_message.json',
|
||||||
|
mappingType: 2,
|
||||||
|
},
|
||||||
|
} as const
|
||||||
39
src/app.ts
39
src/app.ts
@ -7,51 +7,26 @@ import { handle as handleUser } from './handlers/users'
|
|||||||
import log from './helpers/logger'
|
import log from './helpers/logger'
|
||||||
import { initStorage } from './helpers/storage'
|
import { initStorage } from './helpers/storage'
|
||||||
import { whoami } from './helpers/synapse'
|
import { whoami } from './helpers/synapse'
|
||||||
|
import { Entity, entities } from './Entities'
|
||||||
|
|
||||||
log.info('rocketchat2matrix starts.')
|
log.info('rocketchat2matrix starts.')
|
||||||
|
|
||||||
const enum Entities {
|
async function loadRcExport(entity: Entity) {
|
||||||
Users = 'users',
|
|
||||||
Rooms = 'rooms',
|
|
||||||
Messages = 'messages',
|
|
||||||
}
|
|
||||||
|
|
||||||
type EntityConfig = {
|
|
||||||
filename: string
|
|
||||||
mappingType: number
|
|
||||||
}
|
|
||||||
|
|
||||||
const entities: { [key in Entities]: EntityConfig } = {
|
|
||||||
users: {
|
|
||||||
filename: 'users.json',
|
|
||||||
mappingType: 0,
|
|
||||||
},
|
|
||||||
rooms: {
|
|
||||||
filename: 'rocketchat_room.json',
|
|
||||||
mappingType: 1,
|
|
||||||
},
|
|
||||||
messages: {
|
|
||||||
filename: 'rocketchat_message.json',
|
|
||||||
mappingType: 2,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
async function loadRcExport(entity: Entities) {
|
|
||||||
const rl = new lineByLine(`./inputs/${entities[entity].filename}`)
|
const rl = new lineByLine(`./inputs/${entities[entity].filename}`)
|
||||||
|
|
||||||
let line: false | Buffer
|
let line: false | Buffer
|
||||||
while ((line = rl.next())) {
|
while ((line = rl.next())) {
|
||||||
const item = JSON.parse(line.toString())
|
const item = JSON.parse(line.toString())
|
||||||
switch (entity) {
|
switch (entity) {
|
||||||
case Entities.Users:
|
case Entity.Users:
|
||||||
await handleUser(item)
|
await handleUser(item)
|
||||||
break
|
break
|
||||||
|
|
||||||
case Entities.Rooms:
|
case Entity.Rooms:
|
||||||
await handleRoom(item)
|
await handleRoom(item)
|
||||||
break
|
break
|
||||||
|
|
||||||
case Entities.Messages:
|
case Entity.Messages:
|
||||||
log.debug(`Message: ${item.name}`)
|
log.debug(`Message: ${item.name}`)
|
||||||
break
|
break
|
||||||
|
|
||||||
@ -66,9 +41,9 @@ async function main() {
|
|||||||
await whoami()
|
await whoami()
|
||||||
await initStorage()
|
await initStorage()
|
||||||
log.info('Parsing users')
|
log.info('Parsing users')
|
||||||
await loadRcExport(Entities.Users)
|
await loadRcExport(Entity.Users)
|
||||||
log.info('Parsing rooms')
|
log.info('Parsing rooms')
|
||||||
await loadRcExport(Entities.Rooms)
|
await loadRcExport(Entity.Rooms)
|
||||||
log.info('Done.')
|
log.info('Done.')
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log.error(`Encountered an error while booting up: ${error}`, error)
|
log.error(`Encountered an error while booting up: ${error}`, error)
|
||||||
|
|||||||
@ -17,6 +17,7 @@ import {
|
|||||||
createDirectChatMemberships,
|
createDirectChatMemberships,
|
||||||
registerRoom,
|
registerRoom,
|
||||||
} from './rooms'
|
} from './rooms'
|
||||||
|
import { Entity, entities } from '../Entities'
|
||||||
|
|
||||||
jest.mock('axios')
|
jest.mock('axios')
|
||||||
const mockedAxios = axios as jest.Mocked<typeof axios>
|
const mockedAxios = axios as jest.Mocked<typeof axios>
|
||||||
@ -177,7 +178,7 @@ test('accepting invitation by joining the room', async () => {
|
|||||||
rcId: 'whatever',
|
rcId: 'whatever',
|
||||||
matrixId: 'Neo',
|
matrixId: 'Neo',
|
||||||
accessToken: 'secretAuthToken',
|
accessToken: 'secretAuthToken',
|
||||||
type: 0,
|
type: entities[Entity.Users].mappingType,
|
||||||
},
|
},
|
||||||
room_id
|
room_id
|
||||||
)
|
)
|
||||||
@ -202,7 +203,7 @@ test('filtering members', async () => {
|
|||||||
return {
|
return {
|
||||||
rcId,
|
rcId,
|
||||||
matrixId: `@${rcId}:matrix`,
|
matrixId: `@${rcId}:matrix`,
|
||||||
type: type || 0,
|
type: type || entities[Entity.Users].mappingType,
|
||||||
accessToken: 'accessToken',
|
accessToken: 'accessToken',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -215,9 +216,18 @@ test('filtering members', async () => {
|
|||||||
mockMapping('existingUser'),
|
mockMapping('existingUser'),
|
||||||
mockMapping('otherExistingUser'),
|
mockMapping('otherExistingUser'),
|
||||||
])
|
])
|
||||||
expect(mockedStorage.getMapping).toBeCalledWith('existingUser', 0)
|
expect(mockedStorage.getMapping).toBeCalledWith(
|
||||||
expect(mockedStorage.getMapping).toBeCalledWith('otherExistingUser', 0)
|
'existingUser',
|
||||||
expect(mockedStorage.getMapping).toBeCalledWith('excludedUser', 0)
|
entities[Entity.Users].mappingType
|
||||||
|
)
|
||||||
|
expect(mockedStorage.getMapping).toBeCalledWith(
|
||||||
|
'otherExistingUser',
|
||||||
|
entities[Entity.Users].mappingType
|
||||||
|
)
|
||||||
|
expect(mockedStorage.getMapping).toBeCalledWith(
|
||||||
|
'excludedUser',
|
||||||
|
entities[Entity.Users].mappingType
|
||||||
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
test('creating mapping', async () => {
|
test('creating mapping', async () => {
|
||||||
@ -227,7 +237,7 @@ test('creating mapping', async () => {
|
|||||||
expect(mockedStorage.save).toHaveBeenCalledWith({
|
expect(mockedStorage.save).toHaveBeenCalledWith({
|
||||||
rcId: rcPublicRoom._id,
|
rcId: rcPublicRoom._id,
|
||||||
matrixId: room_id,
|
matrixId: room_id,
|
||||||
type: 1,
|
type: entities[Entity.Rooms].mappingType,
|
||||||
accessToken: undefined,
|
accessToken: undefined,
|
||||||
} as IdMapping)
|
} as IdMapping)
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { Entity, entities } from '../Entities'
|
||||||
import { IdMapping } from '../entity/IdMapping'
|
import { IdMapping } from '../entity/IdMapping'
|
||||||
import log from '../helpers/logger'
|
import log from '../helpers/logger'
|
||||||
import {
|
import {
|
||||||
@ -193,7 +194,7 @@ export async function createMapping(
|
|||||||
const roomMapping = new IdMapping()
|
const roomMapping = new IdMapping()
|
||||||
roomMapping.rcId = rcId
|
roomMapping.rcId = rcId
|
||||||
roomMapping.matrixId = matrixRoom.room_id
|
roomMapping.matrixId = matrixRoom.room_id
|
||||||
roomMapping.type = 1
|
roomMapping.type = entities[Entity.Rooms].mappingType
|
||||||
|
|
||||||
await save(roomMapping)
|
await save(roomMapping)
|
||||||
log.debug('Mapping added:', roomMapping)
|
log.debug('Mapping added:', roomMapping)
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import {
|
|||||||
userIsExcluded,
|
userIsExcluded,
|
||||||
} from '../handlers/users'
|
} from '../handlers/users'
|
||||||
import { IdMapping } from '../entity/IdMapping'
|
import { IdMapping } from '../entity/IdMapping'
|
||||||
|
import { Entity, entities } from '../Entities'
|
||||||
|
|
||||||
jest.mock('axios')
|
jest.mock('axios')
|
||||||
const mockedAxios = axios as jest.Mocked<typeof axios>
|
const mockedAxios = axios as jest.Mocked<typeof axios>
|
||||||
@ -104,7 +105,7 @@ test('creating mapping', async () => {
|
|||||||
expect(mockedStorage.save).toHaveBeenCalledWith({
|
expect(mockedStorage.save).toHaveBeenCalledWith({
|
||||||
rcId: rcUser._id,
|
rcId: rcUser._id,
|
||||||
matrixId: matrixUser.user_id,
|
matrixId: matrixUser.user_id,
|
||||||
type: 0,
|
type: entities[Entity.Users].mappingType,
|
||||||
accessToken: matrixUser.access_token,
|
accessToken: matrixUser.access_token,
|
||||||
} as IdMapping)
|
} as IdMapping)
|
||||||
})
|
})
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import log from '../helpers/logger'
|
|||||||
import { axios } from '../helpers/synapse'
|
import { axios } from '../helpers/synapse'
|
||||||
import { createMembership, getUserId, save } from '../helpers/storage'
|
import { createMembership, getUserId, save } from '../helpers/storage'
|
||||||
import { IdMapping } from '../entity/IdMapping'
|
import { IdMapping } from '../entity/IdMapping'
|
||||||
|
import { Entity, entities } from '../Entities'
|
||||||
|
|
||||||
export type RcUser = {
|
export type RcUser = {
|
||||||
_id: string
|
_id: string
|
||||||
@ -99,7 +100,7 @@ export async function createMapping(
|
|||||||
const mapping = new IdMapping()
|
const mapping = new IdMapping()
|
||||||
mapping.rcId = rcId
|
mapping.rcId = rcId
|
||||||
mapping.matrixId = matrixUser.user_id
|
mapping.matrixId = matrixUser.user_id
|
||||||
mapping.type = 0
|
mapping.type = entities[Entity.Users].mappingType
|
||||||
mapping.accessToken = matrixUser.access_token
|
mapping.accessToken = matrixUser.access_token
|
||||||
|
|
||||||
await save(mapping)
|
await save(mapping)
|
||||||
|
|||||||
@ -13,11 +13,12 @@ import {
|
|||||||
} from './storage'
|
} from './storage'
|
||||||
import { IdMapping } from '../entity/IdMapping'
|
import { IdMapping } from '../entity/IdMapping'
|
||||||
import { Membership } from '../entity/Membership'
|
import { Membership } from '../entity/Membership'
|
||||||
|
import { Entity, entities } from '../Entities'
|
||||||
|
|
||||||
const mapping = new IdMapping()
|
const mapping = new IdMapping()
|
||||||
mapping.rcId = 'rcId'
|
mapping.rcId = 'rcId'
|
||||||
mapping.matrixId = 'matrixId'
|
mapping.matrixId = 'matrixId'
|
||||||
mapping.type = 0
|
mapping.type = entities[Entity.Users].mappingType
|
||||||
mapping.accessToken = 'accessToken'
|
mapping.accessToken = 'accessToken'
|
||||||
|
|
||||||
const membership = new Membership()
|
const membership = new Membership()
|
||||||
@ -73,7 +74,7 @@ test('get room by id', async () => {
|
|||||||
const room = new IdMapping()
|
const room = new IdMapping()
|
||||||
room.rcId = 'rcRoom'
|
room.rcId = 'rcRoom'
|
||||||
room.matrixId = 'matrixRoom'
|
room.matrixId = 'matrixRoom'
|
||||||
room.type = 1
|
room.type = entities[Entity.Rooms].mappingType
|
||||||
await save(room)
|
await save(room)
|
||||||
|
|
||||||
await expect(getRoomId(room.rcId)).resolves.toBe(room.matrixId)
|
await expect(getRoomId(room.rcId)).resolves.toBe(room.matrixId)
|
||||||
@ -84,7 +85,7 @@ test('get message by id', async () => {
|
|||||||
const message = new IdMapping()
|
const message = new IdMapping()
|
||||||
message.rcId = 'rcMessage'
|
message.rcId = 'rcMessage'
|
||||||
message.matrixId = 'matrixMessage'
|
message.matrixId = 'matrixMessage'
|
||||||
message.type = 2
|
message.type = entities[Entity.Messages].mappingType
|
||||||
await save(message)
|
await save(message)
|
||||||
|
|
||||||
await expect(getMessageId(message.rcId)).resolves.toBe(message.matrixId)
|
await expect(getMessageId(message.rcId)).resolves.toBe(message.matrixId)
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import { DataSource } from 'typeorm'
|
import { DataSource } from 'typeorm'
|
||||||
import { IdMapping } from '../entity/IdMapping'
|
import { IdMapping } from '../entity/IdMapping'
|
||||||
import { Membership } from '../entity/Membership'
|
import { Membership } from '../entity/Membership'
|
||||||
|
import { Entity, entities } from '../Entities'
|
||||||
|
|
||||||
const AppDataSource = new DataSource({
|
const AppDataSource = new DataSource({
|
||||||
type: 'sqlite',
|
type: 'sqlite',
|
||||||
@ -29,7 +30,7 @@ export async function save(entity: IdMapping | Membership): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getAccessToken(id: string): Promise<string | undefined> {
|
export async function getAccessToken(id: string): Promise<string | undefined> {
|
||||||
return (await getMapping(id, 0))?.accessToken
|
return (await getMapping(id, entities[Entity.Users].mappingType))?.accessToken
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createMembership(
|
export async function createMembership(
|
||||||
@ -57,13 +58,14 @@ export async function getMemberships(rcRoomId: string): Promise<string[]> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getUserId(rcId: string): Promise<string | undefined> {
|
export async function getUserId(rcId: string): Promise<string | undefined> {
|
||||||
return (await getMapping(rcId, 0))?.matrixId
|
return (await getMapping(rcId, entities[Entity.Users].mappingType))?.matrixId
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getRoomId(rcId: string): Promise<string | undefined> {
|
export async function getRoomId(rcId: string): Promise<string | undefined> {
|
||||||
return (await getMapping(rcId, 1))?.matrixId
|
return (await getMapping(rcId, entities[Entity.Rooms].mappingType))?.matrixId
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getMessageId(rcId: string): Promise<string | undefined> {
|
export async function getMessageId(rcId: string): Promise<string | undefined> {
|
||||||
return (await getMapping(rcId, 2))?.matrixId
|
return (await getMapping(rcId, entities[Entity.Messages].mappingType))
|
||||||
|
?.matrixId
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user