Added fetching preKey by recipient.

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

@ -31,6 +31,7 @@ module.exports = {
createOrUpdatePreKey,
getPreKeyById,
getPreKeyByRecipient,
bulkAddPreKeys,
removePreKeyById,
removeAllPreKeys,
@ -407,6 +408,7 @@ async function updateToSchemaVersion6(currentVersion, instance) {
await instance.run(
`CREATE TABLE preKeys(
id INTEGER PRIMARY KEY ASC,
recipient STRING,
json TEXT
);`
);
@ -559,11 +561,42 @@ async function removeAllIdentityKeys() {
const PRE_KEYS_TABLE = 'preKeys';
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) {
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) {
return bulkAdd(PRE_KEYS_TABLE, array);
}

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

Loading…
Cancel
Save