Refactor get metadata call (#771)

This commit is contained in:
Leendert de Borst committed 2025-04-16 22:09:49 +02:00
1 parent c0b0c97106
commit 39f8157683
3 files changed
+19 -22

No files matched your search

+5 -2
View File
@@ -118,9 +118,12 @@ function RootLayoutNav() {
} }
// If the vault revision is higher, fetch the latest vault // If the vault revision is higher, fetch the latest vault
const vaultMetadata = await dbContext.getVaultMetadata();
const vaultRevisionNumber = vaultMetadata?.vaultRevisionNumber ?? 0;
console.log('Vault revision:', statusResponse.vaultRevision); console.log('Vault revision:', statusResponse.vaultRevision);
console.log('Current vault revision:', dbContext.vaultRevision); console.log('Current vault revision:', vaultRevisionNumber);
if (statusResponse.vaultRevision > dbContext.vaultRevision) {
if (statusResponse.vaultRevision > vaultRevisionNumber) {
const vaultResponseJson = await webApi.get<VaultResponse>('Vault'); const vaultResponseJson = await webApi.get<VaultResponse>('Vault');
const vaultError = webApi.validateVaultResponse(vaultResponseJson); const vaultError = webApi.validateVaultResponse(vaultResponseJson);
+10 -14
View File
@@ -10,7 +10,7 @@ type DbContextType = {
dbAvailable: boolean; dbAvailable: boolean;
initializeDatabase: (vaultResponse: VaultResponse, derivedKey: string | null) => Promise<void>; initializeDatabase: (vaultResponse: VaultResponse, derivedKey: string | null) => Promise<void>;
clearDatabase: () => void; clearDatabase: () => void;
vaultMetadata: VaultMetadata | null; getVaultMetadata: () => Promise<VaultMetadata | null>;
} }
const DbContext = createContext<DbContextType | undefined>(undefined); const DbContext = createContext<DbContextType | undefined>(undefined);
@@ -36,11 +36,6 @@ export const DbProvider: React.FC<{ children: React.ReactNode }> = ({ children }
*/ */
const [dbAvailable, setDbAvailable] = useState(false); const [dbAvailable, setDbAvailable] = useState(false);
/**
* Vault metadata containing public/private email domains and revision number
*/
const [vaultMetadata, setVaultMetadata] = useState<VaultMetadata | null>(null);
const initializeDatabase = useCallback(async (vaultResponse: VaultResponse, derivedKey: string | null = null) => { const initializeDatabase = useCallback(async (vaultResponse: VaultResponse, derivedKey: string | null = null) => {
// If the derived key is provided, store it in the keychain. // If the derived key is provided, store it in the keychain.
// Otherwise we assume the encryption key is already stored in the keychain. // Otherwise we assume the encryption key is already stored in the keychain.
@@ -62,7 +57,6 @@ export const DbProvider: React.FC<{ children: React.ReactNode }> = ({ children }
setDbInitialized(true); setDbInitialized(true);
setDbAvailable(true); setDbAvailable(true);
setVaultMetadata(metadata);
}, []); }, []);
const checkStoredVault = useCallback(async () => { const checkStoredVault = useCallback(async () => {
@@ -74,22 +68,18 @@ export const DbProvider: React.FC<{ children: React.ReactNode }> = ({ children }
if (metadata) { if (metadata) {
setDbInitialized(true); setDbInitialized(true);
setDbAvailable(true); setDbAvailable(true);
setVaultMetadata(metadata);
} else { } else {
setDbInitialized(true); setDbInitialized(true);
setDbAvailable(false); setDbAvailable(false);
setVaultMetadata(null);
} }
} else { } else {
setDbInitialized(true); setDbInitialized(true);
setDbAvailable(false); setDbAvailable(false);
setVaultMetadata(null);
} }
} catch (error) { } catch (error) {
console.error('Error checking vault initialization:', error); console.error('Error checking vault initialization:', error);
setDbInitialized(true); setDbInitialized(true);
setDbAvailable(false); setDbAvailable(false);
setVaultMetadata(null);
} }
}, []); }, []);
@@ -107,19 +97,25 @@ export const DbProvider: React.FC<{ children: React.ReactNode }> = ({ children }
*/ */
const clearDatabase = useCallback(() : void => { const clearDatabase = useCallback(() : void => {
setDbInitialized(false); setDbInitialized(false);
setVaultMetadata(null);
// TODO: implement actual vault clearing. // TODO: implement actual vault clearing.
credentialManager.clearVault(); credentialManager.clearVault();
}, []); }, []);
/**
* Get the current vault metadata directly from SQLite client
*/
const getVaultMetadata = useCallback(async () : Promise<VaultMetadata | null> => {
return await sqliteClient.getVaultMetadata();
}, []);
const contextValue = useMemo(() => ({ const contextValue = useMemo(() => ({
sqliteClient, sqliteClient,
dbInitialized, dbInitialized,
dbAvailable, dbAvailable,
initializeDatabase, initializeDatabase,
clearDatabase, clearDatabase,
vaultMetadata getVaultMetadata
}), [sqliteClient, dbInitialized, dbAvailable, initializeDatabase, clearDatabase, vaultMetadata]); }), [sqliteClient, dbInitialized, dbAvailable, initializeDatabase, clearDatabase, getVaultMetadata]);
return ( return (
<DbContext.Provider value={contextValue}> <DbContext.Provider value={contextValue}>
@@ -1,7 +1,5 @@
export type VaultResponse = { export type VaultMetadata = {
success: boolean, error?: string, publicEmailDomains: string[],
vault?: string, privateEmailDomains: string[],
publicEmailDomains?: string[], vaultRevisionNumber: number
privateEmailDomains?: string[],
vaultRevisionNumber?: number
}; };