document.addEventListener('DOMContentLoaded', async function () { const submitButton = document.getElementById('submit'); const resetPasswordButton = document.getElementById('resetPassword'); // Retrieve the operation codes via IPC const operationCodes = await window.electronAPI.getOperationsCodes(); if (!operationCodes) { await window.electronAPI.showAlert('Internal error of the application. Failed to retrieve operation codes.'); return; } const codeLogin = operationCodes.LOGIN; const codeFindByEmail = operationCodes.FIND_BY_EMAIL; const codeFindKeyByUser = operationCodes.FIND_KEY_BY_USER_ID; const codeOk = operationCodes.OK; resetPasswordButton.addEventListener('click', function (e) { e.preventDefault(); window.electronAPI.changeContent('reset_password'); }); // Submit button logic (handle login) submitButton.addEventListener('click', async function (e) { e.preventDefault(); console.log('Submit button clicked'); const form = document.getElementById('loginForm'); const formData = new FormData(form); const email = formData.get('email'); const password = formData.get('password'); // Open a TCP socket to the stored IP if (!await window.electronAPI.openUcSocket()) { await window.electronAPI.showAlert('Internal error of the application. Unable to open socket.'); return; } // Attempt login if (!await attemptLogin(email, password)) { await window.electronAPI.closeUcSocket(); return; } // Fetch and store user info if (!await fetchAndStoreUserInfo(email)) { await window.electronAPI.closeUcSocket(); return; } // Fetch user info from local storage const userInfo = await window.electronAPI.readUserConfig('user_info'); if (!userInfo) { await window.electronAPI.closeUcSocket(); await window.electronAPI.showAlert('Failed to fetch user info.'); return; } // Fetch and store encryption key if (!await fetchAndStoreEncryptionKey(userInfo.id)) { await window.electronAPI.closeUcSocket(); return; } // Close the socket and navigate to main menu after success await window.electronAPI.closeUcSocket(); await window.electronAPI.changeContent('main_menu'); }); async function attemptLogin(email, password) { const app_type = await window.electronAPI.readUserConfig('app_type'); const messageData = { email, password, app_type }; // Send the login message to the server if (!await window.electronAPI.sendUcMessage(codeLogin, messageData)) { await window.electronAPI.showAlert('Failed to send login request.'); return false; } // Wait for the response using waitForResponse const response = await waitForResponse(); if (response && response.operationCode === codeOk) { await window.electronAPI.resetApplicationInfo(); await window.electronAPI.resetUserConfig(); await window.electronAPI.writeUserConfig('app_type', app_type); await window.electronAPI.writeUserConfig('user_info', { email, password }); return true; }else if(response && respone.operationCode !== codeOk){ await window.electronAPI.showAlert(response.metaInfo.message); return false; } await window.electronAPI.showAlert('Invalid login response received.'); return false; } async function fetchAndStoreUserInfo(userEmail) { if (!await window.electronAPI.sendUcMessage(codeFindByEmail, { email: userEmail })) { await window.electronAPI.showAlert('Failed to send request to fetch user info.'); return false; } // Wait for the response using waitForResponse const response = await waitForResponse(); if (response && response.operationCode === codeOk) { let userInfo = await window.electronAPI.readUserConfig('user_info'); if (!userInfo) { userInfo = {}; } userInfo.id = response.metaInfo.id; userInfo.departmentId = response.metaInfo.departmentId; userInfo.name = response.metaInfo.name || 'User'; await window.electronAPI.writeUserConfig('user_info', userInfo); return true; } await window.electronAPI.showAlert('Failed to fetch user info from server.'); return false; } async function fetchAndStoreEncryptionKey(userId) { if (!await window.electronAPI.sendUcMessage(codeFindKeyByUser, { userId })) { await window.electronAPI.showAlert('Failed to send request to fetch encryption key.'); return false; } // Wait for the response using waitForResponse const response = await waitForResponse(); if (response && response.operationCode === codeOk) { const encryptionKey = { key: response.metaInfo.key.key, iv: response.metaInfo.key.iv, }; await window.electronAPI.writeUserConfig('encryption_key', encryptionKey); return true; } await window.electronAPI.showAlert('Failed to fetch encryption key from server.'); return false; } });