...
This commit is contained in:
171
www/js/index.js
171
www/js/index.js
@@ -140,32 +140,37 @@ async function saveSpaceToStorage(spaceName, encryptedData) {
|
||||
|
||||
// Get encrypted space from IndexedDB
|
||||
async function getSpaceFromStorage(spaceName) {
|
||||
const db = await getDB();
|
||||
return new Promise((resolve, reject) => {
|
||||
const transaction = db.transaction([STORE_NAME], 'readonly');
|
||||
const store = transaction.objectStore(STORE_NAME);
|
||||
const request = store.get(spaceName);
|
||||
|
||||
request.onsuccess = (event) => {
|
||||
const space = event.target.result;
|
||||
if (space) {
|
||||
// Update last accessed timestamp
|
||||
updateLastAccessed(spaceName).catch(console.error);
|
||||
resolve(space.encryptedData);
|
||||
} else {
|
||||
resolve(null);
|
||||
}
|
||||
};
|
||||
|
||||
request.onerror = (event) => {
|
||||
console.error('Error retrieving space:', event.target.error);
|
||||
reject('Error retrieving space: ' + event.target.error);
|
||||
};
|
||||
|
||||
transaction.oncomplete = () => {
|
||||
db.close();
|
||||
};
|
||||
});
|
||||
try {
|
||||
const db = await getDB();
|
||||
return new Promise((resolve, reject) => {
|
||||
const transaction = db.transaction([STORE_NAME], 'readonly');
|
||||
const store = transaction.objectStore(STORE_NAME);
|
||||
const request = store.get(spaceName);
|
||||
|
||||
request.onsuccess = (event) => {
|
||||
const space = event.target.result;
|
||||
if (space) {
|
||||
// Update last accessed timestamp
|
||||
updateLastAccessed(spaceName).catch(console.error);
|
||||
resolve(space.encryptedData);
|
||||
} else {
|
||||
resolve(null);
|
||||
}
|
||||
};
|
||||
|
||||
request.onerror = (event) => {
|
||||
console.error('Error retrieving space:', event.target.error);
|
||||
reject('Error retrieving space: ' + event.target.error);
|
||||
};
|
||||
|
||||
transaction.oncomplete = () => {
|
||||
db.close();
|
||||
};
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Database error in getSpaceFromStorage:', error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Update last accessed timestamp
|
||||
@@ -253,7 +258,7 @@ let currentSpace = null;
|
||||
let selectedKeypair = null;
|
||||
|
||||
// Update UI based on login state
|
||||
function updateLoginUI() {
|
||||
async function updateLoginUI() {
|
||||
const loginForm = document.getElementById('login-form');
|
||||
const logoutForm = document.getElementById('logout-form');
|
||||
const loginStatus = document.getElementById('login-status');
|
||||
@@ -274,7 +279,11 @@ function updateLoginUI() {
|
||||
}
|
||||
|
||||
// Update the spaces list
|
||||
updateSpacesList();
|
||||
try {
|
||||
await updateSpacesList();
|
||||
} catch (e) {
|
||||
console.error('Error updating spaces list in UI:', e);
|
||||
}
|
||||
}
|
||||
|
||||
// Update the spaces dropdown list
|
||||
@@ -323,24 +332,33 @@ async function performLogin() {
|
||||
return;
|
||||
}
|
||||
|
||||
// Decrypt the space
|
||||
const result = decrypt_key_space(encryptedSpace, password);
|
||||
if (result === 0) {
|
||||
isLoggedIn = true;
|
||||
currentSpace = spaceName;
|
||||
updateLoginUI();
|
||||
updateKeypairsList();
|
||||
document.getElementById('space-result').textContent = `Successfully logged in to space "${spaceName}"`;
|
||||
console.log('Retrieved space from IndexedDB:', { spaceName, encryptedDataLength: encryptedSpace.length });
|
||||
|
||||
try {
|
||||
// Decrypt the space - this is a synchronous WebAssembly function
|
||||
const result = decrypt_key_space(encryptedSpace, password);
|
||||
console.log('Decrypt result:', result);
|
||||
|
||||
// Setup auto-logout
|
||||
updateActivity();
|
||||
setupAutoLogout();
|
||||
|
||||
// Add activity listeners
|
||||
document.addEventListener('click', updateActivity);
|
||||
document.addEventListener('keypress', updateActivity);
|
||||
} else {
|
||||
document.getElementById('space-result').textContent = `Error logging in: ${result}`;
|
||||
if (result === 0) {
|
||||
isLoggedIn = true;
|
||||
currentSpace = spaceName;
|
||||
await updateLoginUI();
|
||||
updateKeypairsList();
|
||||
document.getElementById('space-result').textContent = `Successfully logged in to space "${spaceName}"`;
|
||||
|
||||
// Setup auto-logout
|
||||
updateActivity();
|
||||
setupAutoLogout();
|
||||
|
||||
// Add activity listeners
|
||||
document.addEventListener('click', updateActivity);
|
||||
document.addEventListener('keypress', updateActivity);
|
||||
} else {
|
||||
document.getElementById('space-result').textContent = `Error logging in: ${result}`;
|
||||
}
|
||||
} catch (decryptErr) {
|
||||
console.error('Decryption error:', decryptErr);
|
||||
document.getElementById('space-result').textContent = `Decryption error: ${decryptErr}`;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Login error:', e);
|
||||
@@ -369,31 +387,50 @@ async function performCreateSpace() {
|
||||
return;
|
||||
}
|
||||
|
||||
// Create new space
|
||||
const result = create_key_space(spaceName);
|
||||
if (result === 0) {
|
||||
// Encrypt and save the space
|
||||
const encryptedSpace = encrypt_key_space(password);
|
||||
await saveSpaceToStorage(spaceName, encryptedSpace);
|
||||
try {
|
||||
// Create new space
|
||||
console.log('Creating new space:', spaceName);
|
||||
const result = create_key_space(spaceName);
|
||||
console.log('Create space result:', result);
|
||||
|
||||
isLoggedIn = true;
|
||||
currentSpace = spaceName;
|
||||
updateLoginUI();
|
||||
updateKeypairsList();
|
||||
document.getElementById('space-result').textContent = `Successfully created space "${spaceName}"`;
|
||||
|
||||
// Setup auto-logout
|
||||
updateActivity();
|
||||
setupAutoLogout();
|
||||
|
||||
// Add activity listeners
|
||||
document.addEventListener('click', updateActivity);
|
||||
document.addEventListener('keypress', updateActivity);
|
||||
} else {
|
||||
document.getElementById('space-result').textContent = `Error creating space: ${result}`;
|
||||
if (result === 0) {
|
||||
try {
|
||||
// Encrypt and save the space
|
||||
console.log('Encrypting space with password');
|
||||
const encryptedSpace = encrypt_key_space(password);
|
||||
console.log('Encrypted space length:', encryptedSpace.length);
|
||||
|
||||
// Save to IndexedDB
|
||||
console.log('Saving to IndexedDB');
|
||||
await saveSpaceToStorage(spaceName, encryptedSpace);
|
||||
console.log('Save completed');
|
||||
|
||||
isLoggedIn = true;
|
||||
currentSpace = spaceName;
|
||||
await updateLoginUI();
|
||||
updateKeypairsList();
|
||||
document.getElementById('space-result').textContent = `Successfully created space "${spaceName}"`;
|
||||
|
||||
// Setup auto-logout
|
||||
updateActivity();
|
||||
setupAutoLogout();
|
||||
|
||||
// Add activity listeners
|
||||
document.addEventListener('click', updateActivity);
|
||||
document.addEventListener('keypress', updateActivity);
|
||||
} catch (encryptError) {
|
||||
console.error('Error encrypting or saving space:', encryptError);
|
||||
document.getElementById('space-result').textContent = `Error saving space: ${encryptError}`;
|
||||
}
|
||||
} else {
|
||||
document.getElementById('space-result').textContent = `Error creating space: ${result}`;
|
||||
}
|
||||
} catch (createError) {
|
||||
console.error('Error in WebAssembly create_key_space:', createError);
|
||||
document.getElementById('space-result').textContent = `Error creating key space: ${createError}`;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Error creating space:', e);
|
||||
console.error('Error checking existing space:', e);
|
||||
document.getElementById('space-result').textContent = `Error: ${e}`;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user