Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6a6c2da584 | |||
| 55f524e91c | |||
| 8f78889fd2 | |||
| 9d74f34b9a | |||
| bbe5e468ce | |||
| 857360c4d2 |
+38
-7
@@ -4,7 +4,7 @@ import adminAccessToken from '../config/synapse_access_token.json'
|
||||
import { IdMapping } from '../entity/IdMapping'
|
||||
import log from '../helpers/logger'
|
||||
import { createMembership, getUserId, save } from '../helpers/storage'
|
||||
import { axios } from '../helpers/synapse'
|
||||
import { axios, getUserDomain } from '../helpers/synapse'
|
||||
|
||||
export type RcUser = {
|
||||
_id: string
|
||||
@@ -32,6 +32,12 @@ export type AccessToken = {
|
||||
user_id: string
|
||||
}
|
||||
|
||||
export type UserInfo = {
|
||||
admin: boolean
|
||||
displayname: string
|
||||
name: string
|
||||
}
|
||||
|
||||
export function mapUser(rcUser: RcUser): MatrixUser {
|
||||
return {
|
||||
user_id: '',
|
||||
@@ -75,6 +81,13 @@ async function registerUser(user: MatrixUser): Promise<AccessToken> {
|
||||
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 getUserLogin(user: MatrixUser): Promise<AccessToken> {
|
||||
return (await axios.get('/_synapse/admin/v1/users/@' + user.username + ":" + getUserDomain() + "/login")).data
|
||||
}
|
||||
|
||||
async function parseUserMemberships(rcUser: RcUser): Promise<void> {
|
||||
await Promise.all(
|
||||
rcUser.__rooms.map(async (rcRoomId: string) => {
|
||||
@@ -117,12 +130,30 @@ export async function createMapping(
|
||||
|
||||
export async function createUser(rcUser: RcUser): Promise<MatrixUser> {
|
||||
const user = mapUser(rcUser)
|
||||
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)
|
||||
var user_exists = false;
|
||||
try {
|
||||
await getUserData(user)
|
||||
user_exists = true
|
||||
} catch (error) {
|
||||
user_exists = false
|
||||
}
|
||||
|
||||
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 getUserLogin(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)
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import { access_token } from '../config/synapse_access_token.json'
|
||||
import log from './logger'
|
||||
import { getAccessToken } from './storage'
|
||||
|
||||
axios.defaults.baseURL = 'http://localhost:8008'
|
||||
axios.defaults.baseURL = 'https://m-rc.jennett-wheeler.co.uk'
|
||||
axios.defaults.headers.common['Authorization'] = `Bearer ${access_token}`
|
||||
axios.defaults.headers.post['Content-Type'] = 'application/json'
|
||||
|
||||
@@ -14,6 +14,10 @@ export interface SessionOptions {
|
||||
[others: string]: unknown
|
||||
}
|
||||
|
||||
export function getUserDomain(): string {
|
||||
return "m-rc.jennett-wheeler.co.uk"
|
||||
}
|
||||
|
||||
export { default as axios } from 'axios'
|
||||
export const whoami = () =>
|
||||
new Promise<void>((resolve, reject) => {
|
||||
|
||||
Reference in New Issue
Block a user