From 620aeaf941dff905b4854ee6dc4223c17167a779 Mon Sep 17 00:00:00 2001 From: Leendert de Borst Date: Sun, 9 Feb 2025 22:42:21 +0100 Subject: [PATCH] Add generic vault validate method (#541) --- .../chrome/src/app/pages/Login.tsx | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/browser-extensions/chrome/src/app/pages/Login.tsx b/browser-extensions/chrome/src/app/pages/Login.tsx index ea61c4942..53d03db41 100644 --- a/browser-extensions/chrome/src/app/pages/Login.tsx +++ b/browser-extensions/chrome/src/app/pages/Login.tsx @@ -44,6 +44,29 @@ const Login: React.FC = () => { loadClientUrl(); }, []); + /** + * Validates the vault response and returns an error message if validation fails + */ + const validateVaultResponse = (vaultResponseJson: VaultResponse): string | null => { + /** + * Status 0 = OK, vault is ready. + * Status 1 = Merge required, which only the web client supports. + */ + if (vaultResponseJson.status !== 0) { + return 'Your vault needs to be updated. Please login on the AliasVault website and follow the steps.'; + } + + if (!vaultResponseJson.vault?.blob) { + return 'Your account does not have a vault yet. Please complete the tutorial in the AliasVault web client before using the browser extension.'; + } + + if (!AppInfo.isVaultVersionSupported(vaultResponseJson.vault.version)) { + return 'Your vault is outdated. Please login via the web client to update your vault.'; + } + + return null; + }; + /** * Handle submit */ @@ -103,16 +126,9 @@ const Login: React.FC = () => { 'Authorization': `Bearer ${validationResponse.token.token}` } }); - // Return error if vault blob does not exist yet. - if (!vaultResponseJson.vault?.blob) { - setError('Your account does not have a vault yet. Please complete the tutorial in the AliasVault web client before using the browser extension.'); - hideLoading(); - return; - } - - // Check if vault version is supported. - if (!AppInfo.isVaultVersionSupported(vaultResponseJson.vault.version)) { - setError('Your vault is outdated. Please login via the web client to update your vault.'); + const vaultError = validateVaultResponse(vaultResponseJson); + if (vaultError) { + setError(vaultError); hideLoading(); return; } @@ -165,19 +181,13 @@ const Login: React.FC = () => { 'Authorization': `Bearer ${validationResponse.token.token}` } }); - // Check if vault blob exists - if (!vaultResponseJson.vault?.blob) { - setError('Your account does not have a vault yet. Please complete the tutorial in the AliasVault web client before using the browser extension.'); + const vaultError = validateVaultResponse(vaultResponseJson); + if (vaultError) { + setError(vaultError); hideLoading(); return; } - // Check if vault version is supported. - if (!AppInfo.isVaultVersionSupported(vaultResponseJson.vault.version)) { - setError('Your vault is outdated. Please login via the web client to update your vault.'); - hideLoading(); - return; - } // All is good. Store auth info which makes the user logged in. await authContext.login(credentials.username, validationResponse.token.token, validationResponse.token.refreshToken);