Various small fixes while trying to get it to work
This commit is contained in:
parent
24d86c7edd
commit
de077ba9af
@ -171,9 +171,10 @@
|
|||||||
sessionBuilder = new libsignal.SessionBuilder(_converse.omemo_store, address),
|
sessionBuilder = new libsignal.SessionBuilder(_converse.omemo_store, address),
|
||||||
prekey = device.getRandomPreKey();
|
prekey = device.getRandomPreKey();
|
||||||
|
|
||||||
|
try {
|
||||||
return sessionBuilder.processPreKey({
|
return sessionBuilder.processPreKey({
|
||||||
'registrationId': _converse.omemo_store.get('registration_id'),
|
'registrationId': parseInt(_converse.omemo_store.get('device_id'), 10),
|
||||||
'identityKey': _converse.omemo_store.get('identity_keypair'),
|
'identityKey': _converse.omemo_store.get('identity_keypair').pubKey,
|
||||||
'signedPreKey': {
|
'signedPreKey': {
|
||||||
'keyId': bundle.signed_prekey.id, // <Number>
|
'keyId': bundle.signed_prekey.id, // <Number>
|
||||||
'publicKey': u.base64ToArrayBuffer(bundle.signed_prekey.public_key),
|
'publicKey': u.base64ToArrayBuffer(bundle.signed_prekey.public_key),
|
||||||
@ -183,7 +184,12 @@
|
|||||||
'keyId': prekey.id, // <Number>
|
'keyId': prekey.id, // <Number>
|
||||||
'publicKey': u.base64ToArrayBuffer(prekey.key),
|
'publicKey': u.base64ToArrayBuffer(prekey.key),
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
} catch (e) {
|
||||||
|
_converse.log(`Error: could not build session for device ${device.get('id')}`, Strophe.LogLevel.ERROR);
|
||||||
|
_converse.log(e.message, Strophe.LogLevel.ERROR);
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
getKeyAndTag (string) {
|
getKeyAndTag (string) {
|
||||||
@ -291,7 +297,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
buildSessions (devices) {
|
buildSessions (devices) {
|
||||||
return Promise.all(devices.map((device) => this.buildSession(device)));
|
return Promise.all(devices.map(device => this.buildSession(device)));
|
||||||
},
|
},
|
||||||
|
|
||||||
encryptMessage (plaintext) {
|
encryptMessage (plaintext) {
|
||||||
@ -403,8 +409,8 @@
|
|||||||
if (this.get('omemo_active')) {
|
if (this.get('omemo_active')) {
|
||||||
const message = this.messages.create(attrs);
|
const message = this.messages.create(attrs);
|
||||||
this.getBundlesAndBuildSessions()
|
this.getBundlesAndBuildSessions()
|
||||||
.then((devices) => this.createOMEMOMessageStanza(message, devices))
|
.then(devices => this.createOMEMOMessageStanza(message, devices))
|
||||||
.then((stanza) => this.sendMessageStanza(stanza))
|
.then(stanza => this.sendMessageStanza(stanza))
|
||||||
.catch(_.partial(_converse.log, _, Strophe.LogLevel.ERROR));
|
.catch(_.partial(_converse.log, _, Strophe.LogLevel.ERROR));
|
||||||
} else {
|
} else {
|
||||||
return this.__super__.sendMessage.apply(this, arguments);
|
return this.__super__.sendMessage.apply(this, arguments);
|
||||||
@ -508,7 +514,7 @@
|
|||||||
throw new Error("Unable to generate a unique device ID");
|
throw new Error("Unable to generate a unique device ID");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return device_id;
|
return device_id.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -526,11 +532,13 @@
|
|||||||
'identity_keypair': identity_keypair,
|
'identity_keypair': identity_keypair,
|
||||||
'prekeys': {}
|
'prekeys': {}
|
||||||
};
|
};
|
||||||
libsignal.KeyHelper.generateSignedPreKey(identity_keypair, 0)
|
libsignal.KeyHelper.generateSignedPreKey(identity_keypair, 1)
|
||||||
.then((signed_prekey) => {
|
.then((signed_prekey) => {
|
||||||
|
_converse.omemo_store.storeSignedPreKey(signed_prekey.keyId, signed_prekey.keyPair);
|
||||||
data['signed_prekey'] = signed_prekey;
|
data['signed_prekey'] = signed_prekey;
|
||||||
const key_promises = _.map(_.range(0, _converse.NUM_PREKEYS), (id) => libsignal.KeyHelper.generatePreKey(id));
|
const key_promises = _.map(_.range(0, _converse.NUM_PREKEYS), id => libsignal.KeyHelper.generatePreKey(id));
|
||||||
Promise.all(key_promises).then((keys) => {
|
Promise.all(key_promises).then(keys => {
|
||||||
|
_.forEach(keys, k => _converse.omemo_store.storePreKey(k.keyId, k.keyPair));
|
||||||
data['prekeys'] = keys;
|
data['prekeys'] = keys;
|
||||||
resolve(data)
|
resolve(data)
|
||||||
});
|
});
|
||||||
@ -646,27 +654,19 @@
|
|||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
createNewDeviceBundle () {
|
|
||||||
return generateBundle().then((data) => {
|
|
||||||
// TODO: should storeSession be used here?
|
|
||||||
_converse.omemo_store.save(data);
|
|
||||||
}).catch(_.partial(_converse.log, _, Strophe.LogLevel.ERROR));
|
|
||||||
},
|
|
||||||
|
|
||||||
fetchSession () {
|
fetchSession () {
|
||||||
if (_.isUndefined(this._setup_promise)) {
|
if (_.isUndefined(this._setup_promise)) {
|
||||||
this._setup_promise = new Promise((resolve, reject) => {
|
this._setup_promise = new Promise((resolve, reject) => {
|
||||||
this.fetch({
|
this.fetch({
|
||||||
'success': () => {
|
'success': () => {
|
||||||
if (!_converse.omemo_store.get('device_id')) {
|
if (!_converse.omemo_store.get('device_id')) {
|
||||||
this.createNewDeviceBundle().then(resolve).catch(resolve);
|
generateBundle().then(data => resolve(this.save(data))).catch(resolve);
|
||||||
} else {
|
} else {
|
||||||
resolve();
|
resolve();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'error': () => {
|
'error': () => {
|
||||||
this.createNewDeviceBundle().then(resolve).catch(resolve);
|
generateBundle().then(data => resolve(this.save(data))).catch(resolve);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user