mirror of
https://github.com/oxen-io/session-desktop.git
synced 2023-12-14 02:12:57 +01:00
Fix multi device pairing
This commit is contained in:
parent
a3cb98c46c
commit
8f82e7a442
7 changed files with 29 additions and 53 deletions
|
@ -223,7 +223,7 @@
|
|||
requestSignature,
|
||||
grantSignature,
|
||||
} = authorisation;
|
||||
const isGrant = !!grantSignature;
|
||||
const isGrant = !!(grantSignature && grantSignature.length > 0);
|
||||
if (!primaryDevicePubKey || !secondaryDevicePubKey) {
|
||||
window.log.warn(
|
||||
'Received a pairing request with missing pubkeys. Ignored.'
|
||||
|
@ -277,7 +277,7 @@
|
|||
} = authorisation;
|
||||
const alreadySecondaryDevice = !!window.storage.get('isSecondaryDevice');
|
||||
const ourPubKey = textsecure.storage.user.getNumber();
|
||||
const isRequest = !grantSignature;
|
||||
const isRequest = !(grantSignature && grantSignature.length > 0);
|
||||
if (isRequest && alreadySecondaryDevice) {
|
||||
window.log.warn(
|
||||
'Received a pairing request while being a secondary device. Ignored.'
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
"icon-gen": "electron-icon-maker --input=images/icon_1024.png --output=./build",
|
||||
"generate": "yarn icon-gen && yarn grunt",
|
||||
"build-release": "cross-env SIGNAL_ENV=production npm run build -- --config.directories.output=release",
|
||||
"build-module-protobuf": "pbjs --target static-module --wrap commonjs --out ts/protobuf/compiled.js protos/*.proto && pbts --out ts/protobuf/compiled.d.ts ts/protobuf/compiled.js",
|
||||
"build-module-protobuf": "pbjs --target static-module --wrap commonjs --out ts/protobuf/compiled.js protos/*.proto && pbts --out ts/protobuf/compiled.d.ts ts/protobuf/compiled.js --force-long",
|
||||
"clean-module-protobuf": "rm -f ts/protobuf/compiled.d.ts ts/protobuf/compiled.js",
|
||||
"build-protobuf": "yarn build-module-protobuf",
|
||||
"clean-protobuf": "yarn clean-module-protobuf",
|
||||
|
@ -95,7 +95,7 @@
|
|||
"os-locale": "2.1.0",
|
||||
"p-retry": "^4.2.0",
|
||||
"pify": "3.0.0",
|
||||
"protobufjs": "6.8.6",
|
||||
"protobufjs": "^6.9.0",
|
||||
"rc-slider": "^8.7.1",
|
||||
"react": "16.8.3",
|
||||
"react-contextmenu": "2.11.0",
|
||||
|
|
|
@ -356,16 +356,10 @@ export async function innerHandleContentMessage(
|
|||
}
|
||||
|
||||
if (content.pairingAuthorisation) {
|
||||
if (!content.dataMessage || !content.syncMessage) {
|
||||
window.log.error('Missing fields in pairingAuthorisation');
|
||||
return;
|
||||
}
|
||||
|
||||
await handlePairingAuthorisationMessage(
|
||||
envelope,
|
||||
content.pairingAuthorisation,
|
||||
content.dataMessage,
|
||||
content.syncMessage
|
||||
content.dataMessage
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -84,19 +84,18 @@ export async function handleUnpairRequest(
|
|||
export async function handlePairingAuthorisationMessage(
|
||||
envelope: EnvelopePlus,
|
||||
pairingAuthorisation: SignalService.IPairingAuthorisationMessage,
|
||||
dataMessage: SignalService.IDataMessage,
|
||||
syncMessage: SignalService.ISyncMessage
|
||||
dataMessage: SignalService.IDataMessage | undefined | null
|
||||
): Promise<void> {
|
||||
const { secondaryDevicePubKey, grantSignature } = pairingAuthorisation;
|
||||
const isGrant =
|
||||
grantSignature &&
|
||||
grantSignature.length > 0 &&
|
||||
secondaryDevicePubKey === window.textsecure.storage.user.getNumber();
|
||||
if (isGrant) {
|
||||
await handleAuthorisationForSelf(
|
||||
envelope,
|
||||
pairingAuthorisation,
|
||||
dataMessage,
|
||||
syncMessage
|
||||
dataMessage
|
||||
);
|
||||
} else {
|
||||
await handlePairingRequest(envelope, pairingAuthorisation);
|
||||
|
@ -134,8 +133,7 @@ async function handlePairingRequest(
|
|||
async function handleAuthorisationForSelf(
|
||||
envelope: EnvelopePlus,
|
||||
pairingAuthorisation: SignalService.IPairingAuthorisationMessage,
|
||||
dataMessage: SignalService.IDataMessage,
|
||||
syncMessage: SignalService.ISyncMessage
|
||||
dataMessage: SignalService.IDataMessage | undefined | null
|
||||
) {
|
||||
const { ConversationController, libloki, Whisper } = window;
|
||||
|
||||
|
@ -143,7 +141,6 @@ async function handleAuthorisationForSelf(
|
|||
pairingAuthorisation
|
||||
);
|
||||
const alreadySecondaryDevice = !!window.storage.get('isSecondaryDevice');
|
||||
let removedFromCache = false;
|
||||
if (alreadySecondaryDevice) {
|
||||
window.log.warn(
|
||||
'Received an unexpected pairing authorisation (device is already paired as secondary device). Ignoring.'
|
||||
|
@ -154,7 +151,7 @@ async function handleAuthorisationForSelf(
|
|||
);
|
||||
} else {
|
||||
const { primaryDevicePubKey, grantSignature } = pairingAuthorisation;
|
||||
if (grantSignature) {
|
||||
if (grantSignature && grantSignature.length > 0) {
|
||||
// Authorisation received to become a secondary device
|
||||
window.log.info(
|
||||
`Received pairing authorisation from ${primaryDevicePubKey}`
|
||||
|
@ -188,21 +185,11 @@ async function handleAuthorisationForSelf(
|
|||
window.log.warn('profile or profileKey are missing in DataMessage');
|
||||
}
|
||||
}
|
||||
// Update contact list
|
||||
if (syncMessage && syncMessage.contacts) {
|
||||
// Note: we do not return here because we don't want to block the next message on
|
||||
// this attachment download and a lot of processing of that attachment.
|
||||
// This call already removes the envelope from the cache
|
||||
void handleContacts(envelope, syncMessage.contacts);
|
||||
removedFromCache = true;
|
||||
}
|
||||
} else {
|
||||
window.log.warn('Unimplemented pairing authorisation message type');
|
||||
}
|
||||
}
|
||||
if (!removedFromCache) {
|
||||
await removeFromCache(envelope);
|
||||
}
|
||||
await removeFromCache(envelope);
|
||||
}
|
||||
|
||||
function parseContacts(arrbuf: ArrayBuffer): Array<any> {
|
||||
|
|
|
@ -114,8 +114,6 @@ export async function handleSessionRequestMessage(
|
|||
timestamp: Date.now(),
|
||||
});
|
||||
await libsession.getMessageQueue().send(user, sessionEstablished);
|
||||
|
||||
libloki.api.sendSessionEstablishedMessage(envelope.source);
|
||||
} catch (e) {
|
||||
log.warn('Failed to process session request', e);
|
||||
// TODO how to handle a failed session request?
|
||||
|
|
|
@ -321,10 +321,10 @@ async function refreshRandomPoolDetail(seedNodes: Array<any>): Promise<void> {
|
|||
}
|
||||
}
|
||||
|
||||
export async function refreshRandomPool(seedNodes: Array<any>): Promise<void> {
|
||||
export async function refreshRandomPool(seedNodes?: Array<any>): Promise<void> {
|
||||
const { log } = window;
|
||||
|
||||
if (!seedNodes.length) {
|
||||
if (!seedNodes || !seedNodes.length) {
|
||||
if (!window.seedNodeList || !window.seedNodeList.length) {
|
||||
log.error(
|
||||
'LokiSnodeAPI:::refreshRandomPool - seedNodeList has not been loaded yet'
|
||||
|
@ -335,9 +335,11 @@ export async function refreshRandomPool(seedNodes: Array<any>): Promise<void> {
|
|||
seedNodes = window.seedNodeList;
|
||||
}
|
||||
|
||||
return allowOnlyOneAtATime('refreshRandomPool', async () =>
|
||||
refreshRandomPoolDetail(seedNodes)
|
||||
);
|
||||
return allowOnlyOneAtATime('refreshRandomPool', async () => {
|
||||
if (seedNodes) {
|
||||
await refreshRandomPoolDetail(seedNodes);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export async function getSnodesFor(pubkey: string): Promise<Array<Snode>> {
|
||||
|
|
27
yarn.lock
27
yarn.lock
|
@ -322,16 +322,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.106.tgz#6093e9a02aa567ddecfe9afadca89e53e5dce4dd"
|
||||
integrity sha512-tOSvCVrvSqFZ4A/qrqqm6p37GZoawsZtoR0SJhlF7EonNZUgrn8FfT+RNQ11h+NUpMt6QVe36033f3qEKBwfWA==
|
||||
|
||||
"@types/long@*":
|
||||
"@types/long@*", "@types/long@^4.0.1":
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9"
|
||||
integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==
|
||||
|
||||
"@types/long@^3.0.32":
|
||||
version "3.0.32"
|
||||
resolved "https://registry.yarnpkg.com/@types/long/-/long-3.0.32.tgz#f4e5af31e9e9b196d8e5fca8a5e2e20aa3d60b69"
|
||||
integrity sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA==
|
||||
|
||||
"@types/minimatch@*":
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
||||
|
@ -367,10 +362,10 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.31.tgz#d6b4f9645fee17f11319b508fb1001797425da51"
|
||||
integrity sha512-T+wnJno8uh27G9c+1T+a1/WYCHzLeDqtsGJkoEdSp2X8RTh3oOCZQcUnjAx90CS8cmmADX51O0FI/tu9s0yssg==
|
||||
|
||||
"@types/node@^8.9.4":
|
||||
version "8.10.59"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.59.tgz#9e34261f30183f9777017a13d185dfac6b899e04"
|
||||
integrity sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ==
|
||||
"@types/node@^13.7.0":
|
||||
version "13.13.12"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.12.tgz#9c72e865380a7dc99999ea0ef20fc9635b503d20"
|
||||
integrity sha512-zWz/8NEPxoXNT9YyF2osqyA9WjssZukYpgI4UYZpOjcyqwIUqWGkcCionaEb9Ki+FULyPyvNFpg/329Kd2/pbw==
|
||||
|
||||
"@types/pify@3.0.2":
|
||||
version "3.0.2"
|
||||
|
@ -7870,10 +7865,10 @@ proto-list@~1.2.1:
|
|||
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
|
||||
integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
|
||||
|
||||
protobufjs@6.8.6:
|
||||
version "6.8.6"
|
||||
resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.6.tgz#ce3cf4fff9625b62966c455fc4c15e4331a11ca2"
|
||||
integrity sha512-eH2OTP9s55vojr3b7NBaF9i4WhWPkv/nq55nznWNp/FomKrLViprUcqnBjHph2tFQ+7KciGPTPsVWGz0SOhL0Q==
|
||||
protobufjs@^6.9.0:
|
||||
version "6.9.0"
|
||||
resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.9.0.tgz#c08b2bf636682598e6fabbf0edb0b1256ff090bd"
|
||||
integrity sha512-LlGVfEWDXoI/STstRDdZZKb/qusoAWUnmLg9R8OLSO473mBLWHowx8clbX5/+mKDEI+v7GzjoK9tRPZMMcoTrg==
|
||||
dependencies:
|
||||
"@protobufjs/aspromise" "^1.1.2"
|
||||
"@protobufjs/base64" "^1.1.2"
|
||||
|
@ -7885,8 +7880,8 @@ protobufjs@6.8.6:
|
|||
"@protobufjs/path" "^1.1.2"
|
||||
"@protobufjs/pool" "^1.1.0"
|
||||
"@protobufjs/utf8" "^1.1.0"
|
||||
"@types/long" "^3.0.32"
|
||||
"@types/node" "^8.9.4"
|
||||
"@types/long" "^4.0.1"
|
||||
"@types/node" "^13.7.0"
|
||||
long "^4.0.0"
|
||||
|
||||
proxy-addr@~2.0.5:
|
||||
|
|
Loading…
Reference in a new issue