Various small fixes while trying to get it to work

This commit is contained in:
JC Brand 2018-08-22 12:50:20 +02:00
parent 24d86c7edd
commit de077ba9af

View File

@ -171,19 +171,25 @@
sessionBuilder = new libsignal.SessionBuilder(_converse.omemo_store, address), sessionBuilder = new libsignal.SessionBuilder(_converse.omemo_store, address),
prekey = device.getRandomPreKey(); prekey = device.getRandomPreKey();
return sessionBuilder.processPreKey({ try {
'registrationId': _converse.omemo_store.get('registration_id'), return sessionBuilder.processPreKey({
'identityKey': _converse.omemo_store.get('identity_keypair'), 'registrationId': parseInt(_converse.omemo_store.get('device_id'), 10),
'signedPreKey': { 'identityKey': _converse.omemo_store.get('identity_keypair').pubKey,
'keyId': bundle.signed_prekey.id, // <Number> 'signedPreKey': {
'publicKey': u.base64ToArrayBuffer(bundle.signed_prekey.public_key), 'keyId': bundle.signed_prekey.id, // <Number>
'signature': u.base64ToArrayBuffer(bundle.signed_prekey.signature) 'publicKey': u.base64ToArrayBuffer(bundle.signed_prekey.public_key),
}, 'signature': u.base64ToArrayBuffer(bundle.signed_prekey.signature)
'preKey': { },
'keyId': prekey.id, // <Number> 'preKey': {
'publicKey': u.base64ToArrayBuffer(prekey.key), 'keyId': prekey.id, // <Number>
} '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);
} }
}); });
}); });