SHA256
UI: нормальное закрытие сессий и сортировка устройств
This commit is contained in:
@@ -174,10 +174,10 @@ export function render({ navigate }) {
|
||||
|
||||
const finalizeAuthorizedLogin = async (keys, login) => {
|
||||
const session = await authService.createSessionFromImportedSecrets(login, keys);
|
||||
await terminateCurrentSession({ closeServerSession: true });
|
||||
await clearStoredMessages().catch(() => {});
|
||||
clearBrowserClientData();
|
||||
await clearClientAuthData().catch(() => {});
|
||||
await terminateCurrentSession();
|
||||
await saveEncryptedUserSecrets(session.login, session.storagePwd, keys);
|
||||
await authService.persistSessionMaterial(session.login, session.sessionMaterial);
|
||||
const resumed = await authService.resumeSession(session.login, session.sessionId);
|
||||
@@ -194,6 +194,38 @@ export function render({ navigate }) {
|
||||
navigate('profile-view');
|
||||
};
|
||||
|
||||
const finalizeAuthorizedSessionAttach = async (payloadSession, login, requesterKeys) => {
|
||||
const sessionId = String(payloadSession?.sessionId || '').trim();
|
||||
const storagePwd = String(payloadSession?.storagePwd || '').trim();
|
||||
if (!sessionId || !storagePwd) {
|
||||
throw new Error('В session-only payload нет sessionId или storagePwd');
|
||||
}
|
||||
const sessionMaterial = {
|
||||
sessionId,
|
||||
sessionKey: requesterKeys.sessionKey,
|
||||
sessionPrivPkcs8: requesterKeys.sessionPrivPkcs8,
|
||||
sessionType: Number(payloadSession?.sessionType || 50) || 50,
|
||||
};
|
||||
|
||||
await terminateCurrentSession({ closeServerSession: true });
|
||||
await clearStoredMessages().catch(() => {});
|
||||
clearBrowserClientData();
|
||||
await clearClientAuthData().catch(() => {});
|
||||
await authService.persistSessionMaterial(login, sessionMaterial);
|
||||
const resumed = await authService.resumeSession(login, sessionId);
|
||||
authorizeSession({
|
||||
login: resumed.login || login,
|
||||
sessionId: resumed.sessionId || sessionId,
|
||||
storagePwd: resumed.storagePwd || storagePwd,
|
||||
});
|
||||
state.loginDraft.login = resumed.login || login;
|
||||
state.loginDraft.password = '';
|
||||
await refreshSessions();
|
||||
setAuthInfo(`Session-only вход выполнен для @${resumed.login || login}.`);
|
||||
showToast(`Wallet-session подключена для @${resumed.login || login}`);
|
||||
navigate('profile-view');
|
||||
};
|
||||
|
||||
const schedulePoll = () => {
|
||||
stopPolling();
|
||||
if (!activePairingId || isDisposed) return;
|
||||
@@ -209,7 +241,12 @@ export function render({ navigate }) {
|
||||
stopCountdown();
|
||||
setStatus(status, 'Заявка подтверждена. Подключаем устройство...', 'info');
|
||||
const decoded = await decryptPairingPayloadFromEnvelope(payload?.encryptedPayload, requesterMaterial);
|
||||
if (String(decoded?.type || '') !== 'shine-esp-pairing-transfer') {
|
||||
const decodedType = String(decoded?.type || '');
|
||||
if (decodedType === 'shine-esp-session-attach') {
|
||||
await finalizeAuthorizedSessionAttach(decoded.session, decoded.login || loginInput.value, requesterMaterial);
|
||||
return;
|
||||
}
|
||||
if (decodedType !== 'shine-esp-pairing-transfer') {
|
||||
throw new Error('Получен неподдерживаемый pairing payload');
|
||||
}
|
||||
await finalizeAuthorizedLogin(decoded.keys, decoded.login || loginInput.value);
|
||||
|
||||
Reference in New Issue
Block a user