diff --git a/keyserver/src/database/migration-config.js b/keyserver/src/database/migration-config.js --- a/keyserver/src/database/migration-config.js +++ b/keyserver/src/database/migration-config.js @@ -11,10 +11,14 @@ import { processMessagesInDBForSearch } from '../database/search-utils.js'; import { deleteThread } from '../deleters/thread-deleters.js'; import { createScriptViewer } from '../session/scripts.js'; +import { fetchOlmAccount } from '../updaters/olm-account-updater.js'; import { updateRolesAndPermissionsForAllThreads } from '../updaters/thread-permission-updaters.js'; import { updateThread } from '../updaters/thread-updaters.js'; import { ensureUserCredentials } from '../user/checks.js'; -import { createPickledOlmAccount } from '../utils/olm-utils.js'; +import { + createPickledOlmAccount, + publishPrekeysToIdentity, +} from '../utils/olm-utils.js'; const botViewer = createScriptViewer(bots.commbot.userID); @@ -557,6 +561,23 @@ `, ), ], + [ + 46, + async () => { + try { + const [content, notif] = await Promise.all([ + fetchOlmAccount('content'), + fetchOlmAccount('notifications'), + ]); + await publishPrekeysToIdentity(content.account, notif.account); + } catch (e) { + console.warn('Encountered error while trying to publish prekeys', e); + if (process.env.ENV === 'prod') { + throw e; + } + } + }, + ], ]); const newDatabaseVersion: number = Math.max(...migrations.keys()); diff --git a/keyserver/src/utils/olm-utils.js b/keyserver/src/utils/olm-utils.js --- a/keyserver/src/utils/olm-utils.js +++ b/keyserver/src/utils/olm-utils.js @@ -203,7 +203,11 @@ ): Promise { // Since keys are rotated synchronously, only check validity of one if (shouldRotatePrekey(contentAccount)) { - await publishNewPrekeys(contentAccount, notifAccount); + contentAccount.generate_prekey(); + notifAccount.generate_prekey(); + await publishPrekeysToIdentity(contentAccount, notifAccount); + contentAccount.mark_prekey_as_published(); + notifAccount.mark_prekey_as_published(); } if (shouldForgetPrekey(contentAccount)) { contentAccount.forget_old_prekey(); @@ -211,20 +215,16 @@ } } -async function publishNewPrekeys( +async function publishPrekeysToIdentity( contentAccount: OlmAccount, notifAccount: OlmAccount, ): Promise { const rustAPIPromise = getRustAPI(); const fetchIdentityInfoPromise = fetchIdentityInfo(); - const deviceID = JSON.parse(contentAccount.identity_keys()).ed25519; - contentAccount.generate_prekey(); const { prekey: contentPrekey, prekeySignature: contentPrekeySignature } = getAccountPrekeysSet(contentAccount); - - notifAccount.generate_prekey(); const { prekey: notifPrekey, prekeySignature: notifPrekeySignature } = getAccountPrekeysSet(notifAccount); @@ -254,9 +254,6 @@ notifPrekey, notifPrekeySignature, ); - - contentAccount.mark_prekey_as_published(); - notifAccount.mark_prekey_as_published(); } export { @@ -270,4 +267,5 @@ getContentSigningKey, getAccountPrekeysSet, validateAndUploadAccountPrekeys, + publishPrekeysToIdentity, };