Changeset View
Changeset View
Standalone View
Standalone View
keyserver/src/socket/tunnelbroker.js
// @flow | // @flow | ||||
import WebSocket from 'ws'; | import WebSocket from 'ws'; | ||||
import { | import { | ||||
refreshKeysTBMessageValidator, | |||||
type TBKeyserverConnectionInitializationMessage, | type TBKeyserverConnectionInitializationMessage, | ||||
type MessageFromTunnelbroker, | type MessageFromTunnelbroker, | ||||
tunnelbrokerMessageTypes, | tunnelbrokerMessageTypes, | ||||
} from 'lib/types/tunnelbroker-messages.js'; | } from 'lib/types/tunnelbroker-messages.js'; | ||||
import { ServerError } from 'lib/utils/errors.js'; | import { ServerError } from 'lib/utils/errors.js'; | ||||
import { fetchOlmAccount } from '../updaters/olm-account-updater.js'; | import { fetchOlmAccount } from '../updaters/olm-account-updater.js'; | ||||
import { type IdentityInfo } from '../user/identity.js'; | import { type IdentityInfo } from '../user/identity.js'; | ||||
import { uploadNewOneTimeKeys } from '../utils/olm-utils.js'; | import { uploadNewOneTimeKeys } from '../utils/olm-utils.js'; | ||||
async function createAndMaintainTunnelbrokerWebsocket( | async function createAndMaintainTunnelbrokerWebsocket( | ||||
identityInfo: IdentityInfo, | identityInfo: IdentityInfo, | ||||
) { | ) { | ||||
const accountInfo = await fetchOlmAccount('content'); | const accountInfo = await fetchOlmAccount('content'); | ||||
const deviceID = JSON.parse(accountInfo.account.identity_keys()).ed25519; | const deviceID = JSON.parse(accountInfo.account.identity_keys()).ed25519; | ||||
openTunnelbrokerConnection( | openTunnelbrokerConnection( | ||||
deviceID, | deviceID, | ||||
identityInfo.userId, | identityInfo.userId, | ||||
identityInfo.accessToken, | identityInfo.accessToken, | ||||
); | ); | ||||
} | } | ||||
function handleTBMessageEvent(event: ArrayBuffer): Promise<void> { | function handleTBMessageEvent(event: ArrayBuffer): Promise<void> { | ||||
const message: MessageFromTunnelbroker = JSON.parse(event.toString()); | const rawMessage = JSON.parse(event.toString()); | ||||
if (!refreshKeysTBMessageValidator.is(rawMessage)) { | |||||
throw new ServerError('unsupported_tunnelbroker_message'); | |||||
} | |||||
const message: MessageFromTunnelbroker = rawMessage; | |||||
if (message.type === tunnelbrokerMessageTypes.REFRESH_KEYS_REQUEST) { | if (message.type === tunnelbrokerMessageTypes.REFRESH_KEYS_REQUEST) { | ||||
return uploadNewOneTimeKeys(message.numberOfKeys); | return uploadNewOneTimeKeys(message.numberOfKeys); | ||||
} | } | ||||
throw new ServerError('unsupported_tunnelbroker_message'); | throw new ServerError('unsupported_tunnelbroker_message'); | ||||
} | } | ||||
function openTunnelbrokerConnection( | function openTunnelbrokerConnection( | ||||
Show All 35 Lines |