Merge pull request 'Fix minor things' (#22) from fix-things into main

Reviewed-on: https://git.verdigado.com/NB-Public/rocketchat2matrix/pulls/22
This commit is contained in:
Henrik HerHde Huettemann 2023-06-19 21:05:43 +02:00
commit b1e15242bd
6 changed files with 31 additions and 14 deletions

View File

@ -40,7 +40,7 @@ pipeline:
image: *node_image image: *node_image
commands: commands:
- *create_synapse_access_token - *create_synapse_access_token
- npm test - npm test --ci
node-compile: node-compile:
image: *node_image image: *node_image

View File

@ -2,6 +2,7 @@ import { expect, jest, test } from '@jest/globals'
import axios from 'axios' import axios from 'axios'
import { IdMapping } from '../entity/IdMapping' import { IdMapping } from '../entity/IdMapping'
import * as storage from '../helpers/storage' import * as storage from '../helpers/storage'
import { SessionOptions } from '../helpers/synapse'
import { import {
MatrixRoomPresets, MatrixRoomPresets,
MatrixRoomVisibility, MatrixRoomVisibility,
@ -54,7 +55,7 @@ const rcPrivateRoom = {
u: roomCreator, u: roomCreator,
} }
const sessionOption = { const sessionOption: SessionOptions = {
headers: { Authorization: 'Bearer secretAuthToken' }, headers: { Authorization: 'Bearer secretAuthToken' },
testingOption: 'there might be other options', testingOption: 'there might be other options',
} }

View File

@ -6,6 +6,7 @@ import {
getMemberships, getMemberships,
} from '../helpers/storage' } from '../helpers/storage'
import { import {
SessionOptions,
axios, axios,
formatUserSessionOptions, formatUserSessionOptions,
getUserSessionOptions, getUserSessionOptions,
@ -114,7 +115,7 @@ export async function parseMemberships(rcRoom: RcRoom): Promise<void> {
export async function getCreatorSessionOptions( export async function getCreatorSessionOptions(
creatorId: string creatorId: string
): Promise<object> { ): Promise<SessionOptions | object> {
if (creatorId) { if (creatorId) {
try { try {
const creatorSessionOptions = await getUserSessionOptions(creatorId) const creatorSessionOptions = await getUserSessionOptions(creatorId)
@ -129,7 +130,7 @@ export async function getCreatorSessionOptions(
export async function registerRoom( export async function registerRoom(
room: MatrixRoom, room: MatrixRoom,
creatorSessionOptions: object creatorSessionOptions: SessionOptions | object
): Promise<string> { ): Promise<string> {
return ( return (
await axios.post( await axios.post(
@ -143,7 +144,7 @@ export async function registerRoom(
export async function inviteMember( export async function inviteMember(
inviteeId: string, inviteeId: string,
roomId: string, roomId: string,
creatorSessionOptions: object creatorSessionOptions: SessionOptions | object
): Promise<void> { ): Promise<void> {
log.http(`Invite member ${inviteeId}`) log.http(`Invite member ${inviteeId}`)
await axios.post( await axios.post(

View File

@ -1,5 +1,5 @@
import { expect, jest, test } from '@jest/globals'
import { getUserSessionOptions } from '../helpers/synapse' import { getUserSessionOptions } from '../helpers/synapse'
import { jest, expect, test } from '@jest/globals'
import { getCreatorSessionOptions } from './rooms' import { getCreatorSessionOptions } from './rooms'
jest.mock('../helpers/synapse') jest.mock('../helpers/synapse')

View File

@ -10,26 +10,32 @@ const AppDataSource = new DataSource({
logging: false, logging: false,
}) })
export async function initStorage() { export async function initStorage(): Promise<void> {
await AppDataSource.initialize() await AppDataSource.initialize()
} }
export function getMapping(id: string, type: number) { export function getMapping(
id: string,
type: number
): Promise<IdMapping | null> {
return AppDataSource.manager.findOneBy(IdMapping, { return AppDataSource.manager.findOneBy(IdMapping, {
rcId: id, rcId: id,
type: type, type: type,
}) })
} }
export async function save(entity: IdMapping | Membership) { export async function save(entity: IdMapping | Membership): Promise<void> {
await AppDataSource.manager.save(entity) await AppDataSource.manager.save(entity)
} }
export async function getAccessToken(id: string) { export async function getAccessToken(id: string): Promise<string | undefined> {
return (await getMapping(id, 0))?.accessToken return (await getMapping(id, 0))?.accessToken
} }
export async function createMembership(rcRoomId: string, rcUserId: string) { export async function createMembership(
rcRoomId: string,
rcUserId: string
): Promise<void> {
const membership = new Membership() const membership = new Membership()
membership.rcRoomId = rcRoomId membership.rcRoomId = rcRoomId
membership.rcUserId = rcUserId membership.rcUserId = rcUserId
@ -37,7 +43,7 @@ export async function createMembership(rcRoomId: string, rcUserId: string) {
await save(membership) await save(membership)
} }
export async function getMemberships(rcRoomId: string) { export async function getMemberships(rcRoomId: string): Promise<string[]> {
return ( return (
await AppDataSource.manager.find(Membership, { await AppDataSource.manager.find(Membership, {
select: { select: {

View File

@ -7,6 +7,13 @@ axios.defaults.baseURL = 'http://localhost:8008'
axios.defaults.headers.common['Authorization'] = `Bearer ${access_token}` axios.defaults.headers.common['Authorization'] = `Bearer ${access_token}`
axios.defaults.headers.post['Content-Type'] = 'application/json' axios.defaults.headers.post['Content-Type'] = 'application/json'
export interface SessionOptions {
headers: {
Authorization: string
}
[others: string]: unknown
}
export { default as axios } from 'axios' export { default as axios } from 'axios'
export const whoami = () => export const whoami = () =>
new Promise<void>((resolve, reject) => { new Promise<void>((resolve, reject) => {
@ -22,11 +29,13 @@ export const whoami = () =>
}) })
}) })
export function formatUserSessionOptions(accessToken: string) { export function formatUserSessionOptions(accessToken: string): SessionOptions {
return { headers: { Authorization: `Bearer ${accessToken}` } } return { headers: { Authorization: `Bearer ${accessToken}` } }
} }
export async function getUserSessionOptions(id: string) { export async function getUserSessionOptions(
id: string
): Promise<SessionOptions> {
const accessToken = await getAccessToken(id) const accessToken = await getAccessToken(id)
if (!accessToken) { if (!accessToken) {
throw new Error(`Could not retrieve access token for ID ${id}`) throw new Error(`Could not retrieve access token for ID ${id}`)