From 56bb03f4fad776586525e42c2d4f91e28edec2ac Mon Sep 17 00:00:00 2001 From: Tomasz Palys Date: Fri, 17 Jan 2025 17:01:37 +0100 Subject: [PATCH] [native] Save the correct backup credentials Summary: These credentials are used e.g. to create a new backup, and they should match the result returned from the SIWE panel. https://linear.app/comm/issue/ENG-10099/sometimes-backup-restoration-cant-be-completed-due-to-a-cryptokit Test Plan: Register a new SIWE user, log out, restore (this creates a new backup), log out, restore (this tests whether the new backup is correct). Confirm that the 2nd restoration works. Reviewers: kamil, bartek Reviewed By: kamil Subscribers: ashoat Differential Revision: https://phab.comm.dev/D14220 --- lib/types/siwe-types.js | 2 +- .../registration/registration-terms.react.js | 4 ++-- .../account/registration/registration-types.js | 6 +++--- native/account/restore-backup-screen.react.js | 17 +++++++---------- native/backup/restore-siwe-backup.react.js | 11 ++++++++--- native/schema/CommCoreModuleSchema.js | 8 +++----- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/lib/types/siwe-types.js b/lib/types/siwe-types.js index 9e2a03b3bf..786a690ab6 100644 --- a/lib/types/siwe-types.js +++ b/lib/types/siwe-types.js @@ -155,7 +155,7 @@ export type SIWESignatureRequestData = +siweIssuedAt: string, }; -export type SIWEBackupSecrets = { +export type SignedMessage = { +message: string, +signature: string, }; diff --git a/native/account/registration/registration-terms.react.js b/native/account/registration/registration-terms.react.js index a8ebd57a8d..9277f6729f 100644 --- a/native/account/registration/registration-terms.react.js +++ b/native/account/registration/registration-terms.react.js @@ -4,7 +4,7 @@ import invariant from 'invariant'; import * as React from 'react'; import { Text, View, Image, Linking } from 'react-native'; -import type { SIWEBackupSecrets } from 'lib/types/siwe-types.js'; +import type { SignedMessage } from 'lib/types/siwe-types.js'; import type { AuthNavigationProp } from './auth-navigator.react.js'; import { RegistrationContext } from './registration-context.js'; @@ -30,7 +30,7 @@ export type RegistrationTermsParams = { +farcasterID: ?string, +accountSelection: AccountSelection, +avatarData: ?AvatarData, - +siweBackupSecrets?: ?SIWEBackupSecrets, + +siweBackupSecrets?: ?SignedMessage, +farcasterAvatarURL: ?string, }, }; diff --git a/native/account/registration/registration-types.js b/native/account/registration/registration-types.js index e828cf1ba2..a802826f39 100644 --- a/native/account/registration/registration-types.js +++ b/native/account/registration/registration-types.js @@ -5,7 +5,7 @@ import type { ClientAvatar, } from 'lib/types/avatar-types.js'; import type { NativeMediaSelection } from 'lib/types/media-types.js'; -import type { SIWEResult, SIWEBackupSecrets } from 'lib/types/siwe-types.js'; +import type { SIWEResult, SignedMessage } from 'lib/types/siwe-types.js'; export type CoolOrNerdMode = 'cool' | 'nerd'; @@ -43,7 +43,7 @@ export type RegistrationServerCallInput = { +farcasterID: ?string, +accountSelection: AccountSelection, +avatarData: ?AvatarData, - +siweBackupSecrets?: ?SIWEBackupSecrets, + +siweBackupSecrets?: ?SignedMessage, +farcasterAvatarURL: ?string, +clearCachedSelections: () => void, +onNonceExpired: () => mixed, @@ -58,7 +58,7 @@ export type CachedUserSelections = { +avatarData?: ?AvatarData, +ethereumAccount?: ?EthereumAccountSelection, +farcasterID?: string, - +siweBackupSecrets?: ?SIWEBackupSecrets, + +siweBackupSecrets?: ?SignedMessage, +farcasterAvatarURL?: ?string, }; diff --git a/native/account/restore-backup-screen.react.js b/native/account/restore-backup-screen.react.js index c6f14e35fb..c76a0800cd 100644 --- a/native/account/restore-backup-screen.react.js +++ b/native/account/restore-backup-screen.react.js @@ -4,6 +4,7 @@ import * as React from 'react'; import { Text, View } from 'react-native'; import * as Progress from 'react-native-progress'; +import type { SignedMessage } from 'lib/types/siwe-types.js'; import { getMessageForException } from 'lib/utils/errors.js'; import AuthContainer from './auth-components/auth-container.react.js'; @@ -35,9 +36,8 @@ export type RestoreBackupScreenParams = { } | { +type: 'siwe', - +secret: string, - +message: string, - +signature: string, + +socialProof: SignedMessage, + +backup: SignedMessage, }, }; @@ -60,14 +60,11 @@ function RestoreBackupScreen(props: Props): React.Node { } else { await restore( userIdentifier, - credentials.secret, - credentials.message, - credentials.signature, + credentials.backup.signature, + credentials.socialProof.message, + credentials.socialProof.signature, ); - await commCoreModule.setSIWEBackupSecrets({ - message: credentials.message, - signature: credentials.signature, - }); + await commCoreModule.setSIWEBackupSecrets(credentials.backup); } } catch (e) { const messageForException = getMessageForException(e); diff --git a/native/backup/restore-siwe-backup.react.js b/native/backup/restore-siwe-backup.react.js index 60c952ad6b..fb60696fb0 100644 --- a/native/backup/restore-siwe-backup.react.js +++ b/native/backup/restore-siwe-backup.react.js @@ -45,9 +45,14 @@ function RestoreSIWEBackup(props: Props): React.Node { userIdentifier, credentials: { type: 'siwe', - secret: result.signature, - message, - signature, + socialProof: { + message, + signature, + }, + backup: { + message: result.message, + signature: result.signature, + }, }, }); }, diff --git a/native/schema/CommCoreModuleSchema.js b/native/schema/CommCoreModuleSchema.js index 7fd88bb66c..16c2ab8622 100644 --- a/native/schema/CommCoreModuleSchema.js +++ b/native/schema/CommCoreModuleSchema.js @@ -16,7 +16,7 @@ import type { OutboundSessionCreationResult, } from 'lib/types/crypto-types.js'; import type { ClientDBMessageInfo } from 'lib/types/message-types.js'; -import type { SIWEBackupSecrets } from 'lib/types/siwe-types.js'; +import type { SignedMessage } from 'lib/types/siwe-types.js'; import type { InboundP2PMessage, OutboundP2PMessage, @@ -231,10 +231,8 @@ export interface CoreModuleSpec extends Spec { sessionVersion: number, overwrite: boolean, ) => Promise; - +setSIWEBackupSecrets: ( - siweBackupSecrets: SIWEBackupSecrets, - ) => Promise; - +getSIWEBackupSecrets: () => Promise; + +setSIWEBackupSecrets: (siweBackupSecrets: SignedMessage) => Promise; + +getSIWEBackupSecrets: () => Promise; +processDBStoreOperations: ( operations: ClientDBStoreOperations, ) => Promise;