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 @@ -78,6 +78,7 @@ createAccount, processSIWEAccountCreation, } from '../creators/account-creator.js'; +import { createOlmSession } from '../creators/olm-session-creator.js'; import { dbQuery, SQL } from '../database/database.js'; import { deleteAccount } from '../deleters/account-deleters.js'; import { deleteCookie } from '../deleters/cookie-deleters.js'; @@ -252,6 +253,7 @@ +calendarQuery: ?CalendarQuery, +socialProof?: ?SIWESocialProof, +signedIdentityKeysBlob?: ?SignedIdentityKeysBlob, + +initialNotificationsEncryptedMessage?: string, }; async function processSuccessfulLogin( @@ -264,6 +266,7 @@ calendarQuery, socialProof, signedIdentityKeysBlob, + initialNotificationsEncryptedMessage, } = params; const request: LogInRequest = input; @@ -282,6 +285,17 @@ deleteCookie(viewer.cookieID), ]); viewer.setNewCookie(userViewerData); + if ( + userViewerData.cookieID && + initialNotificationsEncryptedMessage && + signedIdentityKeysBlob + ) { + await createOlmSession( + initialNotificationsEncryptedMessage, + 'notifications', + userViewerData.cookieID, + ); + } if ( notAcknowledgedPolicies.length && @@ -361,6 +375,7 @@ // old clients, but we no longer do anything with it. primaryIdentityPublicKey: t.maybe(tRegex(primaryIdentityPublicKeyRegex)), signedIdentityKeysBlob: t.maybe(signedIdentityKeysBlobValidator), + initialNotificationsEncryptedMessage: t.maybe(t.String), }); async function logInResponder( @@ -371,7 +386,8 @@ const request: LogInRequest = input; let identityKeys: ?IdentityKeysBlob; - const { signedIdentityKeysBlob } = request; + const { signedIdentityKeysBlob, initialNotificationsEncryptedMessage } = + request; if (signedIdentityKeysBlob) { identityKeys = JSON.parse(signedIdentityKeysBlob.payload); @@ -435,6 +451,7 @@ userID: id, calendarQuery, signedIdentityKeysBlob, + initialNotificationsEncryptedMessage, }); } diff --git a/lib/types/account-types.js b/lib/types/account-types.js --- a/lib/types/account-types.js +++ b/lib/types/account-types.js @@ -104,6 +104,7 @@ +calendarQuery: CalendarQuery, +deviceTokenUpdateRequest?: ?DeviceTokenUpdateRequest, +signedIdentityKeysBlob?: SignedIdentityKeysBlob, + +initialNotificationsEncryptedMessage?: string, }; export type LogInInfo = { @@ -123,6 +124,7 @@ +watchedIDs: $ReadOnlyArray, +source?: LogInActionSource, +signedIdentityKeysBlob?: SignedIdentityKeysBlob, + +initialNotificationsEncryptedMessage?: string, }; export type LogInResponse = { diff --git a/native/account/log-in-panel.react.js b/native/account/log-in-panel.react.js --- a/native/account/log-in-panel.react.js +++ b/native/account/log-in-panel.react.js @@ -37,6 +37,7 @@ import { useSelector } from '../redux/redux-utils.js'; import { nativeLogInExtraInfoSelector } from '../selectors/account-selectors.js'; import type { KeyPressEvent } from '../types/react-native.js'; +import { useInitialNotificationsEncryptedMessage } from '../utils/crypto-utils.js'; import type { StateContainer } from '../utils/state-container.js'; export type LogInState = { @@ -54,6 +55,9 @@ +logInExtraInfo: () => Promise, +dispatchActionPromise: DispatchActionPromise, +logIn: (logInInfo: LogInInfo) => Promise, + +initialNotificationsEncryptedMessage: ( + oneTimeKeysCount: number, + ) => Promise, }; class LogInPanel extends React.PureComponent { usernameInput: ?TextInput; @@ -227,9 +231,12 @@ Keyboard.dismiss(); const extraInfo = await this.props.logInExtraInfo(); + const initialNotificationsEncryptedMessage = + await this.props.initialNotificationsEncryptedMessage(1); + console.log(initialNotificationsEncryptedMessage); this.props.dispatchActionPromise( logInActionTypes, - this.logInAction(extraInfo), + this.logInAction({ ...extraInfo, initialNotificationsEncryptedMessage }), undefined, ({ calendarQuery: extraInfo.calendarQuery }: LogInStartingPayload), ); @@ -364,6 +371,8 @@ const dispatchActionPromise = useDispatchActionPromise(); const callLogIn = useServerCall(logIn); + const callInitialNotificationsEncryptedMessage = + useInitialNotificationsEncryptedMessage(); return ( ); });