update_260201-3
This commit is contained in:
@@ -6,9 +6,11 @@
|
||||
|
||||
import { useState, useEffect, useCallback } from 'react';
|
||||
import * as bip39 from 'bip39';
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||
import { useAuth } from '../context/AuthContext';
|
||||
import { assetsService } from '../services/assets.service';
|
||||
import { createAssetPayload } from '../services/vault.service';
|
||||
import { getVaultStorageKeys, DEBUG_MODE } from '../config';
|
||||
import { SentinelVault } from '../utils/crypto_core';
|
||||
import {
|
||||
initialVaultAssets,
|
||||
mapApiAssetsToVaultAssets,
|
||||
@@ -51,7 +53,7 @@ export interface UseVaultAssetsReturn {
|
||||
* Vault assets list + create. Fetches on unlock when token exists; keeps mock on error.
|
||||
*/
|
||||
export function useVaultAssets(isUnlocked: boolean): UseVaultAssetsReturn {
|
||||
const { token, signOut } = useAuth();
|
||||
const { user, token, signOut } = useAuth();
|
||||
const [assets, setAssets] = useState<VaultAsset[]>(initialVaultAssets);
|
||||
const [isSealing, setIsSealing] = useState(false);
|
||||
const [createError, setCreateError] = useState<string | null>(null);
|
||||
@@ -101,19 +103,37 @@ export function useVaultAssets(isUnlocked: boolean): UseVaultAssetsReturn {
|
||||
setIsSealing(true);
|
||||
setCreateError(null);
|
||||
try {
|
||||
const wordList = bip39.wordlists.english;
|
||||
const payload = await createAssetPayload(
|
||||
title.trim(),
|
||||
content.trim(),
|
||||
wordList,
|
||||
'note',
|
||||
0
|
||||
);
|
||||
const vaultKeys = getVaultStorageKeys(user?.id ?? null);
|
||||
const [s1Str, aesKeyHex, s0Str, s2Str] = await Promise.all([
|
||||
AsyncStorage.getItem(vaultKeys.SHARE_SERVER),
|
||||
AsyncStorage.getItem(vaultKeys.AES_KEY),
|
||||
AsyncStorage.getItem(vaultKeys.SHARE_DEVICE),
|
||||
AsyncStorage.getItem(vaultKeys.SHARE_HEIR),
|
||||
]);
|
||||
|
||||
if (!s1Str || !aesKeyHex) {
|
||||
throw new Error('Vault keys missing. Please re-unlock your vault.');
|
||||
}
|
||||
|
||||
const vault = new SentinelVault();
|
||||
const aesKey = Buffer.from(aesKeyHex, 'hex');
|
||||
const encryptedBuffer = vault.encryptData(aesKey, content.trim());
|
||||
const content_inner_encrypted = encryptedBuffer.toString('hex');
|
||||
|
||||
if (DEBUG_MODE) {
|
||||
console.log('[DEBUG] Crypto Data during Asset Creation:');
|
||||
console.log(' s0 (Device):', s0Str);
|
||||
console.log(' s1 (Server):', s1Str);
|
||||
console.log(' s2 (Heir): ', s2Str);
|
||||
console.log(' AES Key: ', aesKeyHex);
|
||||
console.log(' Encrypted: ', content_inner_encrypted);
|
||||
}
|
||||
|
||||
await assetsService.createAsset(
|
||||
{
|
||||
title: payload.title,
|
||||
private_key_shard: payload.private_key_shard,
|
||||
content_inner_encrypted: payload.content_inner_encrypted,
|
||||
title: title.trim(),
|
||||
private_key_shard: s1Str,
|
||||
content_inner_encrypted,
|
||||
},
|
||||
token
|
||||
);
|
||||
@@ -143,7 +163,7 @@ export function useVaultAssets(isUnlocked: boolean): UseVaultAssetsReturn {
|
||||
setIsSealing(false);
|
||||
}
|
||||
},
|
||||
[token, refreshAssets, signOut]
|
||||
[token, user, refreshAssets, signOut]
|
||||
);
|
||||
|
||||
const clearCreateError = useCallback(() => setCreateError(null), []);
|
||||
|
||||
Reference in New Issue
Block a user