diff --git a/web/account/siwe-login-form.react.js b/web/account/siwe-login-form.react.js --- a/web/account/siwe-login-form.react.js +++ b/web/account/siwe-login-form.react.js @@ -16,6 +16,8 @@ import { identityGenerateNonceActionTypes, useIdentityGenerateNonce, + identityLogInActionTypes, + useIdentityWalletLogIn, } from 'lib/actions/user-actions.js'; import ConnectedWalletInfo from 'lib/components/connected-wallet-info.react.js'; import SWMansionIcon from 'lib/components/swmansion-icon.react.js'; @@ -28,7 +30,7 @@ } from 'lib/types/account-types.js'; import type { OLMIdentityKeys } from 'lib/types/crypto-types.js'; import { useLegacyAshoatKeyserverCall } from 'lib/utils/action-utils.js'; -import { ServerError } from 'lib/utils/errors.js'; +import { getMessageForException, ServerError } from 'lib/utils/errors.js'; import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js'; import { useDispatch } from 'lib/utils/redux-utils.js'; import { usingCommServicesAccessToken } from 'lib/utils/services-utils.js'; @@ -78,6 +80,8 @@ const legacySiweAuthCall = useLegacyAshoatKeyserverCall(siweAuth); const logInExtraInfo = useSelector(logInExtraInfoSelector); + const identityWalletLogIn = useIdentityWalletLogIn(); + const [siweNonce, setSIWENonce] = React.useState(null); const siweNonceShouldBeFetched = @@ -159,6 +163,29 @@ [callLegacySIWEAuthEndpoint, dispatchActionPromise, logInExtraInfo], ); + const attemptIdentityWalletLogIn = React.useCallback( + (walletAddress: string, siweMessage: string, siweSignature: string) => { + return dispatchActionPromise( + identityLogInActionTypes, + (async () => { + try { + return await identityWalletLogIn( + walletAddress, + siweMessage, + siweSignature, + ); + } catch (e) { + if (getMessageForException(e) === 'user not found') { + setError('account_does_not_exist'); + } + throw e; + } + })(), + ); + }, + [dispatchActionPromise, identityWalletLogIn], + ); + const dispatch = useDispatch(); const onSignInButtonClick = React.useCallback(async () => { invariant(signer, 'signer must be present during SIWE attempt'); @@ -172,16 +199,21 @@ ); const message = createSIWEMessage(address, statement, siweNonce); const signature = await signer.signMessage({ message }); - await attemptLegacySIWEAuth(message, signature); - dispatch({ - type: setDataLoadedActionType, - payload: { - dataLoaded: true, - }, - }); + if (usingCommServicesAccessToken) { + await attemptIdentityWalletLogIn(address, message, signature); + } else { + await attemptLegacySIWEAuth(message, signature); + dispatch({ + type: setDataLoadedActionType, + payload: { + dataLoaded: true, + }, + }); + } }, [ address, attemptLegacySIWEAuth, + attemptIdentityWalletLogIn, primaryIdentityPublicKeys, signer, siweNonce,