From b359258d8b862b24d55a0677e643c1b909bf00cf Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Tue, 10 Jun 2025 09:32:11 +0530 Subject: [PATCH] Refactor --- .../accounts/pages/change-password.tsx | 28 ++------- web/packages/accounts/services/srp.ts | 57 +++++++++---------- 2 files changed, 33 insertions(+), 52 deletions(-) diff --git a/web/packages/accounts/pages/change-password.tsx b/web/packages/accounts/pages/change-password.tsx index 110422c20a..8c1c00ca68 100644 --- a/web/packages/accounts/pages/change-password.tsx +++ b/web/packages/accounts/pages/change-password.tsx @@ -8,13 +8,10 @@ import SetPasswordForm, { } from "ente-accounts/components/SetPasswordForm"; import { appHomeRoute, stashRedirect } from "ente-accounts/services/redirect"; import { - convertBase64ToBuffer, - convertBufferToBase64, deriveSRPPassword, - generateSRPClient, generateSRPSetupAttributes, getSRPAttributes, - startSRPSetup, + srpSetupOrReconfigure, updateSRPAndKeys, type UpdatedKeyAttr, } from "ente-accounts/services/srp"; @@ -113,27 +110,12 @@ const PageContents: React.FC = ({ user }) => { const { srpUserID, srpSalt, srpVerifier } = await generateSRPSetupAttributes(loginSubKey); - const srpClient = await generateSRPClient( - srpSalt, - srpUserID, - loginSubKey, + await srpSetupOrReconfigure( + { srpSalt, srpUserID, srpVerifier, loginSubKey }, + ({ setupID, srpM1 }) => + updateSRPAndKeys(token, { setupID, srpM1, updatedKeyAttr }), ); - const srpA = convertBufferToBase64(srpClient.computeA()); - - const { setupID, srpB } = await startSRPSetup(token, { - srpUserID, - srpSalt, - srpVerifier, - srpA, - }); - - srpClient.setB(convertBase64ToBuffer(srpB)); - - const srpM1 = convertBufferToBase64(srpClient.computeM1()); - - await updateSRPAndKeys(token, { setupID, srpM1, updatedKeyAttr }); - // Update the SRP attributes that are stored locally. const srpAttributes = await getSRPAttributes(user.email); if (srpAttributes) { diff --git a/web/packages/accounts/services/srp.ts b/web/packages/accounts/services/srp.ts index 06eaebe1f2..ce2d381253 100644 --- a/web/packages/accounts/services/srp.ts +++ b/web/packages/accounts/services/srp.ts @@ -171,41 +171,40 @@ export const updateSRPAndKeys = async ( } }; -export const configureSRP = async ({ - srpSalt, - srpUserID, - srpVerifier, - loginSubKey, -}: SRPSetupAttributes) => { - try { - const srpClient = await generateSRPClient( - srpSalt, - srpUserID, - loginSubKey, - ); +export const configureSRP = async (attr: SRPSetupAttributes) => + srpSetupOrReconfigure(attr, (cbAttr) => + completeSRPSetup(getToken(), cbAttr), + ); - const srpA = convertBufferToBase64(srpClient.computeA()); +export const srpSetupOrReconfigure = async ( + { srpSalt, srpUserID, srpVerifier, loginSubKey }: SRPSetupAttributes, + cb: ({ + setupID, + srpM1, + }: { + setupID: string; + srpM1: string; + }) => Promise<{ srpM2: string }>, +) => { + const srpClient = await generateSRPClient(srpSalt, srpUserID, loginSubKey); - log.debug(() => `srp a: ${srpA}`); - const token = getToken(); - const { setupID, srpB } = await startSRPSetup(token, { - srpA, - srpUserID, - srpSalt, - srpVerifier, - }); + const srpA = convertBufferToBase64(srpClient.computeA()); - srpClient.setB(convertBase64ToBuffer(srpB)); + const token = getToken(); + const { setupID, srpB } = await startSRPSetup(token, { + srpA, + srpUserID, + srpSalt, + srpVerifier, + }); - const srpM1 = convertBufferToBase64(srpClient.computeM1()); + srpClient.setB(convertBase64ToBuffer(srpB)); - const { srpM2 } = await completeSRPSetup(token, { srpM1, setupID }); + const srpM1 = convertBufferToBase64(srpClient.computeM1()); - srpClient.checkM2(convertBase64ToBuffer(srpM2)); - } catch (e) { - log.error("Failed to configure SRP", e); - throw e; - } + const { srpM2 } = await cb({ srpM1, setupID }); + + srpClient.checkM2(convertBase64ToBuffer(srpM2)); }; export const generateSRPClient = async (