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 @@ -71,7 +71,7 @@ WHERE LCASE(username) = LCASE(${request.username}) `; const promises = [dbQuery(usernameQuery)]; - const { calendarQuery } = request; + const { calendarQuery, publicKey, socialProof } = request; if (calendarQuery) { promises.push(verifyCalendarQueryThreadIDs(calendarQuery)); } @@ -103,6 +103,8 @@ createNewUserCookie(id, { platformDetails: request.platformDetails, deviceToken, + publicKey, + socialProof, }), deleteCookie(viewer.cookieID), dbQuery(newUserQuery), 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 @@ -201,7 +201,7 @@ const calendarQuery = request.calendarQuery ? normalizeCalendarQuery(request.calendarQuery) : null; - + const { publicKey, socialProof } = request; const newServerTime = Date.now(); const deviceToken = request.deviceTokenUpdateRequest ? request.deviceTokenUpdateRequest.deviceToken @@ -210,6 +210,8 @@ createNewUserCookie(userId, { platformDetails: request.platformDetails, deviceToken, + publicKey, + socialProof, }), deleteCookie(viewer.cookieID), ]); diff --git a/keyserver/src/session/cookies.js b/keyserver/src/session/cookies.js --- a/keyserver/src/session/cookies.js +++ b/keyserver/src/session/cookies.js @@ -644,6 +644,8 @@ type UserCookieCreationParams = { platformDetails: PlatformDetails, deviceToken?: ?string, + publicKey?: ?string, + socialProof?: ?string, }; // The result of this function should never be passed directly to the Viewer @@ -657,7 +659,7 @@ userID: string, params: UserCookieCreationParams, ): Promise { - const { platformDetails, deviceToken } = params; + const { platformDetails, deviceToken, publicKey, socialProof } = params; const { platform, ...versions } = platformDetails || defaultPlatformDetails; const versionsString = Object.keys(versions).length > 0 ? JSON.stringify(versions) : null; @@ -679,10 +681,12 @@ time, deviceToken, versionsString, + publicKey, + socialProof, ]; const query = SQL` INSERT INTO cookies(id, hash, user, platform, creation_time, last_used, - device_token, versions) + device_token, versions, public_key, social_proof) VALUES ${[cookieRow]} `; await dbQuery(query); 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 @@ -51,6 +51,8 @@ +deviceTokenUpdateRequest?: ?DeviceTokenUpdateRequest, +platformDetails: PlatformDetails, +address?: ?string, + +publicKey?: ?string, + +socialProof?: ?string, }; export type RegisterResponse = { @@ -116,6 +118,8 @@ +platformDetails: PlatformDetails, +watchedIDs: $ReadOnlyArray, +source?: LogInActionSource, + +publicKey?: ?string, + +socialProof?: ?string, }; export type LogInResponse = { @@ -149,12 +153,16 @@ +deviceTokenUpdateRequest?: ?DeviceTokenUpdateRequest, +platformDetails: PlatformDetails, +watchedIDs: $ReadOnlyArray, + +publicKey?: ?string, + +socialProof?: ?string, }; export type SIWEServerCall = { - +address: string, - +message: string, - +signature: string, + address: string, + message: string, + signature: string, + publicKey: string, + socialProof: string, ...LogInExtraInfo, }; diff --git a/native/account/siwe-panel.react.js b/native/account/siwe-panel.react.js --- a/native/account/siwe-panel.react.js +++ b/native/account/siwe-panel.react.js @@ -16,11 +16,11 @@ type DispatchActionPromise, } from 'lib/utils/action-utils'; +import { commCoreModule } from '../native-modules'; import { NavContext } from '../navigation/navigation-context'; import { useSelector } from '../redux/redux-utils'; import { nativeLogInExtraInfoSelector } from '../selectors/account-selectors'; import { defaultLandingURLPrefix } from '../utils/url-utils'; - const commSIWE = `${defaultLandingURLPrefix}/siwe`; type BaseProps = { @@ -43,15 +43,18 @@ siweAction, }: Props) { const handleSIWE = React.useCallback( - ({ address, message, signature }) => { - // this is all mocked from register-panel + async ({ address, message, signature }) => { const extraInfo = logInExtraInfo(); + await commCoreModule.initializeCryptoAccount(address); + const { ed25519 } = await commCoreModule.getUserPublicKey(); dispatchActionPromise( siweActionTypes, siweAction({ address, message, signature, + publicKey: ed25519, + socialProof: signature, ...extraInfo, }), undefined, diff --git a/native/schema/CommCoreModuleSchema.js b/native/schema/CommCoreModuleSchema.js --- a/native/schema/CommCoreModuleSchema.js +++ b/native/schema/CommCoreModuleSchema.js @@ -18,6 +18,10 @@ +key: string, +text: string, }; +type ClientPublicKeys = { + +curve25519: string, + +ed25519: string, +}; export interface Spec extends TurboModule { +getDraft: (key: string) => Promise; @@ -42,7 +46,7 @@ operations: $ReadOnlyArray, ) => void; +initializeCryptoAccount: (userId: string) => Promise; - +getUserPublicKey: () => Promise; + +getUserPublicKey: () => Promise; +getUserOneTimeKeys: () => Promise; +openSocket: (endpoint: string) => Object; +getCodeVersion: () => number;