From 4692c7edea34345d57d0bb0bde4fde4237e23986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20H=C3=BCttemann?= Date: Wed, 7 Jun 2023 18:23:20 +0200 Subject: [PATCH] Move handlers and clean up --- src/app.ts | 6 +++--- src/{ => handlers}/rooms.test.ts | 0 src/{ => handlers}/rooms.ts | 21 +++++++++++++-------- src/{ => handlers}/users.test.ts | 8 +++++++- src/{ => handlers}/users.ts | 4 ++-- src/helpers/storage.ts | 4 ++++ src/helpers/synapse.ts | 2 +- 7 files changed, 30 insertions(+), 15 deletions(-) rename src/{ => handlers}/rooms.test.ts (100%) rename src/{ => handlers}/rooms.ts (76%) rename src/{ => handlers}/users.test.ts (94%) rename src/{ => handlers}/users.ts (95%) diff --git a/src/app.ts b/src/app.ts index 548d761..43c4ad0 100644 --- a/src/app.ts +++ b/src/app.ts @@ -4,10 +4,10 @@ import lineByLine from 'n-readlines' import 'reflect-metadata' import { IdMapping } from './entity/IdMapping' import { Membership } from './entity/Membership' +import { RcUser, createUser } from './handlers/users' import log from './helpers/logger' +import { getMapping, initStorage, save } from './helpers/storage' import { whoami } from './helpers/synapse' -import { RcUser, createUser } from './users' -import { getMapping, save, setMapping } from './helpers/storage' log.info('rocketchat2matrix starts.') @@ -101,7 +101,7 @@ async function loadRcExport(entity: Entities) { async function main() { try { await whoami() - await AppDataSource.initialize() + await initStorage() await loadRcExport(Entities.Users) log.info('Done.') } catch (error) { diff --git a/src/rooms.test.ts b/src/handlers/rooms.test.ts similarity index 100% rename from src/rooms.test.ts rename to src/handlers/rooms.test.ts diff --git a/src/rooms.ts b/src/handlers/rooms.ts similarity index 76% rename from src/rooms.ts rename to src/handlers/rooms.ts index df7afe6..e5f022c 100644 --- a/src/rooms.ts +++ b/src/handlers/rooms.ts @@ -1,6 +1,5 @@ -import log from './helpers/logger' -import { getAccessToken } from './helpers/storage' -import { axios, getUserSessionOptions } from './helpers/synapse' +import log from '../helpers/logger' +import { axios, getUserSessionOptions } from '../helpers/synapse' import { RcUser } from './users' export const enum RcRoomTypes { @@ -36,7 +35,7 @@ export type MatrixRoom = { topic?: string is_direct?: boolean preset?: MatrixRoomPresets - _creatorId?: string + _creatorId: string } export function mapRoom(rcRoom: RcRoom): MatrixRoom { @@ -44,6 +43,7 @@ export function mapRoom(rcRoom: RcRoom): MatrixRoom { creation_content: { 'm.federate': false, }, + _creatorId: '', } rcRoom.name && (room.name = rcRoom.name) rcRoom.name && (room.room_alias_name = rcRoom.name) @@ -53,17 +53,17 @@ export function mapRoom(rcRoom: RcRoom): MatrixRoom { case 'd': room.is_direct = true room.preset = MatrixRoomPresets.trusted - room._creatorId = rcRoom.uids?.[0] + room._creatorId = rcRoom.uids?.[0] || '' break case 'c': room.preset = MatrixRoomPresets.public - room._creatorId = rcRoom.u?._id + room._creatorId = rcRoom.u?._id || '' break case 'p': room.preset = MatrixRoomPresets.private - room._creatorId = rcRoom.u?._id + room._creatorId = rcRoom.u?._id || '' break default: @@ -71,6 +71,11 @@ export function mapRoom(rcRoom: RcRoom): MatrixRoom { log.error(message) throw new Error(message) } + if (!room._creatorId) { + const message = `Creator ID could not be determined for room of type ${rcRoom.t}` + log.error(message) + throw new Error(message) + } return room } @@ -80,7 +85,7 @@ export async function createRoom(rcRoom: RcRoom): Promise { await axios.post( '/_matrix/client/v3/createRoom', room, - await getUserSessionOptions(room._creatorId!) + await getUserSessionOptions(room._creatorId) ) ).data.room_id diff --git a/src/users.test.ts b/src/handlers/users.test.ts similarity index 94% rename from src/users.test.ts rename to src/handlers/users.test.ts index 2849020..774e404 100644 --- a/src/users.test.ts +++ b/src/handlers/users.test.ts @@ -1,6 +1,12 @@ process.env.REGISTRATION_SHARED_SECRET = 'ThisIsSoSecretWow' import axios from 'axios' -import { MatrixUser, RcUser, createUser, generateHmac, mapUser } from './users' +import { + MatrixUser, + RcUser, + createUser, + generateHmac, + mapUser, +} from '../handlers/users' jest.mock('axios') const mockedAxios = axios as jest.Mocked diff --git a/src/users.ts b/src/handlers/users.ts similarity index 95% rename from src/users.ts rename to src/handlers/users.ts index d139b26..c6867ed 100644 --- a/src/users.ts +++ b/src/handlers/users.ts @@ -1,6 +1,6 @@ -import log from './helpers/logger' -import { axios } from './helpers/synapse' import { createHmac } from 'node:crypto' +import log from '../helpers/logger' +import { axios } from '../helpers/synapse' export type RcUser = { _id: string diff --git a/src/helpers/storage.ts b/src/helpers/storage.ts index 6d31580..7192955 100644 --- a/src/helpers/storage.ts +++ b/src/helpers/storage.ts @@ -10,6 +10,10 @@ const AppDataSource = new DataSource({ logging: false, }) +export async function initStorage() { + await AppDataSource.initialize() +} + export function getMapping(id: string, type: number) { return AppDataSource.manager.findOneBy(IdMapping, { rcId: id, diff --git a/src/helpers/synapse.ts b/src/helpers/synapse.ts index 70b8f30..aaad424 100644 --- a/src/helpers/synapse.ts +++ b/src/helpers/synapse.ts @@ -1,5 +1,5 @@ -import { access_token } from '../config/synapse_access_token.json' import axios from 'axios' +import { access_token } from '../config/synapse_access_token.json' import log from './logger' import { getAccessToken } from './storage'