Compare commits

..

1 Commits

Author SHA1 Message Date
Renovate Bot
b3463cb971 Renovate: Update all non-major dependencies 2023-10-25 18:57:32 +00:00
5 changed files with 11 additions and 59 deletions

View File

@ -1,5 +1,5 @@
variables: variables:
- &node_image 'node:20.8.1-alpine' - &node_image 'node:20.9.0-alpine'
- &create_synapse_access_token >- - &create_synapse_access_token >-
echo '{"user_id":"ci-dummy","access_token":"ci-dummy","home_server":"ci-dummy","device_id":"ci-dummy"}' > src/config/synapse_access_token.json echo '{"user_id":"ci-dummy","access_token":"ci-dummy","home_server":"ci-dummy","device_id":"ci-dummy"}' > src/config/synapse_access_token.json

View File

@ -3,7 +3,7 @@ version: '3'
services: services:
synapse: synapse:
image: docker.io/matrixdotorg/synapse:v1.94.0 image: docker.io/matrixdotorg/synapse:v1.95.0
# Since synapse does not retry to connect to the database, restart upon # Since synapse does not retry to connect to the database, restart upon
# failure # failure
restart: "no" restart: "no"

View File

@ -144,20 +144,7 @@ export async function handle(rcMessage: RcMessage): Promise<void> {
) )
return return
} }
const roomCreatorId = (
await axios.get(`/_synapse/admin/v1/rooms/${room_id}`)
).data.creator
if (!roomCreatorId) {
log.warn(
`Could not determine room creator for room ${room_id}, using admin credentials.`
)
}
if (roomCreatorId == matrixUser) {
log.warn(
`Room creator ${roomCreatorId} left rocketchat room ${room_id}, skipping to prevent being unable to rejoin.`
)
return
}
log.http(`User ${matrixUser} leaves room ${room_id}`) log.http(`User ${matrixUser} leaves room ${room_id}`)
await axios.post( await axios.post(
`/_matrix/client/v3/rooms/${room_id}/leave`, `/_matrix/client/v3/rooms/${room_id}/leave`,

View File

@ -4,7 +4,7 @@ import adminAccessToken from '../config/synapse_access_token.json'
import { IdMapping } from '../entity/IdMapping' import { IdMapping } from '../entity/IdMapping'
import log from '../helpers/logger' import log from '../helpers/logger'
import { createMembership, getUserId, save } from '../helpers/storage' import { createMembership, getUserId, save } from '../helpers/storage'
import { axios, getUserDomain } from '../helpers/synapse' import { axios } from '../helpers/synapse'
export type RcUser = { export type RcUser = {
_id: string _id: string
@ -32,12 +32,6 @@ export type AccessToken = {
user_id: string user_id: string
} }
export type UserInfo = {
admin: boolean
displayname: string
name: string
}
export function mapUser(rcUser: RcUser): MatrixUser { export function mapUser(rcUser: RcUser): MatrixUser {
return { return {
user_id: '', user_id: '',
@ -81,13 +75,6 @@ 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 getUserData(user: MatrixUser): Promise<UserInfo> {
return (await axios.get('/_synapse/admin/v2/users/@' + user.username + ":" + getUserDomain())).data
}
async function loginUser(user: MatrixUser): Promise<AccessToken> {
return (await axios.post('/_synapse/admin/v1/users/@' + user.username + ":" + getUserDomain() + "/login")).data
}
async function parseUserMemberships(rcUser: RcUser): Promise<void> { async function parseUserMemberships(rcUser: RcUser): Promise<void> {
await Promise.all( await Promise.all(
rcUser.__rooms.map(async (rcRoomId: string) => { rcUser.__rooms.map(async (rcRoomId: string) => {
@ -130,30 +117,12 @@ export async function createMapping(
export async function createUser(rcUser: RcUser): Promise<MatrixUser> { export async function createUser(rcUser: RcUser): Promise<MatrixUser> {
const user = mapUser(rcUser) const user = mapUser(rcUser)
var user_exists = false; const nonce = await getUserRegistrationNonce()
try { const mac = generateHmac({ ...user, nonce })
await getUserData(user) const accessToken = await registerUser({ ...user, nonce, mac })
user_exists = true user.user_id = accessToken.user_id
} catch (error) { user.access_token = accessToken.access_token
user_exists = false log.info(`User ${rcUser.username} created:`, user)
}
if (user_exists) {
const userData = await getUserData(user)
user.user_id = userData.name
user.displayname = userData.displayname
user.admin = user.admin || userData.admin
const accessToken = await loginUser(user)
user.access_token = accessToken.access_token
log.info(`User ${rcUser.username} exists:`, user)
} else {
const nonce = await getUserRegistrationNonce()
const mac = generateHmac({ ...user, nonce })
const accessToken = await registerUser({ ...user, nonce, mac })
user.user_id = accessToken.user_id
user.access_token = accessToken.access_token
log.info(`User ${rcUser.username} created:`, user)
}
await parseUserMemberships(rcUser) await parseUserMemberships(rcUser)

View File

@ -3,7 +3,7 @@ import { access_token } from '../config/synapse_access_token.json'
import log from './logger' import log from './logger'
import { getAccessToken } from './storage' import { getAccessToken } from './storage'
axios.defaults.baseURL = 'https://m-rc.jennett-wheeler.co.uk' 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'
@ -14,10 +14,6 @@ export interface SessionOptions {
[others: string]: unknown [others: string]: unknown
} }
export function getUserDomain(): string {
return "m-rc.jennett-wheeler.co.uk"
}
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) => {