Added fetching preKey by recipient.

pull/27/head
Mikunj 7 years ago
parent 1a4adf2281
commit 525007f944

@ -31,6 +31,7 @@ module.exports = {
createOrUpdatePreKey, createOrUpdatePreKey,
getPreKeyById, getPreKeyById,
getPreKeyByRecipient,
bulkAddPreKeys, bulkAddPreKeys,
removePreKeyById, removePreKeyById,
removeAllPreKeys, removeAllPreKeys,
@ -407,6 +408,7 @@ async function updateToSchemaVersion6(currentVersion, instance) {
await instance.run( await instance.run(
`CREATE TABLE preKeys( `CREATE TABLE preKeys(
id INTEGER PRIMARY KEY ASC, id INTEGER PRIMARY KEY ASC,
recipient STRING,
json TEXT json TEXT
);` );`
); );
@ -559,11 +561,42 @@ async function removeAllIdentityKeys() {
const PRE_KEYS_TABLE = 'preKeys'; const PRE_KEYS_TABLE = 'preKeys';
async function createOrUpdatePreKey(data) { async function createOrUpdatePreKey(data) {
return createOrUpdate(PRE_KEYS_TABLE, data); const { id, recipient } = data;
if (!id) {
throw new Error('createOrUpdate: Provided data did not have a truthy id');
}
await db.run(
`INSERT OR REPLACE INTO ${PRE_KEYS_TABLE} (
id,
recipient,
json
) values (
$id,
$recipient,
$json
)`,
{
$id: id,
$recipient: recipient || '',
$json: objectToJSON(data),
}
);
} }
async function getPreKeyById(id) { async function getPreKeyById(id) {
return getById(PRE_KEYS_TABLE, id); return getById(PRE_KEYS_TABLE, id);
} }
async function getPreKeyByRecipient(recipient) {
const row = await db.get(`SELECT * FROM ${PRE_KEYS_TABLE} WHERE recipient = $recipient;`, {
$recipient: recipient,
});
if (!row) {
return null;
}
return jsonToObject(row.json);
}
async function bulkAddPreKeys(array) { async function bulkAddPreKeys(array) {
return bulkAdd(PRE_KEYS_TABLE, array); return bulkAdd(PRE_KEYS_TABLE, array);
} }

@ -207,26 +207,18 @@
window.log.error('Failed to fetch prekey:', keyId); window.log.error('Failed to fetch prekey:', keyId);
return undefined; return undefined;
}, },
loadPreKeyForContactIdentityKeyString(contactIdentityKeyString) { async loadPreKeyForContactIdentityKeyString(contactIdentityKeyString) {
const prekey = new PreKey({ recipient: contactIdentityKeyString }); const key = await window.Signal.Data.getPreKeyByRecipient(contactIdentityKeyString);
return new Promise(resolve => {
prekey.fetch().then( if (key) {
() => { window.log.info('Successfully fetched prekey for recipient:', contactIdentityKeyString);
window.log.info( return {
'Successfully fetched prekey for recipient :', pubKey: key.publicKey,
contactIdentityKeyString privKey: key.privateKey,
); keyId: key.id,
resolve({ recipient: key.recipient,
pubKey: prekey.get('publicKey'), };
privKey: prekey.get('privateKey'), }
keyId: prekey.get('id'),
});
},
() => {
resolve();
}
);
});
}, },
loadContactPreKey(pubKey) { loadContactPreKey(pubKey) {
const prekey = new ContactPreKey({ identityKeyString: pubKey }); const prekey = new ContactPreKey({ identityKeyString: pubKey });
@ -394,7 +386,7 @@
created_at: prekey.created_at, created_at: prekey.created_at,
keyId: prekey.id, keyId: prekey.id,
confirmed: prekey.confirmed, confirmed: prekey.confirmed,
signature: prekey.get('signature'), signature: prekey.signature,
})); }));
}, },
async storeSignedPreKey(keyId, keyPair, confirmed, signature) { async storeSignedPreKey(keyId, keyPair, confirmed, signature) {

Loading…
Cancel
Save