diff --git a/keyserver/src/creators/account-creator.js b/keyserver/src/creators/account-creator.js --- a/keyserver/src/creators/account-creator.js +++ b/keyserver/src/creators/account-creator.js @@ -274,13 +274,7 @@ viewer: Viewer, request: ProcessOLMAccountCreationRequest, ): Promise { - const { calendarQuery, signedIdentityKeysBlob } = request; - await verifyCalendarQueryThreadIDs(calendarQuery); - const time = Date.now(); - const deviceToken = request.deviceTokenUpdateRequest - ? request.deviceTokenUpdateRequest.deviceToken - : viewer.deviceToken; const newUserRow = [ request.userID, request.username, @@ -291,20 +285,7 @@ INSERT INTO users(id, username, ethereum_address, creation_time) VALUES ${[newUserRow]} `; - const [userViewerData] = await Promise.all([ - createNewUserCookie(request.userID, { - platformDetails: request.platformDetails, - deviceToken, - signedIdentityKeysBlob, - }), - deleteCookie(viewer.cookieID), - dbQuery(newUserQuery), - ]); - viewer.setNewCookie(userViewerData); - - await setNewSession(viewer, calendarQuery, 0); - - await processAccountCreationCommon(viewer); + await dbQuery(newUserQuery); } async function processAccountCreationCommon(viewer: Viewer) { @@ -375,4 +356,9 @@ await rustAPI.addReservedUsernames(stringifiedMessage, signature); } -export { createAccount, processSIWEAccountCreation, processOLMAccountCreation }; +export { + createAccount, + processSIWEAccountCreation, + processOLMAccountCreation, + processAccountCreationCommon, +}; diff --git a/keyserver/src/responders/user-responders.js b/keyserver/src/responders/user-responders.js --- a/keyserver/src/responders/user-responders.js +++ b/keyserver/src/responders/user-responders.js @@ -101,13 +101,13 @@ } from './entry-responders.js'; import { processOLMAccountCreation, + processAccountCreationCommon, createAccount, processSIWEAccountCreation, } from '../creators/account-creator.js'; import { createOlmSession, persistFreshOlmSession, - createAndPersistOlmSession, } from '../creators/olm-session-creator.js'; import { dbQuery, SQL } from '../database/database.js'; import { deleteAccount } from '../deleters/account-deleters.js'; @@ -320,6 +320,16 @@ cookieHasBeenSet, } = params; + const olmNotifSession = await (async () => { + if (initialNotificationsEncryptedMessage && signedIdentityKeysBlob) { + return await createOlmSession( + initialNotificationsEncryptedMessage, + 'notifications', + ); + } + return null; + })(); + const request: LogInRequest = input; const newServerTime = Date.now(); const deviceToken = request.deviceTokenUpdateRequest @@ -368,14 +378,10 @@ if (calendarQuery) { await setNewSession(viewer, calendarQuery, newServerTime); } - const olmNotifSessionPromise = (async () => { - if ( - viewer.cookieID && - initialNotificationsEncryptedMessage && - signedIdentityKeysBlob - ) { - await createAndPersistOlmSession( - initialNotificationsEncryptedMessage, + const persistOlmNotifSessionPromise = (async () => { + if (olmNotifSession && viewer.cookieID) { + await persistFreshOlmSession( + olmNotifSession, 'notifications', viewer.cookieID, ); @@ -384,7 +390,7 @@ // `pickledContentOlmSession` is created in `keyserverAuthResponder(...)` in // order to authenticate the user. Here, we simply persist the session if it // exists. - const olmContentSessionPromise = (async () => { + const persistOlmContentSessionPromise = (async () => { if (viewer.cookieID && pickledContentOlmSession) { await persistFreshOlmSession( pickledContentOlmSession, @@ -419,8 +425,8 @@ entriesPromise, fetchKnownUserInfos(viewer), fetchLoggedInUserInfo(viewer), - olmNotifSessionPromise, - olmContentSessionPromise, + persistOlmNotifSessionPromise, + persistOlmContentSessionPromise, ]); const rawEntryInfos = entriesResult ? entriesResult.rawEntryInfos : null; @@ -806,7 +812,7 @@ ]); // 5. Complete login with call to `processSuccessfulLogin(...)`. - return await processSuccessfulLogin({ + const result = await processSuccessfulLogin({ viewer, input: request, userID, @@ -814,8 +820,17 @@ signedIdentityKeysBlob, initialNotificationsEncryptedMessage, pickledContentOlmSession, - cookieHasBeenSet: !existingUsername, + cookieHasBeenSet: false, }); + + await (async () => { + if (existingUsername) { + return; + } + await processAccountCreationCommon(viewer); + })(); + + return result; } export const updatePasswordRequestInputValidator: TInterface =