Обновление архитектуры ключей и кошельков

This commit is contained in:
AidarKC
2026-10-01 17:11:38 +03:00
parent f452ce1f1e
commit 8d22602761
51 changed files with 565 additions and 898 deletions
+30 -9
View File
@@ -1,12 +1,17 @@
import { createTopBar } from '../components/topbar.js';
import {
authService,
authorizeSession,
clearAuthMessages,
consumeAuthReturnPage,
refreshSessions,
setAuthBusy,
setAuthError,
setAuthInfo,
state,
} from '../state.js';
import { toUserMessage } from '../services/ui-error-texts.js';
import { clearStoredMessages } from '../services/message-store.js';
import { emptyPasswordWords, PASSWORD_MAX_LENGTH } from '../services/password-words.js';
export const pageMeta = { id: 'login-password-view', title: 'Введите пароль', showAppChrome: false };
@@ -135,17 +140,33 @@ export function render({ navigate }) {
enterButton.textContent = 'Проверяем пароль…';
const result = await authService.createAuthSession(currentLogin, keyBundle);
// Существующую дальнейшую логику после успешного пароля сохраняем без изменений.
state.registrationDraft.flowType = 'login';
state.registrationDraft.login = result.login;
state.registrationDraft.password = password;
// В текущей модели оба рабочих ключа всегда сохраняются автоматически.
// Recovery/root private key остаётся только в памяти этого шага и в key-vault не попадает.
await authService.persistSelectedKeys(result.login, result.storagePwd, keyBundle);
await authService.persistSessionMaterial(result.login, result.sessionMaterial);
await clearStoredMessages(result.login).catch(() => {});
authorizeSession({
login: result.login,
sessionId: result.sessionId,
storagePwd: result.storagePwd,
});
state.loginDraft.login = result.login;
state.loginDraft.password = '';
state.loginDraft.passwordMode = 'single';
state.loginDraft.passwordWords = emptyPasswordWords();
state.registrationDraft.flowType = '';
state.registrationDraft.password = '';
state.registrationDraft.passwordMode = 'single';
state.registrationDraft.passwordWords = emptyPasswordWords();
state.registrationDraft.sessionId = result.sessionId;
state.registrationDraft.storagePwd = result.storagePwd;
state.registrationDraft.pendingKeyBundle = keyBundle;
state.registrationDraft.pendingSessionMaterial = result.sessionMaterial;
navigate('registration-keys-view');
state.registrationDraft.storagePwd = '';
state.registrationDraft.sessionId = '';
state.registrationDraft.pendingKeyBundle = null;
state.registrationDraft.pendingSessionMaterial = null;
await refreshSessions();
setAuthInfo(`Вы вошли как @${result.login}.`);
navigate(consumeAuthReturnPage('profile-view'));
} catch (error) {
overlay.style.display = 'none';
const message = toUserMessage(error, 'Не удалось выполнить вход.');